.TH "xdp-bench" "8" "FEBRUARY 19, 2026" "V1.6.3" "A simple XDP benchmarking tool" .SH "نام (NAME)" xdp-bench \- ابزار سادهٔ محک‌زنی و ارزیابی کارایی XDP .SH "خلاصه دستور (SYNOPSIS)" .PP ابزار XDP-bench یک ابزار ارزیابی و محک‌زنی (benchmarking) برای به‌کارگیری و آزمایش حالت‌های عملیاتی مختلف XDP است\&. این برنامه با هدف ارائهٔ یک ابزار ساده برای نمایش حالت‌های کاری گوناگون طراحی شده است؛ این حالت‌ها شامل دور انداختن بسته‌ها (dropping)، هدایت سنجاق‌سری (hairpin forwarding با استفاده از کد بازگشتی \fIXDP_TX\fP)، و تغییر مسیر با استفاده از امکانات مختلف تغییر مسیر بسته درون هسته لینوکس هستند\&. .PP حالت‌های drop و TX از گزینه‌های مختلفی برای کنترل اینکه آیا داده‌های بسته پیش از دور انداخته شدن یا ارسال، لمس و دستکاری (خوانده یا نوشته) شوند یا خیر، پشتیبانی می‌کنند\&. حالت‌های تغییر مسیر (redirection) از به‌کارگیری تابع کمکی سادهٔ مبتنی بر ifindex به نام \fIbpf_redirect\fP، تابع کمکی \fIbpf_redirect_map\fP با استفاده از یک cpumap به عنوان مقصد، \fIbpf_redirect_map\fP با استفاده از devmap به عنوان مقصد، و حالت پخش همگانی (broadcast) در devmap که امکان تغییر مسیر به چندین دستگاه را فراهم می‌سازد، پشتیبانی می‌کنند\&. .PP اطلاعات بیشتر دربارهٔ مفهوم خروجی، در هر دو حالت خروجی پیش‌فرض (مختصر) و گسترده (extended)، در بخش \fBتوضیحات قالب خروجی\fP در ادامه آورده شده است\&. .SS "اجرای xdp-bench" .PP نحو اجرای xdp-bench به صورت زیر است: .RS .nf \fCUsage: xdp-bench COMMAND [options] COMMAND can be one of: drop - Drop all packets on an interface pass - Pass all packets to the network stack tx - Transmit packets back out on an interface (hairpin forwarding) redirect - XDP redirect using the bpf_redirect() helper redirect-cpu - XDP CPU redirect using BPF_MAP_TYPE_CPUMAP redirect-map - XDP redirect using BPF_MAP_TYPE_DEVMAP redirect-multi - XDP multi-redirect using BPF_MAP_TYPE_DEVMAP and the BPF_F_BROADCAST flag xsk-drop - AF_XDP socket-based drop xsk-tx - AF_XDP socket-based hairpin forwarding \fP .fi .RE .PP هر دستور و گزینه‌های آن در ادامه توضیح داده شده‌اند\&. همچنین می‌توانید از \fIxdp\-bench COMMAND \-\-help\fP برای مشاهدهٔ گزینه‌های هر دستور استفاده کنید\&. .SH "دستور DROP" .PP در این حالت، \fIxdp\-bench\fP یک برنامهٔ XDP را روی یک رابط شبکه نصب می‌کند که صرفاً تمام بسته‌ها را دور می‌اندازد\&. گزینه‌هایی برای کنترل نحوهٔ برخورد با بسته پیش از دور انداختن آن (لمس و دستکاری داده‌های بسته یا عدم انجام آن)، و نیز انتخاب آمارهای جمع‌آوری‌شده وجود دارد\&. این یک محک پایه برای عملکرد سطح مبنا (بهترین حالت ممکن) XDP روی یک رابط شبکه است\&. .PP نحو اجرای دستور \fIdrop\fP به صورت زیر است: .PP \fIxdp\-bench drop [options] \fP .PP که در آن \fI\fP نام رابطی است که برنامهٔ XDP باید روی آن نصب شود\&. .PP گزینه‌های پشتیبانی‌شده عبارتند از: .SS "-p, --packet-operation " .PP عملیاتی را که باید پیش از دور انداختن روی بسته انجام شود مشخص می‌کند\&. عملیات‌های زیر در دسترس هستند: .RS .nf \fCno-touch - Drop the packet without touching the packet data read-data - Read a field in the packet header before dropping parse-ip - Parse the IP header field before dropping swap-macs - Swap the source and destination MAC addresses before dropping \fP .fi .RE .PP دستکاری بسته پیش از دور انداختن آن می‌تواند تأثیر قابل‌توجهی بر کارایی داشته باشد، چرا که این کار مستلزم آوردن داده‌های بسته به حافظه نهان (cache) پردازنده (و در صورت نوشتن، تخلیهٔ مجدد آن به بیرون) است\&. .PP مقدار پیش‌فرض برای این گزینه \fIno\-touch\fP است\&. .SS "-l, --load-mode " .PP سازوکاری را که xdp-bench باید برای بارگذاری (و ذخیره‌سازی) داده‌های بسته استفاده کند مشخص می‌کند\&. حالت‌های زیر در دسترس هستند: .RS .nf \fCdpa - Use traditional Direct Packet Access from the XDP program load-bytes - Use the xdp_load_bytes() and xdp_store_bytes() helper functions \fP .fi .RE .PP این گزینه می‌تواند برای ارزیابی کارایی حالت‌های مختلف دسترسی به بسته که توسط هسته پشتیبانی می‌شوند، به کار رود\&. .PP مقدار پیش‌فرض برای این گزینه \fIdpa\fP است\&. .SS "-r, --rxq-stats" .PP در صورت تنظیم، برنامهٔ XDP همچنین آماری دربارهٔ اینکه هر بسته روی کدام شاخص صف دریافت (receive queue index) تحویل گرفته شده است جمع‌آوری می‌کند\&. این آمار در حالت خروجی گسترده به همراه داده‌های به ازای هر پردازنده (که بسته به پیکربندی سخت‌افزاری ممکن است معادل باشند یا نباشند) نمایش داده می‌شود\&. .SS "-i, --interval " .PP تنظیم بازهٔ زمانی نظرسنجی (polling interval) برای جمع‌آوری تمام آمارها و نمایش آن‌ها در خروجی\&. واحد این بازه ثانیه است\&. .SS "-e, --extended" .PP اجرای xdp-bench در حالت خروجی «گسترده» (extended)\&. در صورت عدم تنظیم، xdp-bench در حالت «مختصر» (terse) آغاز به کار می‌کند\&. حالت خروجی را می‌توان با فشردن کلیدهای ترکیبی C-\\ در زمان اجرای برنامه تغییر داد\&. همچنین به بخش \fBتوضیحات قالب خروجی\fP در ادامه مراجعه کنید\&. .SS "-m, --mode" .PP حالت برنامهٔ XDP را انتخاب می‌کند (native یا skb)\&. توجه داشته باشید که حالت native XDP پیش‌فرض است، و بارگذاری برنامهٔ تغییر مسیر به صورت skb نه کارایی مناسبی دارد و نه توصیه می‌شود\&. با این حال، این گزینه در صورتی که درایور رابط از حالت بومی XDP پشتیبانی نکند، یا هنگام آزمایش سادهٔ ابزار مفید است\&. .SS "-v, --verbose" .PP فعال‌سازی گزارش‌دهی پرجزئیات\&. با دوبار تعیین این گزینه، گزارش‌دهی پرجزئیات از کتابخانه‌های زیرین \fIlibxdp\fP و \fIlibbpf\fP فعال می‌شود\&. .SS "--version" .PP نمایش نسخهٔ برنامه و خروج\&. .SS "-h, --help" .PP نمایش خلاصه‌ای از گزینه‌های موجود\&. .SH "دستور PASS" .PP در این حالت، \fIxdp\-bench\fP یک برنامهٔ XDP را روی یک رابط شبکه نصب می‌کند که تمام بسته‌ها را پس از پردازش، به پشتهٔ شبکه تحویل می‌دهد (با بازگرداندن \fIXDP_PASS\fP)\&. گزینه‌هایی برای کنترل نحوهٔ برخورد با بسته پیش از عبور دادن آن (دستکاری داده‌های بسته یا عدم انجام آن)، و نیز آمارهایی که باید جمع‌آوری شوند وجود دارد\&. این یک محک پایه برای سنجش بار پردازشی ناشی از نصب برنامهٔ XDP بر روی رابط شبکه در حین اجرای پشتهٔ عادی شبکه است\&. .PP نحو اجرای دستور \fIpass\fP به صورت زیر است: .PP \fIxdp\-bench pass [options] \fP .PP که در آن \fI\fP نام رابطی است که برنامهٔ XDP باید روی آن نصب شود\&. .PP گزینه‌های پشتیبانی‌شده عبارتند از: .SS "-p, --packet-operation " .PP عملیاتی را که باید پیش از عبور دادن روی بسته انجام شود مشخص می‌کند\&. عملیات‌های زیر در دسترس هستند: .RS .nf \fCno-touch - Pass the packet without touching the packet data read-data - Read a field in the packet header before passing parse-ip - Parse the IP header field before passing swap-macs - Swap the source and destination MAC addresses before passing \fP .fi .RE .PP مقدار پیش‌فرض برای این گزینه \fIno\-touch\fP است\&. .SS "-l, --load-mode " .PP سازوکاری را که xdp-bench باید برای بارگذاری (و ذخیره‌سازی) داده‌های بسته استفاده کند مشخص می‌کند\&. حالت‌های زیر در دسترس هستند: .RS .nf \fCdpa - Use traditional Direct Packet Access from the XDP program load-bytes - Use the xdp_load_bytes() and xdp_store_bytes() helper functions \fP .fi .RE .PP این گزینه می‌تواند برای ارزیابی کارایی حالت‌های مختلف دسترسی به بسته که توسط هسته پشتیبانی می‌شوند، به کار رود\&. .PP مقدار پیش‌فرض برای این گزینه \fIdpa\fP است\&. .SS "-r, --rxq-stats" .PP در صورت تنظیم، برنامهٔ XDP همچنین آماری دربارهٔ اینکه هر بسته روی کدام شاخص صف دریافت تحویل گرفته شده است جمع‌آوری می‌کند\&. این آمار در حالت خروجی گسترده به همراه داده‌های به ازای هر پردازنده (که بسته به پیکربندی سخت‌افزاری ممکن است معادل باشند یا نباشند) نمایش داده می‌شود\&. .SS "-i, --interval " .PP تنظیم بازهٔ زمانی نظرسنجی برای جمع‌آوری تمام آمارها و نمایش آن‌ها در خروجی\&. واحد این بازه ثانیه است\&. .SS "-e, --extended" .PP اجرای xdp-bench در حالت خروجی «گسترده» (extended)\&. در صورت عدم تنظیم، xdp-bench در حالت «مختصر» (terse) آغاز به کار می‌کند\&. حالت خروجی را می‌توان با فشردن کلیدهای ترکیبی C-\\ در زمان اجرای برنامه تغییر داد\&. همچنین به بخش \fBتوضیحات قالب خروجی\fP در ادامه مراجعه کنید\&. .SS "-m, --mode" .PP حالت برنامهٔ XDP را انتخاب می‌کند (native یا skb)\&. توجه داشته باشید که حالت native XDP پیش‌فرض است، و بارگذاری برنامهٔ تغییر مسیر به صورت skb نه کارایی مناسبی دارد و نه توصیه می‌شود\&. با این حال، این گزینه در صورتی که درایور رابط از حالت بومی XDP پشتیبانی نکند، یا هنگام آزمایش سادهٔ ابزار مفید است\&. .SS "-v, --verbose" .PP فعال‌سازی گزارش‌دهی پرجزئیات\&. با دوبار تعیین این گزینه، گزارش‌دهی پرجزئیات از کتابخانه‌های زیرین \fIlibxdp\fP و \fIlibbpf\fP فعال می‌شود\&. .SS "--version" .PP نمایش نسخهٔ برنامه و خروج\&. .SS "-h, --help" .PP نمایش خلاصه‌ای از گزینه‌های موجود\&. .SH "دستور TX" .PP در این حالت، \fIxdp\-bench\fP یک برنامهٔ XDP را روی یک رابط شبکه نصب می‌کند که اصطلاحاً «هدایت سنجاق‌سری» (hairpin forwarding) انجام می‌دهد؛ به این معنا که هر بسته مجدداً از همان رابط به بیرون ارسال می‌شود (با استفاده از کد بازگشتی \fIXDP_TX\fP)\&. گزینه‌هایی برای کنترل اقداماتی که پیش از ارسال روی بسته انجام می‌شود (دستکاری داده‌های بسته یا عدم انجام آن)، و نیز آمارهایی که باید جمع‌آوری شوند وجود دارد\&. .PP نحو اجرای دستور \fItx\fP به صورت زیر است: .PP \fIxdp\-bench tx [options] \fP .PP که در آن \fI\fP نام رابطی است که برنامهٔ XDP باید روی آن نصب شود\&. .PP گزینه‌های پشتیبانی‌شده عبارتند از: .SS "-p, --packet-operation " .PP عملیاتی را که باید پیش از ارسال روی بسته انجام شود مشخص می‌کند\&. عملیات‌های زیر در دسترس هستند: .RS .nf \fCno-touch - Transmit the packet without touching the packet data read-data - Read a field in the packet header before transmitting parse-ip - Parse the IP header field before transmitting swap-macs - Swap the source and destination MAC addresses before transmitting \fP .fi .RE .PP برای اینکه بسته بتواند با موفقیت به سمت فرستنده بازگردانده شود، نشانی‌های MAC باید جابه‌جا (swap) شوند تا MAC مبدأ با دستگاه شبکه مطابقت داشته باشد\&. با این حال، جابه‌جایی دارای بار پردازشی است، بنابراین این گزینه امکان غیرفعال کردن این تابع را فراهم می‌سازد\&. .PP مقدار پیش‌فرض برای این گزینه \fIswap\-macs\fP است\&. .SS "-l, --load-mode " .PP سازوکاری را که xdp-bench باید برای بارگذاری (و ذخیره‌سازی) داده‌های بسته استفاده کند مشخص می‌کند\&. حالت‌های زیر در دسترس هستند: .RS .nf \fCdpa - Use traditional Direct Packet Access from the XDP program load-bytes - Use the xdp_load_bytes() and xdp_store_bytes() helper functions \fP .fi .RE .PP این گزینه می‌تواند برای ارزیابی کارایی حالت‌های مختلف دسترسی به بسته که توسط هسته پشتیبانی می‌شوند، به کار رود\&. .PP مقدار پیش‌فرض برای این گزینه \fIdpa\fP است\&. .SS "-r, --rxq-stats" .PP در صورت تنظیم، برنامهٔ XDP همچنین آماری دربارهٔ اینکه هر بسته روی کدام شاخص صف دریافت تحویل گرفته شده است جمع‌آوری می‌کند\&. این آمار در حالت خروجی گسترده به همراه داده‌های به ازای هر پردازنده (که بسته به پیکربندی سخت‌افزاری ممکن است معادل باشند یا نباشند) نمایش داده می‌شود\&. .SS "-i, --interval " .PP تنظیم بازهٔ زمانی نظرسنجی برای جمع‌آوری تمام آمارها و نمایش آن‌ها در خروجی\&. واحد این بازه ثانیه است\&. .SS "-e, --extended" .PP اجرای xdp-bench در حالت خروجی «گسترده» (extended)\&. در صورت عدم تنظیم، xdp-bench در حالت «مختصر» (terse) آغاز به کار می‌کند\&. حالت خروجی را می‌توان با فشردن کلیدهای ترکیبی C-\\ در زمان اجرای برنامه تغییر داد\&. همچنین به بخش \fBتوضیحات قالب خروجی\fP در ادامه مراجعه کنید\&. .SS "-m, --mode" .PP حالت برنامهٔ XDP را انتخاب می‌کند (native یا skb)\&. توجه داشته باشید که حالت native XDP پیش‌فرض است، و بارگذاری برنامهٔ تغییر مسیر به صورت skb نه کارایی مناسبی دارد و نه توصیه می‌شود\&. با این حال، این گزینه در صورتی که درایور رابط از حالت بومی XDP پشتیبانی نکند، یا هنگام آزمایش سادهٔ ابزار مفید است\&. .SS "-v, --verbose" .PP فعال‌سازی گزارش‌دهی پرجزئیات\&. با دوبار تعیین این گزینه، گزارش‌دهی پرجزئیات از کتابخانه‌های زیرین \fIlibxdp\fP و \fIlibbpf\fP فعال می‌شود\&. .SS "--version" .PP نمایش نسخهٔ برنامه و خروج\&. .SS "-h, --help" .PP نمایش خلاصه‌ای از گزینه‌های موجود\&. .SH "دستور REDIRECT" .PP در این حالت، \fIxdp\-bench\fP تغییر مسیر بسته را بین دو رابط ارائه شده در خط فرمان، با استفاده از تابع کمکی BPF به نام \fIbpf_redirect\fP که هنگام دریافت بسته روی رابط ورودی (ingress) فعال می‌شود، تنظیم می‌کند\&. .PP نحو اجرای دستور \fIredirect\fP به صورت زیر است: .PP \fIxdp\-bench redirect [options] \fP .PP که در آن \fI\fP نام رابط ورودی است که بسته‌ها از آن به سمت رابط خروجی \fI\fP تغییر مسیر داده می‌شوند\&. .PP گزینه‌های پشتیبانی‌شده عبارتند از: .SS "-l, --load-mode " .PP سازوکاری را که xdp-bench باید برای بارگذاری (و ذخیره‌سازی) داده‌های بسته استفاده کند مشخص می‌کند\&. حالت‌های زیر در دسترس هستند: .RS .nf \fCdpa - Use traditional Direct Packet Access from the XDP program load-bytes - Use the xdp_load_bytes() and xdp_store_bytes() helper functions \fP .fi .RE .PP این گزینه می‌تواند برای ارزیابی کارایی حالت‌های مختلف دسترسی به بسته که توسط هسته پشتیبانی می‌شوند، به کار رود\&. .PP مقدار پیش‌فرض برای این گزینه \fIdpa\fP است\&. .SS "-i, --interval " .PP تنظیم بازهٔ زمانی نظرسنجی برای جمع‌آوری تمام آمارها و نمایش آن‌ها در خروجی\&. واحد این بازه ثانیه است\&. .SS "-s, --stats" .PP فعال‌سازی آمار برای تغییر مسیرهای موفق\&. این گزینه برای ثبت تمام تغییر مسیرهای موفق، بار پردازشی ردگیری به ازای هر بسته به همراه دارد\&. .SS "-e, --extended" .PP اجرای xdp-bench در حالت خروجی «گسترده» (extended)\&. در صورت عدم تنظیم، xdp-bench در حالت «مختصر» (terse) آغاز به کار می‌کند\&. حالت خروجی را می‌توان با فشردن کلیدهای ترکیبی C-\\ در زمان اجرای برنامه تغییر داد\&. همچنین به بخش \fBتوضیحات قالب خروجی\fP در ادامه مراجعه کنید\&. .SS "-m, --mode" .PP حالت برنامهٔ XDP را انتخاب می‌کند (native یا skb)\&. توجه داشته باشید که حالت native XDP پیش‌فرض است، و بارگذاری برنامهٔ تغییر مسیر به صورت skb نه کارایی مناسبی دارد و نه توصیه می‌شود\&. با این حال، این گزینه در صورتی که درایور رابط از حالت بومی XDP پشتیبانی نکند، یا هنگام آزمایش سادهٔ ابزار مفید است\&. .SS "-v, --verbose" .PP فعال‌سازی گزارش‌دهی پرجزئیات\&. با دوبار تعیین این گزینه، گزارش‌دهی پرجزئیات از کتابخانه‌های زیرین \fIlibxdp\fP و \fIlibbpf\fP فعال می‌شود\&. .SS "--version" .PP نمایش نسخهٔ برنامه و خروج\&. .SS "-h, --help" .PP نمایش خلاصه‌ای از گزینه‌های موجود\&. .SH "دستور REDIRECT-CPU" .PP در این حالت، \fIxdp\-bench\fP تغییر مسیر بسته را با استفاده از تابع کمکی BPF به نام \fIbpf_redirect_map\fP که هنگام دریافت بسته روی رابط ورودی فعال می‌شود و یک cpumap را به عنوان مقصد به کار می‌گیرد، تنظیم می‌کند\&. بدین ترتیب، این ابزار می‌تواند برای تغییر مسیر بسته‌ها روی یک رابط از یک پردازنده (CPU) به پردازنده‌ای دیگر استفاده شود\&. علاوه بر این، این ابزار از تغییر مسیر بسته به یک دستگاه خروجی دیگر، پس از پردازش روی پردازندهٔ مقصد نیز پشتیبانی می‌کند\&. .PP نحو اجرای دستور \fIredirect\-cpu\fP به صورت زیر است: .PP \fIxdp\-bench redirect\-cpu [options] \-c 0 ... \-c N\fP .PP که در آن \fI\fP نام رابط ورودی است که بسته‌ها از آن به فهرست پردازنده‌های مقصد مشخص‌شده با \fI\-c\fP تغییر مسیر داده می‌شوند\&. .PP گزینه‌های پشتیبانی‌شده عبارتند از: .SS "-c, --cpu " .PP مشخص کردن شاخص یک پردازندهٔ مقصد احتمالی\&. این گزینه باید حداقل یک بار مشخص شود، و می‌توان آن را چندین بار برای تعیین فهرستی از پردازنده‌ها به کار برد\&. اینکه کدام پردازنده برای یک بستهٔ معین انتخاب می‌شود به مقدار گزینهٔ \fI\-\-program\-mode\fP که در ادامه شرح داده شده بستگی دارد\&. .SS "-p, --program-mode " .PP مشخص کردن برنامه‌ای که یک سیاست از پیش تعریف‌شده برای تصمیم‌گیری دربارهٔ چگونگی تغییر مسیر بسته‌ها به پردازنده‌های مختلف را در خود جای داده است\&. گزینه‌های زیر در دسترس هستند: .RS .nf \fCno-touch - Redirect without touching packet data touch - Read packet data before redirecting round-robin - Cycle between target CPUs in a round-robin fashion (for each packet) l4-proto - Choose the target CPU based on the layer-4 protocol of packet l4-filter - Like l4-proto, but drop UDP packets with destination port 9 (used by pktgen) l4-hash - Use source and destination IP hashing to pick target CPU l4-sport - Use modulo of source port to pick target CPU l4-dport - Use modulo of destination port to pick target CPU \fP .fi .RE .PP حالت‌های \fIno\-touch\fP و \fItouch\fP همیشه بسته‌ها را به همان یک پردازنده (نخستین مقدار داده‌شده به \fI\-\-cpu\fP) تغییر مسیر می‌دهند\&. حالت‌های \fIround\-robin\fP و \fIl4\-hash\fP بسته‌ها را میان تمام پردازنده‌های ارائه‌شده در آرگومان‌های \fI\-\-cpu\fP توزیع می‌کنند، در حالی که \fIl4\-proto\fP و \fIl4\-filter\fP بسته‌های TCP و بسته‌های ناشناخته را به پردازنده با شاخص 0، بسته‌های UDP را به پردازنده با شاخص 1 و بسته‌های ICMP را به پردازنده با شاخص 2 می‌فرستند (که در آن شاخص به ترتیب ارائهٔ پردازنده‌های واقعی در خط فرمان اشاره دارد)\&. .PP مقدار پیش‌فرض برای این گزینه \fIl4\-hash\fP است\&. .SS "-r --remote-action " .PP در صورت تنظیم این گزینه، یک برنامهٔ مجزا در cpumap نصب می‌شود که پس از پردازش بسته در پردازندهٔ راه دور، بر روی آن فراخوانی خواهد شد\&. این اقدام می‌تواند \fIdrop\fP یا \fIpass\fP باشد که به ترتیب بسته را دور می‌اندازد یا آن را به پشتهٔ معمول شبکه تحویل می‌دهد\&. یا می‌تواند \fIredirect\fP باشد که باعث می‌شود بسته به یک رابط دیگر تغییر مسیر داده شده و روی آن رابط در پردازندهٔ راه دور ارسال شود\&. در صورت تنظیم این گزینه روی \fIredirect\fP، دستگاه مقصد باید با استفاده از \fI\-\-redirect\-device\fP مشخص شود\&. .PP مقدار پیش‌فرض برای این گزینه \fIdisabled\fP (غیرفعال) است\&. .SS "-r, --redirect-device " .PP مشخص کردن دستگاهی که بسته پس از دریافت در پردازندهٔ مقصد باید به آن تغییر مسیر یابد\&. توجه داشته باشید که این گزینه تنها همراه با \fI\-\-remote\-action redirect\fP قابل استفاده است\&. .SS "-q, --qsize " .PP تنظیم اندازهٔ صف برای بافر حلقوی cpumap به ازای هر پردازنده که برای تغییر مسیر بسته‌ها از چندین پردازنده به یک پردازنده به کار می‌رود\&. مقدار پیش‌فرض 2048 بسته است\&. .SS "-x, --stress-mode" .PP آزمون فشار (stress) بر پیاده‌سازی cpumap با آزادسازی و تخصیص مجدد بافر حلقوی cpumap در هر بازهٔ نظرسنجی\&. .SS "-i, --interval " .PP تنظیم بازهٔ زمانی نظرسنجی برای جمع‌آوری تمام آمارها و نمایش آن‌ها در خروجی\&. واحد این بازه ثانیه است\&. .SS "-s, --stats" .PP فعال‌سازی آمار برای تغییر مسیرهای موفق\&. این گزینه برای ثبت تمام تغییر مسیرهای موفق، بار پردازشی ردگیری به ازای هر بسته به همراه دارد\&. .SS "-e, --extended" .PP اجرای xdp-bench در حالت خروجی «گسترده» (extended)\&. در صورت عدم تنظیم، xdp-bench در حالت «مختصر» (terse) آغاز به کار می‌کند\&. حالت خروجی را می‌توان با فشردن کلیدهای ترکیبی C-\\ در زمان اجرای برنامه تغییر داد\&. همچنین به بخش \fBتوضیحات قالب خروجی\fP در ادامه مراجعه کنید\&. .SS "-m, --mode" .PP حالت برنامهٔ XDP را انتخاب می‌کند (native یا skb)\&. توجه داشته باشید که حالت native XDP پیش‌فرض است، و بارگذاری برنامهٔ تغییر مسیر به صورت skb نه کارایی مناسبی دارد و نه توصیه می‌شود\&. با این حال، این گزینه در صورتی که درایور رابط از حالت بومی XDP پشتیبانی نکند، یا هنگام آزمایش سادهٔ ابزار مفید است\&. .SS "-v, --verbose" .PP فعال‌سازی گزارش‌دهی پرجزئیات\&. با دوبار تعیین این گزینه، گزارش‌دهی پرجزئیات از کتابخانه‌های زیرین \fIlibxdp\fP و \fIlibbpf\fP فعال می‌شود\&. .SS "--version" .PP نمایش نسخهٔ برنامه و خروج\&. .SS "-h, --help" .PP نمایش خلاصه‌ای از گزینه‌های موجود\&. .SH "دستور REDIRECT-MAP" .PP در این حالت، \fIxdp\-bench\fP تغییر مسیر بسته را بین دو رابط ارائه شده در خط فرمان، با استفاده از تابع کمکی BPF به نام \fIbpf_redirect_map()\fP که هنگام دریافت بسته روی رابط ورودی فعال می‌شود و یک devmap را به عنوان مقصد به کار می‌گیرد، تنظیم می‌کند\&. .PP نحو اجرای دستور \fIredirect\-map\fP به صورت زیر است: .PP \fIxdp\-bench redirect\-map [options] \fP .PP که در آن \fI\fP نام رابط ورودی است که بسته‌ها از آن به سمت رابط خروجی \fI\fP تغییر مسیر داده می‌شوند\&. .PP گزینه‌های پشتیبانی‌شده عبارتند از: .SS "-X, --load-egress" .PP بارگذاری یک برنامه در مدخل devmap مورد استفاده برای تغییر مسیر، به گونه‌ای که پس از تغییر مسیر بسته به دستگاه مقصد و پیش از ارسال آن از رابط خروجی فراخوانی شود\&. این برنامه را می‌توان از طریق گزینهٔ \fIegress\-mode\fP انتخاب کرد\&. .SS "-A, --egress-mode " .PP تنظیم برنامهٔ خروجی (egress) برای بارگذاری: .RS .nf \fCforward - Update the packet data so its source MAC address matches the one of the destination interface. drop - Drop packet. \fP .fi .RE .PP مقدار پیش‌فرض برای این گزینه \fIforward\fP است\&. .SS "-i, --interval " .PP تنظیم بازهٔ زمانی نظرسنجی برای جمع‌آوری تمام آمارها و نمایش آن‌ها در خروجی\&. واحد این بازه ثانیه است\&. .SS "-s, --stats" .PP فعال‌سازی آمار برای تغییر مسیرهای موفق\&. این گزینه برای ثبت تمام تغییر مسیرهای موفق، بار پردازشی ردگیری به ازای هر بسته به همراه دارد\&. .SS "-e, --extended" .PP اجرای xdp-bench در حالت خروجی «گسترده» (extended)\&. در صورت عدم تنظیم، xdp-bench در حالت «مختصر» (terse) آغاز به کار می‌کند\&. حالت خروجی را می‌توان با فشردن کلیدهای ترکیبی C-\\ در زمان اجرای برنامه تغییر داد\&. همچنین به بخش \fBتوضیحات قالب خروجی\fP در ادامه مراجعه کنید\&. .SS "-m, --mode" .PP حالت برنامهٔ XDP را انتخاب می‌کند (native یا skb)\&. توجه داشته باشید که حالت native XDP پیش‌فرض است، و بارگذاری برنامهٔ تغییر مسیر به صورت skb نه کارایی مناسبی دارد و نه توصیه می‌شود\&. با این حال، این گزینه در صورتی که درایور رابط از حالت بومی XDP پشتیبانی نکند، یا هنگام آزمایش سادهٔ ابزار مفید است\&. .SS "-v, --verbose" .PP فعال‌سازی گزارش‌دهی پرجزئیات\&. با دوبار تعیین این گزینه، گزارش‌دهی پرجزئیات از کتابخانه‌های زیرین \fIlibxdp\fP و \fIlibbpf\fP فعال می‌شود\&. .SS "--version" .PP نمایش نسخهٔ برنامه و خروج\&. .SS "-h, --help" .PP نمایش خلاصه‌ای از گزینه‌های موجود\&. .SH "دستور REDIRECT-MULTI" .PP در این حالت، \fIxdp\-bench\fP تغییر مسیر یک‌به‌چند بسته را میان رابط‌های ارائه‌شده در خط فرمان، با استفاده از تابع کمکی BPF به نام \fIbpf_redirect_map\fP که هنگام دریافت بسته روی رابط ورودی فعال می‌شود و یک devmap را به عنوان مقصد به کار می‌گیرد، تنظیم می‌کند\&. بسته با استفاده از قابلیت پخش بسته در devmap، به تمامی رابط‌های خروجی مشخص‌شده در خط فرمان پخش همگانی (broadcast) می‌شود\&. .PP نحو اجرای دستور \fIredirect\-multi\fP به صورت زیر است: .PP \fIxdp\-bench redirect\-multi [options] ... \fP .PP که در آن \fI\fP نام رابط ورودی است که بسته‌ها از آن به یک یا چند رابط خروجی تغییر مسیر داده می‌شوند\&. .PP گزینه‌های پشتیبانی‌شده عبارتند از: .SS "-X, --load-egress" .PP بارگذاری یک برنامه در مدخل devmap مورد استفاده برای تغییر مسیر، به گونه‌ای که پس از تغییر مسیر بسته به دستگاه مقصد و پیش از ارسال آن از رابط خروجی فراخوانی شود\&. این برنامه را می‌توان از طریق گزینهٔ \fIegress\-mode\fP انتخاب کرد\&. .SS "-A, --egress-mode " .PP تنظیم برنامهٔ خروجی برای بارگذاری: .RS .nf \fCforward - Update the packet data so its source MAC address matches the one of the destination interface. drop - Drop packet. \fP .fi .RE .PP مقدار پیش‌فرض برای این گزینه \fIforward\fP است\&. .SS "-i, --interval " .PP تنظیم بازهٔ زمانی نظرسنجی برای جمع‌آوری تمام آمارها و نمایش آن‌ها در خروجی\&. واحد این بازه ثانیه است\&. .SS "-s, --stats" .PP فعال‌سازی آمار برای تغییر مسیرهای موفق\&. این گزینه برای ثبت تمام تغییر مسیرهای موفق، بار پردازشی ردگیری به ازای هر بسته به همراه دارد\&. .SS "-e, --extended" .PP اجرای xdp-bench در حالت خروجی «گسترده» (extended)\&. در صورت عدم تنظیم، xdp-bench در حالت «مختصر» (terse) آغاز به کار می‌کند\&. حالت خروجی را می‌توان با فشردن کلیدهای ترکیبی C-\\ در زمان اجرای برنامه تغییر داد\&. همچنین به بخش \fBتوضیحات قالب خروجی\fP در ادامه مراجعه کنید\&. .SS "-m, --mode" .PP حالت برنامهٔ XDP را انتخاب می‌کند (native یا skb)\&. توجه داشته باشید که حالت native XDP پیش‌فرض است، و بارگذاری برنامهٔ تغییر مسیر به صورت skb نه کارایی مناسبی دارد و نه توصیه می‌شود\&. با این حال، این گزینه در صورتی که درایور رابط از حالت بومی XDP پشتیبانی نکند، یا هنگام آزمایش سادهٔ ابزار مفید است\&. .SS "-v, --verbose" .PP فعال‌سازی گزارش‌دهی پرجزئیات\&. با دوبار تعیین این گزینه، گزارش‌دهی پرجزئیات از کتابخانه‌های زیرین \fIlibxdp\fP و \fIlibbpf\fP فعال می‌شود\&. .SS "--version" .PP نمایش نسخهٔ برنامه و خروج\&. .SS "-h, --help" .PP نمایش خلاصه‌ای از گزینه‌های موجود\&. .SH "دستورات XSK-DROP و XSK-TX" .PP در این حالت‌ها، xdp-bench بسته‌های ورودی را دور می‌اندازد یا بازتاب می‌دهد (مشابه استفاده از دستورات \fIdrop\fP یا \fItx\fP)، اما با استفاده از یک سوکت \fIAF_XDP\fP که بسته‌ها را مستقیماً از قلاب XDP به فضای کاربر (userspace) انتقال می‌دهد\&. این حالت‌ها می‌توانند برای آزمایش و ارزیابی سوکت‌های \fIAF_XDP\fP به کار روند\&. این دو دستور صرفاً در اقدامی که انجام می‌دهند تفاوت دارند - نحو اجرا و گزینه‌ها در هر دو کاملاً یکسان هستند\&. .PP کد این دستورات از ابزار \fIxdpsock\fP که پیش‌تر بخشی از سورس‌های هسته و اخیراً مخزن bpf-examples بوده، برگرفته شده است\&. دستور \fIxsk\-drop\fP معادل گزینهٔ \fI\-\-rxdrop\fP در \fIxdpsock\fP است، و دستور \fIxsk\-tx\fP با دستور \fI\-\-l2fwd\fP در \fIxdpsock\fP مطابقت دارد\&. .PP نحو و گزینه‌های این دو دستور یکسان است: .PP \fIxdp\-bench xsk\-drop [options] \fP .PP یا .PP \fIxdp\-bench xsk\-tx [options] \fP .PP گزینه‌های پشتیبانی‌شده عبارتند از: .SS "-q, --queue " .PP انتخاب صف سخت‌افزاری دریافت برای استفاده در آزمایش\&. سوکت \fIAF_XDP\fP به این صف مقید (bind) می‌شود، که بدین معناست \fIxdp\-bench\fP تمام بسته‌های ورودی به آن را پردازش خواهد کرد\&. پیش‌فرض استفاده از صف 0 است\&. .SS "-i, --interval " .PP تنظیم بازهٔ زمانی نظرسنجی برای جمع‌آوری تمام آمارها و نمایش آن‌ها در خروجی\&. بازهٔ پیش‌فرض 2 ثانیه است\&. .SS "-f, --frame-size " .PP تنظیم اندازه فریم‌های حافظه مورد استفاده برای دریافت بسته‌ها\&. بسته‌های ورودی صرف‌نظر از اندازهٔ واقعی بسته روی بستر شبکه، همواره از یک تکه حافظه به این اندازه استفاده خواهند کرد\&. اندازه باید توانی از دو باشد، مگر آنکه پرچم \fI\-\-unaligned\fP استفاده شود\&. مقدار پیش‌فرض 4096 بایت است (که با اندازه صفحه در اکثر سیستم‌ها مطابقت دارد)\&. .SS "-d, --duration " .PP تنظیم مدت‌زمان آزمایش بر حسب ثانیه\&. پیش‌فرض 0 است (اجرای بی‌پایان)\&. .SS "-b, --batch-size " .PP تنظیم اندازه بستهٔ دسته‌ای (batch size) برای حلقهٔ دریافت\&. این حداکثر تعداد بسته‌هایی است که در هر بار اجرای حلقه به صورت یکجا پردازش می‌شوند\&. پیش‌فرض 64 بسته است\&. .SS "-I, --irq-string " .PP فعال‌سازی چاپ آمارهای وقفه برای شماره وقفه مرتبط با \fIirq\-string\fP در مسیر /proc/interrupts\&. این رشته برای یافتن شماره IRQ منطبق از طریق تطبیق سادهٔ زیررشته استفاده می‌شود\&. پیش‌فرضی ندارد (به این معنی که هیچ آمار IRQ چاپ نمی‌شود)\&. .SS "-p, --poll" .PP استفاده از فراخوان سیستمی \fIpoll()\fP برای دریافت اعلان بسته‌های جدید، به جای اجرای یک حلقهٔ مداوم و بررسی پیوسته برای بسته‌های جدید\&. .SS "-m, --no-need-wakeup" .PP عدم تنظیم پرچم \fIXDP_USE_NEED_WAKEUP\fP هنگام مقید کردن سوکت \fIAF_XDP\fP\&. این پرچم به صورت پیش‌فرض تنظیم است و باعث می‌شود درایور هسته گاهی اوقات به خواب برود و هنگام دریافت بسته‌ها، پردازنده را به برنامهٔ فضای کاربر واگذار کند\&. .SS "-u, --unaligned" .PP پشتیبانی از دریافت بسته‌های ناهم‌تراز (unaligned)، یعنی بسته‌هایی که با ابتدای یک فریم داده تراز نیستند\&. در صورت تنظیم، \fIxdp\-bench\fP صفحات بزرگ (huge pages) را برای بافر حافظه فضای کاربر جهت دریافت بسته‌ها فعال می‌کند\&. تنظیم این گزینه اندازه‌های فریمی را که توانی از دو نیستند ممکن می‌سازد (گزینهٔ \fI\-\-frame\-size\fP را ببینید)\&. .SS "-M, --shared-umem" .PP فعال‌سازی حافظهٔ اشتراکی فضای کاربر میان چندین سوکت \fIAF_XDP\fP\&. هنگامی که این گزینه تنظیم شود، \fIxdp\-bench\fP چهار سوکت ایجاد می‌کند که از یک بافر حافظه فضای کاربر مشترک استفاده می‌کنند، و بسته‌ها به صورت نوبتی (round-robin) به هر سوکت ارسال می‌شوند\&. .SS "-x, --extra-stats" .PP چاپ آمارهای اضافی بسته در هر بازهٔ خروجی\&. .SS "-Q, --quiet" .PP عدم چاپ هرگونه آمار در بازه‌های خروجی\&. .SS "-a, --app-stats" .PP چاپ آمارهای تکمیلی سطح برنامه در هر بازهٔ خروجی\&. .SS "-B, --busy-poll" .PP تنظیم گزینهٔ سوکت \fISO_PREFER_BUSY_POLL\fP، که به برنامه اجازه می‌دهد بدون نیاز به فعال بودن وقفه‌ها (IRQs) روی صف سخت‌افزاری در حال پردازش، نظرسنجی فشرده (busy-poll) انجام دهد\&. برای استفاده از این گزینه، متغیرهای sysctl مربوط به \fInapi_defer_hard_irqs\fP و \fIgro_flush_timeout\fP باید برای رابط مورد نظر تنظیم شوند\&. برای اطلاعات بیشتر، به \fIhttps://docs.kernel.org/networking/napi.html#software-irq-coalescing\fP مراجعه کنید\&. .SS "-F, --frags" .PP فعال‌سازی تکه‌تکه‌سازی XDP (fragments)\&. این گزینه دریافت بسته‌هایی بزرگ‌تر از اندازه صفحه سیستم را امکان‌پذیر می‌سازد و نیازمند پشتیبانی هسته و درایور است\&. .SS "-C, --copy-mode " .PP انتخاب حالت کپی برای بسته‌ها\&. می‌تواند یکی از مقادیر \fIauto\fP، \fIcopy\fP، یا \fIzero\-copy\fP باشد\&. مقدار پیش‌فرض \fIauto\fP است که به هسته اجازه می‌دهد انتخاب کند\&. استفاده از zero-copy نیازمند پشتیبانی هسته و درایور است، و تنها هنگام اتصال برنامه XDP در حالت native قابل استفاده است (\fI\-\-attach\-mode\fP را ببینید)\&. .SS "-w, --clock " .PP انتخاب ساعتی که برای تمامی رویدادهای زمان‌سنج در برنامه استفاده خواهد شد\&. مقادیر معتبر عبارتند از MONOTONIC، REALTIME، TAI و BOOTTIME، و مقدار پیش‌فرض MONOTONIC است\&. .SS "-W, --policy " .PP تنظیم سیاست زمان‌بندی (scheduler policy) برای برنامه پیش از اجرا\&. مقادیر معتبر \fISCHED_OTHER\fP و \fISCHED_FIFO\fP هستند و پیش‌فرض \fISCHED_OTHER\fP است\&. .SS "-U, --schpri " .PP تنظیم اولویت زمان‌بندی هنگام استفاده از \fISCHED_FIFO\fP\&. مقدار پیش‌فرض 0 است\&. .SS "-A, --attach-mode " .PP تنظیم حالت پیوست برنامه XDP (native یا skb)\&. پیش‌فرض حالت native است\&. توجه داشته باشید که zero-copy تنها در حالت native قابل استفاده است\&. .SS "-v, --verbose" .PP فعال‌سازی گزارش‌دهی پرجزئیات\&. با دوبار مشخص کردن، گزارش‌دهی پرجزئیات از کتابخانه‌های زیرین \fIlibxdp\fP و \fIlibbpf\fP فعال می‌شود\&. .SS "--version" .PP نمایش نسخه برنامه و خروج\&. .SS "-h, --help" .PP نمایش خلاصه‌ای از گزینه‌های موجود\&. .SH "توضیحات قالب خروجی (OUTPUT FORMAT DESCRIPTION)" .PP به‌طور پیش‌فرض، آمارهای مربوط به موفقیت در تغییر مسیر غیرفعال هستند؛ برای فعال‌سازی از \fI\-\-stats\fP استفاده کنید\&. حالت خروجی مختصر (terse) پیش‌فرض است، و حالت خروجی گسترده (extended) را می‌توان با گزینهٔ خط فرمان \fI\-\-extended\fP فعال کرد\&. .PP می‌توان از سیگنال SIGQUIT (کلیدهای Ctrl + \\) برای تغییر پویای حالت خروجی در زمان اجرا استفاده کرد\&. .PP حالت مختصر حداکثر فیلدهای زیر را نمایش می‌دهد: .RS .nf \fCrx/s تعداد بسته‌های دریافتی در هر ثانیه redir/s تعداد بسته‌های با تغییر مسیر موفق در هر ثانیه err,drop/s مجموع خطاهای رخ‌داده در هر ثانیه (شامل بسته‌های دور ریخته‌شده در هنگام عدم استفاده از دستور drop) xmit/s تعداد بسته‌های ارسال‌شده روی دستگاه خروجی در هر ثانیه \fP .fi .RE .PP حالت خروجی پرجزئیات حداکثر فیلدهای زیر را نمایش می‌دهد: .RS .nf \fCFIELD DESCRIPTION receive نمایش تعداد بسته‌های دریافتی و خطاهای رخ‌داده هرگاه خطا یا دور ریختن بسته رخ دهد، جزئیات آمار خطا و بسته‌های دور ریخته‌شده به ازای هر پردازنده خطی نمایش می‌یابد. pkt/s - بسته‌های دریافتی در هر ثانیه drop/s - بسته‌های دور ریخته‌شده در هر ثانیه error/s - خطاهای رخ‌داده در هر ثانیه redirect - نمایش تعداد بسته‌های با تغییر مسیر موفق خطاهای رخ‌داده ذیل فیلد redirect_err بسط داده می‌شوند توجه کنید ارسال گزینه s- برای فعال‌سازی دارای بار به ازای هر بسته است redir/s - بسته‌های موفق در تغییر مسیر در هر ثانیه redirect_err نمایش تعداد بسته‌هایی که تغییر مسیر آن‌ها ناموفق بوده است کد خطا (errno) به تفکیک هر پردازنده ذیل این فیلد نمایش می‌یابد خطاهای شناخته‌شده عبارتند از: EINVAL: تغییر مسیر نامعتبر ENETDOWN: دستگاه مقصد تغییر مسیر خاموش یا غیرفعال است EMSGSIZE: طول بسته برای دستگاه مقصد بسیار بزرگ است EOPNOTSUPP: عملیات پشتیبانی نمی‌شود ENOSPC: عدم وجود فضا در ptr_ring نخ هسته cpumap error/s - بسته‌های ناموفق در تغییر مسیر در هر ثانیه enqueue to cpu N نمایش تعداد بسته‌های صف‌بندی‌شده در صف تجمیعی پردازنده N برای نمایش آمار صف‌بندی به ازای هر پردازنده به cpu:FROM->N بسط می‌یابد بسته‌های دریافتی می‌توانند به پردازنده‌ای که برنامه تغییر مسیر بسته‌ها را به آن ارسال می‌کند مرتبط شوند. pkt/s - بسته‌های صف‌بندی‌شده در ثانیه از سایر پردازنده‌ها به پردازنده N drop/s - بسته‌های دور ریخته‌شده هنگام صف‌بندی به پردازنده N bulk-avg - میانگین تعداد بسته‌های پردازش‌شده برای هر رویداد kthread نمایش تعداد بسته‌های پردازش‌شده در نخ هسته CPUMAP به ازای هر پردازنده بسته‌های مصرف‌شده از ptr_ring در نخ هسته، و xdp_stats آن (پس از فراخوانی برنامه bpf مربوط به CPUMAP) ذیل این بخش بسط می‌یابند. pkt/s - بسته‌های مصرف‌شده در ثانیه از ptr_ring drop/s - بسته‌های دور ریخته‌شده در ثانیه در نخ هسته sched - تعداد دفعاتی که نخ هسته ()schedule را فراخوانی کرده آمار xdp_stats (به تفکیک هر پردازنده نیز بسط می‌یابد) pass/s - شمارش XDP_PASS در اجرای برنامه CPUMAP drop/s - شمارش XDP_DROP در اجرای برنامه CPUMAP redir/s - شمارش XDP_REDIRECT در اجرای برنامه CPUMAP xdp_exception نمایش رویدادهای نقطه ردگیری xdp_exception این مورد می‌تواند به دلیل خطاهای داخلی درایور، اکشن‌های ناشناخته XDP یا تحریک صریح توسط کاربر با استفاده از XDP_ABORTED رخ دهد هر اکشن به همراه شمارش آن ذیل این فیلد نمایش داده می‌شود hit/s - تعداد دفعاتی که نقطه ردگیری در ثانیه فعال شده devmap_xmit نمایش رویدادهای نقطه ردگیری devmap_xmit این نقطه ردگیری برای ارسال‌های موفق روی دستگاه خروجی فراخوانی می‌شود اما این آمارها در حالت XDP عمومی در دسترس نیستند، بنابراین در حالت SKB از خروجی حذف خواهند شد xmit/s - تعداد بسته‌های ارسال‌شده در هر ثانیه drop/s - تعداد بسته‌های ناموفق در ارسال در هر ثانیه drv_err/s - تعداد خطاهای داخلی درایور در هر ثانیه bulk-avg - میانگین تعداد بسته‌های پردازش‌شده برای هر رویداد \fP .fi .RE .SH "اشکالات (BUGS)" .PP لطفاً هرگونه باگ را در گیت‌هاب گزارش دهید: \fIhttps://github.com/xdp-project/xdp-tools/issues\fP .SH "نویسنده (AUTHOR)" .PP ابزارهای اولیه xdp-redirect توسط Jesper Dangaard Brouer و John Fastabend نوشته شدند\&. سپس برای پشتیبانی از ویژگی‌های بیشتر توسط Kumar Kartikeya Dwivedi بازنویسی شدند، که او همچنین به همراه Toke Høiland-Jørgensen آن‌ها را به xdp-tools پورت کرد\&. این صفحه راهنما توسط Kumar Kartikeya Dwivedi و Toke Høiland-Jørgensen نوشته شده است\&.