.\" Man page generated from reStructuredText .\" by the Docutils 0.23 manpage writer. . . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .TH "bpftool-prog" "8" "" "" .SH "نام (NAME)" bpftool-prog \- ابزاری برای بازرسی و مدیریت برنامه‌های BPF .SH "خلاصه دستور (SYNOPSIS)" .sp \fBbpftool\fP [\fIOPTIONS\fP] \fBprog\fP \fICOMMAND\fP .sp \fIOPTIONS\fP := { { \fB\-j\fP | \fB\-\-json\fP } [{ \fB\-p\fP | \fB\-\-pretty\fP }] | { \fB\-d\fP | \fB\-\-debug\fP } | { \fB\-f\fP | \fB\-\-bpffs\fP } | { \fB\-m\fP | \fB\-\-mapcompat\fP } | { \fB\-n\fP | \fB\-\-nomount\fP } | { \fB\-L\fP | \fB\-\-use\-loader\fP } | [ { \fB\-S\fP | \fB\-\-sign\fP } \fB\-k\fP \fB\-i\fP ] } .sp \fICOMMANDS\fP := { \fBshow\fP | \fBlist\fP | \fBdump xlated\fP | \fBdump jited\fP | \fBpin\fP | \fBload\fP | \fBloadall\fP | \fBhelp\fP } .SH "دستورات PROG (PROG COMMANDS)" .nf \fBbpftool\fP \fBprog\fP { \fBshow\fP | \fBlist\fP } [\fIPROG\fP] \fBbpftool\fP \fBprog dump xlated\fP \fIPROG\fP [{ \fBfile\fP \fIFILE\fP | [\fBopcodes\fP] [\fBlinum\fP] [\fBvisual\fP] }] \fBbpftool\fP \fBprog dump jited\fP \fIPROG\fP [{ \fBfile\fP \fIFILE\fP | [\fBopcodes\fP] [\fBlinum\fP] }] \fBbpftool\fP \fBprog pin\fP \fIPROG\fP \fIFILE\fP \fBbpftool\fP \fBprog\fP { \fBload\fP | \fBloadall\fP } \fIOBJ\fP \fIPATH\fP [\fBtype\fP \fITYPE\fP] [\fBmap\fP { \fBidx\fP \fIIDX\fP | \fBname\fP \fINAME\fP } \fIMAP\fP] [{ \fBoffload_dev\fP | \fBxdpmeta_dev\fP } \fINAME\fP] [\fBpinmaps\fP \fIMAP_DIR\fP] [\fBautoattach\fP] [\fBkernel_btf\fP \fIBTF_FILE\fP] \fBbpftool\fP \fBprog attach\fP \fIPROG\fP \fIATTACH_TYPE\fP [\fIMAP\fP] \fBbpftool\fP \fBprog detach\fP \fIPROG\fP \fIATTACH_TYPE\fP [\fIMAP\fP] \fBbpftool\fP \fBprog tracelog\fP \fBbpftool\fP \fBprog tracelog\fP [ { \fBstdout\fP | \fBstderr\fP } \fIPROG\fP ] \fBbpftool\fP \fBprog run\fP \fIPROG\fP \fBdata_in\fP \fIFILE\fP [\fBdata_out\fP \fIFILE\fP [\fBdata_size_out\fP \fIL\fP]] [\fBctx_in\fP \fIFILE\fP [\fBctx_out\fP \fIFILE\fP [\fBctx_size_out\fP \fIM\fP]]] [\fBrepeat\fP \fIN\fP] \fBbpftool\fP \fBprog profile\fP \fIPROG\fP [\fBduration\fP \fIDURATION\fP] \fIMETRICs\fP \fBbpftool\fP \fBprog help\fP \fIMAP\fP := { \fBid\fP \fIMAP_ID\fP | \fBpinned\fP \fIFILE\fP | \fBname\fP \fIMAP_NAME\fP } \fIPROG\fP := { \fBid\fP \fIPROG_ID\fP | \fBpinned\fP \fIFILE\fP | \fBtag\fP \fIPROG_TAG\fP | \fBname\fP \fIPROG_NAME\fP } \fITYPE\fP := { .in +2 \fBsocket\fP | \fBkprobe\fP | \fBkretprobe\fP | \fBclassifier\fP | \fBaction\fP | \fBtracepoint\fP | \fBraw_tracepoint\fP | \fBxdp\fP | \fBperf_event\fP | \fBcgroup/skb\fP | \fBcgroup/sock\fP | \fBcgroup/dev\fP | \fBlwt_in\fP | \fBlwt_out\fP | \fBlwt_xmit\fP | \fBlwt_seg6local\fP | \fBsockops\fP | \fBsk_skb\fP | \fBsk_msg\fP | \fBlirc_mode2\fP | \fBcgroup/bind4\fP | \fBcgroup/bind6\fP | \fBcgroup/post_bind4\fP | \fBcgroup/post_bind6\fP | \fBcgroup/connect4\fP | \fBcgroup/connect6\fP | \fBcgroup/connect_unix\fP | \fBcgroup/getpeername4\fP | \fBcgroup/getpeername6\fP | \fBcgroup/getpeername_unix\fP | \fBcgroup/getsockname4\fP | \fBcgroup/getsockname6\fP | \fBcgroup/getsockname_unix\fP | \fBcgroup/sendmsg4\fP | \fBcgroup/sendmsg6\fP | \fBcgroup/sendmsg_unix\fP | \fBcgroup/recvmsg4\fP | \fBcgroup/recvmsg6\fP | \fBcgroup/recvmsg_unix\fP | \fBcgroup/sysctl\fP | \fBcgroup/getsockopt\fP | \fBcgroup/setsockopt\fP | \fBcgroup/sock_release\fP | \fBstruct_ops\fP | \fBfentry\fP | \fBfexit\fP | \fBfsession\fP | \fBfreplace\fP | \fBsk_lookup\fP .in -2 } \fIATTACH_TYPE\fP := { .in +2 \fBsk_msg_verdict\fP | \fBsk_skb_verdict\fP | \fBsk_skb_stream_verdict\fP | \fBsk_skb_stream_parser\fP | \fBflow_dissector\fP .in -2 } \fIMETRICs\fP := { .in +2 \fBcycles\fP | \fBinstructions\fP | \fBl1d_loads\fP | \fBllc_misses\fP | \fBitlb_misses\fP | \fBdtlb_misses\fP .in -2 } .fi .sp .SH "توضیحات (DESCRIPTION)" .INDENT 0.0 .TP .B bpftool prog { show | list } [\fIPROG\fP] نمایش اطلاعات درباره برنامه‌های بارگذاری‌شده. اگر \fIPROG\fP مشخص شده باشد، اطلاعات فقط برای برنامه‌های داده‌شده نمایش داده می‌شود، در غیر این صورت تمام برنامه‌های بارگذاری‌شده فعلی در سیستم فهرست می‌شوند. در صورت استفاده از \fBtag\fP یا \fBname\fP، ممکن است \fIPROG\fP با چندین برنامه مطابقت داشته باشد که همگی نمایش داده خواهند شد. .sp خروجی با شناسه برنامه (ID) آغاز شده و به دنبال آن نوع برنامه و صفر یا چند ویژگی نام‌دار (بسته به نسخه هسته) درج می‌شود. .sp از لینوکس ۵.۱ به بعد، هسته می‌تواند آمار مربوط به برنامه‌های BPF را جمع‌آوری کند (مانند کل زمان صرف‌شده برای اجرای برنامه و تعداد دفعات اجرای آن). در صورت وجود، bpftool این آمار را نشان می‌دهد. با این حال، هسته به طور پیش‌فرض آن‌ها را جمع‌آوری نمی‌کند، زیرا تأثیر کمی بر کارایی هر بار اجرای برنامه می‌گذارد. فعال‌سازی یا غیرفعال‌سازی این ویژگی از طریق تنظیم sysctl با نام \fBkernel.bpf_stats_enabled\fP انجام می‌شود. .sp از لینوکس ۵.۸ به بعد، bpftool قادر است اطلاعات مربوط به فرآیندهایی را که توصیف‌کننده‌های فایل (FD) باز به برنامه‌های BPF دارند کشف کند. در چنین هسته‌هایی، bpftool به طور خودکار این اطلاعات را نیز منتشر می‌کند. .TP .B bpftool prog dump xlated \fIPROG\fP [{ file \fIFILE\fP | [opcodes] [linum] [visual] }] دامپ (استخراج) دستورالعمل‌های eBPF برنامه‌ها از هسته. به طور پیش‌فرض، eBPF دیس‌اسمبل شده و در قالبی خوانا برای انسان در خروجی استاندارد چاپ می‌شود. در این حالت، \fBopcodes\fP کنترل می‌کند که آیا آپ‌کدهای خام (raw opcodes) نیز چاپ شوند یا خیر. .sp در صورت استفاده از \fBtag\fP یا \fBname\fP، ممکن است \fIPROG\fP با چندین برنامه مطابقت داشته باشد که همگی دامپ خواهند شد. با این حال، اگر \fBfile\fP یا \fBvisual\fP مشخص شده باشد، \fIPROG\fP باید تنها با یک برنامه مطابقت داشته باشد. .sp اگر \fBfile\fP مشخص شده باشد، تصویر دودویی (binary image) به جای آن در \fIFILE\fP نوشته خواهد شد. .sp اگر \fBvisual\fP مشخص شده باشد، به جای آن گراف جریان کنترل (CFG) ساخته می‌شود و دستورالعمل‌های eBPF همراه با CFG در قالب DOT در خروجی استاندارد ارائه می‌شوند. .sp اگر برنامه‌ها دارای line_info باشند، خط منبع کد نمایش داده می‌شود. در صورت مشخص شدن \fBlinum\fP، نام فایل، شماره خط و ستون خط نیز نمایش داده خواهند شد. .TP .B bpftool prog dump jited \fIPROG\fP [{ file \fIFILE\fP | [opcodes] [linum] }] دامپ تصویر کامپایل‌شده به روش JIT (کد ماشین میزبان) برنامه. .sp اگر \fIFILE\fP مشخص شده باشد تصویر در یک فایل نوشته می‌شود، در غیر این صورت دیس‌اسمبل شده و در stdout چاپ خواهد شد. هنگامی که \fBfile\fP مشخص شده باشد، \fIPROG\fP باید تنها با یک برنامه مطابقت داشته باشد. .sp گزینه \fBopcodes\fP کنترل می‌کند که آیا آپ‌کدهای خام چاپ شوند یا خیر. .sp اگر برنامه دارای line_info باشد، خط منبع کد نمایش داده می‌شود. اگر \fBlinum\fP مشخص شده باشد، نام فایل، شماره خط و ستون خط نیز نمایش داده خواهند شد. .TP .B bpftool prog pin \fIPROG\fP \fIFILE\fP سنجاق کردن (pin) برنامه \fIPROG\fP با عنوان \fIFILE\fP\&. .sp نکته: \fIFILE\fP باید در یک نقطه سوارشده (mount) از \fIbpffs\fP قرار داشته باشد. این نام نباید شامل نویسه نقطه (\(aq.\(aq) باشد، زیرا برای پسوندهای آینده در \fIbpffs\fP رزرو شده است. .TP .B bpftool prog { load | loadall } \fIOBJ\fP \fIPATH\fP [type \fITYPE\fP] [map { idx \fIIDX\fP | name \fINAME\fP } \fIMAP\fP] [{ offload_dev | xdpmeta_dev } \fINAME\fP] [pinmaps \fIMAP_DIR\fP] [autoattach] [kernel_btf \fIBTF_FILE\fP] بارگذاری برنامه‌(های) bpf از فایل دودویی \fIOBJ\fP و سنجاق کردن آن به عنوان \fIPATH\fP\&. دستور \fBbpftool prog load\fP تنها اولین برنامه موجود در \fIOBJ\fP را با عنوان \fIPATH\fP سنجاق می‌کند. دستور \fBbpftool prog loadall\fP تمام برنامه‌های درون \fIOBJ\fP را در دایرکتوری \fIPATH\fP سنجاق می‌کند. پارامتر \fBtype\fP اختیاری است؛ اگر مشخص نشود، نوع برنامه از روی نام بخش‌ها (sections) استنتاج خواهد شد. به طور پیش‌فرض، bpftool نگاشت‌های جدیدی را بر اساس تعاریف موجود در آبجکت ELF در حال بارگذاری ایجاد می‌کند. پارامتر \fBmap\fP امکان استفاده مجدد از نگاشت‌های موجود را فراهم می‌سازد. این پارامتر می‌تواند چندین بار، هر بار برای یک نگاشت متفاوت مشخص شود. \fIIDX\fP به اندیس نگاشتی که قرار است در فایل ELF جایگزین شود اشاره دارد (شمارش از ۰)، در حالی که \fINAME\fP اجازه می‌دهد یک نگاشت با نام جایگزین شود. \fIMAP\fP نگاشت مورد استفاده را مشخص می‌کند و با \fBid\fP یا از طریق یک فایل سنجاق‌شده (\fBpinned\fP) به آن ارجاع داده می‌شود. اگر \fBoffload_dev\fP \fINAME\fP مشخص شود، برنامه روی دستگاه شبکه داده‌شده بارگذاری می‌شود (offload). اگر \fBxdpmeta_dev\fP \fINAME\fP مشخص شود، برنامه بدون آف‌لود شدن مقید به دستگاه (device\-bound) می‌شود که این کار دسترسی به متادیتای XDP را تسهیل می‌کند. آرگومان اختیاری \fBpinmaps\fP می‌تواند برای سنجاق کردن تمام نگاشت‌ها در دایرکتوری \fIMAP_DIR\fP ارائه شود. .sp اگر \fBautoattach\fP مشخص شده باشد، برنامه قبل از سنجاق شدن متصل (attach) خواهد شد. در این حالت، تنها پیوند (link \- نمایانگر اتصال برنامه به قلاب مربوطه) سنجاق می‌شود و نه خود برنامه؛ بنابراین مسیر در \fBbpftool prog show \-f\fP نمایش داده نخواهد شد و فقط در \fBbpftool link show \-f\fP ظاهر می‌شود. همچنین، این ویژگی تنها زمانی کار می‌کند که bpftool (libbpf) قادر باشد تمام اطلاعات لازم را از فایل شیء استنتاج کند؛ به‌ویژه این قابلیت برای همه انواع برنامه‌ها پشتیبانی نمی‌شود. اگر برنامه‌ای از autoattach پشتیبانی نکند، bpftool برای آن برنامه به روش سنجاق کردن معمولی بازمی‌گردد. .sp گزینه \fBkernel_btf\fP امکان مشخص کردن یک فایل BTF خارجی را برای جایگزینی فایل BTF داخلی سیستم (vmlinux) جهت بازآرایی‌های CO\-RE فراهم می‌کند. توجه داشته باشید که هر ویژگی دیگری که به BTF متکی است (مانند برنامه‌های fentry/fexit یا struct_ops) نیازمند فایل BTF مربوط به همان هسته واقعی در حال اجرا بر روی میزبان است که اغلب در مسیر /sys/kernel/btf/vmlinux در دسترس قرار دارد. .sp نکته: \fIPATH\fP باید در یک نقطه سوارشده از \fIbpffs\fP قرار داشته باشد. این مسیر نباید شامل نویسه نقطه (\(aq.\(aq) باشد، زیرا برای پسوندهای آینده در \fIbpffs\fP رزرو شده است. .TP .B bpftool prog attach \fIPROG\fP \fIATTACH_TYPE\fP [\fIMAP\fP] متصل کردن (attach) برنامه bpf با نام \fIPROG\fP (با نوع مشخص‌شده توسط \fIATTACH_TYPE\fP). اکثر انواع \fIATTACH_TYPE\fP به پارامتر \fIMAP\fP نیاز دارند، به استثنای \fIflow_dissector\fP که به فضای نام شبکه فعلی متصل می‌شود. .TP .B bpftool prog detach \fIPROG\fP \fIATTACH_TYPE\fP [\fIMAP\fP] جدا کردن (detach) برنامه bpf با نام \fIPROG\fP (با نوع مشخص‌شده توسط \fIATTACH_TYPE\fP). اکثر انواع \fIATTACH_TYPE\fP به پارامتر \fIMAP\fP نیاز دارند، به استثنای \fIflow_dissector\fP که از فضای نام شبکه فعلی جدا می‌شود. .TP .B bpftool prog tracelog دامپ لوله ردگیری (trace pipe) سیستم روی کنسول (stdout). برای متوقف کردن چاپ، کلیدهای را فشار دهید. برنامه‌های BPF می‌توانند در زمان اجرا با استفاده از تابع کمکی \fBbpf_trace_printk\fP() در این لوله ردگیری بنویسند. این ویژگی تنها باید برای اهداف اشکال‌زدایی (debugging) استفاده شود. برای ارسال جریانی داده‌ها (streaming) از برنامه‌های BPF به فضای کاربر، می‌توان از رخدادهای perf استفاده کرد (همچنین به \fBbpftool\-map\fP(8) مراجعه کنید). .TP .B bpftool prog tracelog { stdout | stderr } \fIPROG\fP دامپ جریان BPF مربوط به برنامه. برنامه‌های BPF می‌توانند در زمان اجرا با استفاده از تابع هسته‌ای (kfunc) با نام \fBbpf_stream_vprintk_impl\fP() در این جریان‌ها بنویسند. هسته ممکن است پیام‌های خطا را در جریان خطای استاندارد بنویسد. این سازوکار تنها باید برای اهداف اشکال‌زدایی استفاده شود. .TP .B bpftool prog run \fIPROG\fP data_in \fIFILE\fP [data_out \fIFILE\fP [data_size_out \fIL\fP]] [ctx_in \fIFILE\fP [ctx_out \fIFILE\fP [ctx_size_out \fIM\fP]]] [repeat \fIN\fP] اجرای برنامه BPF با نام \fIPROG\fP در زیرساخت آزمایشی هسته برای BPF؛ بدین معنی که برنامه روی داده‌ها و زمینه‌ای (context) که توسط کاربر فراهم شده کار می‌کند، نه روی بسته‌های واقعی یا توابع مانیتورشده و غیره. مقدار بازگشتی و مدت زمان اجرای آزمایشی روی کنسول چاپ می‌شود. .sp داده‌های ورودی از \fIFILE\fP ارائه‌شده با \fBdata_in\fP خوانده می‌شود. اگر این \fIFILE\fP برابر با \(dq\fB\-\fP\(dq باشد، داده‌های ورودی از ورودی استاندارد خوانده می‌شوند. زمینه ورودی (در صورت وجود)، از \fIFILE\fP ارائه‌شده با \fBctx_in\fP خوانده می‌شود. مجدداً می‌توان از \(dq\fB\-\fP\(dq برای خواندن از ورودی استاندارد استفاده کرد، اما تنها در صورتی که ورودی استاندارد قبلاً برای داده‌های ورودی به کار گرفته نشده باشد. اگر \fIFILE\fP با \fBdata_out\fP مشخص شود، داده‌های خروجی در آن فایل نوشته می‌شوند. به همین ترتیب، زمینه خروجی در \fIFILE\fP ارائه‌شده با \fBctx_out\fP نوشته می‌شود. برای هر دو جریان خروجی، می‌توان از \(dq\fB\-\fP\(dq برای چاپ در خروجی استاندارد (به صورت متن ساده یا در صورت ارسال گزینه مربوطه به صورت JSON) استفاده کرد. اگر کلمات کلیدی خروجی حذف شوند، داده‌ها و زمینه خروجی دور ریخته می‌شوند. کلمات کلیدی \fBdata_size_out\fP و \fBctx_size_out\fP برای ارسال اندازه (به بایت) بافرهای خروجی به هسته استفاده می‌شوند، اگرچه مقدار پیش‌فرض ۳۲ کیلوبایت برای اکثر موارد بیش از اندازه کافی است. .sp کلمه کلیدی \fBrepeat\fP برای مشخص کردن تعداد دفعات اجرای متوالی استفاده می‌شود. توجه داشته باشید که داده‌ها و زمینه خروجی نوشته‌شده در فایل‌ها مربوط به آخرین اجرا از این دفعات است. مدت زمان چاپ‌شده در پایان اجراها، میانگین تمام اجراهای انجام‌شده توسط دستور است. .sp همه انواع برنامه‌ها از اجرای آزمایشی پشتیبانی نمی‌کنند. در میان آن‌هایی که پشتیبانی می‌کنند نیز، همه نمی‌توانند آرگومان‌های \fBctx_in\fP/\fBctx_out\fP را بپذیرند. ابزار bpftool بررسی‌هایی روی انواع برنامه انجام نمی‌دهد. .TP .B bpftool prog profile \fIPROG\fP [duration \fIDURATION\fP] \fIMETRICs\fP پروفایل کردن معیارهای \fIMETRICs\fP برای برنامه bpf با نام \fIPROG\fP به مدت \fIDURATION\fP ثانیه یا تا زمانی که کاربر کلیدهای را فشار دهد. پارامتر \fIDURATION\fP اختیاری است. اگر \fIDURATION\fP مشخص نشود، پروفایل‌گیری تا \fBUINT_MAX\fP ثانیه ادامه خواهد یافت. .TP .B bpftool prog help چاپ پیام راهنمای کوتاه. .UNINDENT .SH "گزینه‌ها (OPTIONS)" .INDENT 0.0 .TP .B \-h\fP,\fB \-\-help چاپ پیام راهنمای کوتاه (مشابه \fBbpftool help\fP). .TP .B \-V\fP,\fB \-\-version چاپ شماره نسخه bpftool (مشابه \fBbpftool version\fP)، شماره نسخه libbpf در حال استفاده و ویژگی‌های اختیاری که هنگام کامپایل bpftool گنجانده شده‌اند. ویژگی‌های اختیاری شامل پیوند با LLVM یا libbfd برای ارائه دیس‌اسمبلر برای برنامه‌های JIT شده (\fBbpftool prog dump jited\fP) و استفاده از اسکلت‌های BPF (برخی ویژگی‌ها مانند \fBbpftool prog profile\fP یا نمایش pidهای مرتبط با شیءهای BPF ممکن است به آن وابسته باشند) است. .TP .B \-j\fP,\fB \-\-json تولید خروجی به فرمت JSON. برای دستوراتی که نمی‌توانند JSON تولید کنند، این گزینه هیچ اثری ندارد. .TP .B \-p\fP,\fB \-\-pretty تولید خروجی JSON با قالب‌بندی زیبا و خوانا برای انسان. متضمن \fB\-j\fP است. .TP .B \-d\fP,\fB \-\-debug چاپ تمام لاگ‌های موجود، حتی اطلاعات سطح اشکال‌زدایی (debug). این شامل لاگ‌های libbpf و همچنین بخش اعتبارسنج (verifier) در هنگام تلاش برای بارگذاری برنامه‌ها است. .UNINDENT .INDENT 0.0 .TP .B \-f\fP,\fB \-\-bpffs هنگام نمایش برنامه‌های BPF، نام فایل‌های برنامه‌های سنجاق‌شده نمایش داده شود. .TP .B \-m\fP,\fB \-\-mapcompat اجازه دادن به بارگذاری نگاشت‌ها با تعاریف نگاشت ناشناخته. .TP .B \-n\fP,\fB \-\-nomount عدم تلاش خودکار برای سوار کردن (mount) هرگونه فایل‌سیستم مجازی (مانند tracefs یا فایل‌سیستم مجازی BPF) در صورت نیاز. .TP .B \-L\fP,\fB \-\-use\-loader بارگذاری برنامه به عنوان یک برنامه «لودر» (\(dqloader\(dq). این گزینه برای اشکال‌زدایی در نحوه تولید چنین برنامه‌هایی مفید است. هنگامی که این گزینه استفاده می‌شود، bpftool سعی می‌کند برنامه‌ها را از فایل شیء در هسته بارگذاری کند، اما آن‌ها را سنجاق نمی‌کند (بنابراین \fIPATH\fP نباید ارائه شود). .sp هنگامی که با گزینه \fB\-d\fP|\fB\-\-debug\fP ترکیب شود، پیام‌های اشکال‌زدایی اضافی تولید می‌شوند و اجرای برنامه لودر از تابع کمکی \fBbpf_trace_printk\fP() برای ثبت هر مرحله از بارگذاری BTF، ایجاد نگاشت‌ها و بارگذاری برنامه‌ها استفاده خواهد کرد (به \fBbpftool prog tracelog\fP به عنوان روشی برای مشاهده و دامپ این پیام‌ها مراجعه کنید). .TP .B \-S\fP,\fB \-\-sign فعال‌سازی امضای برنامه BPF قبل از بارگذاری. این گزینه باید همراه با \fB\-k\fP و \fB\-i\fP استفاده شود. استفاده از این فلگ به طور ضمنی \fB\-\-use\-loader\fP را فعال می‌کند. .TP .BI \-k \ مسیر فایل کلید خصوصی در قالب PEM، هنگام امضا کردن الزامی است. .TP .BI \-i \ مسیر فایل گواهی X.509 در قالب PEM یا DER، هنگام امضا کردن الزامی است. .UNINDENT .SH "مثال‌ها (EXAMPLES)" .sp \fB# bpftool prog show\fP .INDENT 0.0 .INDENT 3.5 .sp .EX 10: xdp name some_prog tag 005a3d2123620c8b gpl run_time_ns 81632 run_cnt 10 loaded_at 2017\-09\-29T20:11:00+0000 uid 0 xlated 528B jited 370B memlock 4096B map_ids 10 pids systemd(1) .EE .UNINDENT .UNINDENT .sp \fB# bpftool \-\-json \-\-pretty prog show\fP .INDENT 0.0 .INDENT 3.5 .sp .EX [{ \(dqid\(dq: 10, \(dqtype\(dq: \(dqxdp\(dq, \(dqtag\(dq: \(dq005a3d2123620c8b\(dq, \(dqgpl_compatible\(dq: true, \(dqrun_time_ns\(dq: 81632, \(dqrun_cnt\(dq: 10, \(dqloaded_at\(dq: 1506715860, \(dquid\(dq: 0, \(dqbytes_xlated\(dq: 528, \(dqjited\(dq: true, \(dqbytes_jited\(dq: 370, \(dqbytes_memlock\(dq: 4096, \(dqmap_ids\(dq: [10 ], \(dqpids\(dq: [{ \(dqpid\(dq: 1, \(dqcomm\(dq: \(dqsystemd\(dq } ] } ] .EE .UNINDENT .UNINDENT .nf \fB# bpftool prog dump xlated id 10 file /tmp/t\fP \fB$ ls \-l /tmp/t\fP .fi .sp .INDENT 0.0 .INDENT 3.5 .sp .EX \-rw\-\-\-\-\-\-\- 1 root root 560 Jul 22 01:42 /tmp/t .EE .UNINDENT .UNINDENT .sp \fB# bpftool prog dump jited tag 005a3d2123620c8b\fP .INDENT 0.0 .INDENT 3.5 .sp .EX 0: push %rbp 1: mov %rsp,%rbp 2: sub $0x228,%rsp 3: sub $0x28,%rbp 4: mov %rbx,0x0(%rbp) .EE .UNINDENT .UNINDENT .nf \fB# mount \-t bpf none /sys/fs/bpf/\fP \fB# bpftool prog pin id 10 /sys/fs/bpf/prog\fP \fB# bpftool prog load ./my_prog.o /sys/fs/bpf/prog2\fP \fB# ls \-l /sys/fs/bpf/\fP .fi .sp .INDENT 0.0 .INDENT 3.5 .sp .EX \-rw\-\-\-\-\-\-\- 1 root root 0 Jul 22 01:43 prog \-rw\-\-\-\-\-\-\- 1 root root 0 Jul 22 01:44 prog2 .EE .UNINDENT .UNINDENT .sp \fB# bpftool prog dump jited pinned /sys/fs/bpf/prog opcodes\fP .INDENT 0.0 .INDENT 3.5 .sp .EX 0: push %rbp 55 1: mov %rsp,%rbp 48 89 e5 4: sub $0x228,%rsp 48 81 ec 28 02 00 00 b: sub $0x28,%rbp 48 83 ed 28 f: mov %rbx,0x0(%rbp) 48 89 5d 00 .EE .UNINDENT .UNINDENT .nf \fB# bpftool prog load xdp1_kern.o /sys/fs/bpf/xdp1 type xdp map name rxcnt id 7\fP \fB# bpftool prog show pinned /sys/fs/bpf/xdp1\fP .fi .sp .INDENT 0.0 .INDENT 3.5 .sp .EX 9: xdp name xdp_prog1 tag 539ec6ce11b52f98 gpl loaded_at 2018\-06\-25T16:17:31\-0700 uid 0 xlated 488B jited 336B memlock 4096B map_ids 7 .EE .UNINDENT .UNINDENT .sp \fB# rm /sys/fs/bpf/xdp1\fP .nf \fB# bpftool prog profile id 337 duration 10 cycles instructions llc_misses\fP .fi .sp .INDENT 0.0 .INDENT 3.5 .sp .EX 51397 run_cnt 40176203 cycles (83.05%) 42518139 instructions # 1.06 insns per cycle (83.39%) 123 llc_misses # 2.89 LLC misses per million insns (83.15%) .EE .UNINDENT .UNINDENT .nf خروجی زیر مربوط به لاگ‌های ردگیری (trace logs) است. در ترمینال‌های جداگانه اجرا کنید: \fB# bpftool prog tracelog\fP \fB# bpftool prog load \-L \-d file.o\fP .fi .sp .INDENT 0.0 .INDENT 3.5 .sp .EX bpftool\-620059 [004] d... 2634685.517903: bpf_trace_printk: btf_load size 665 r=5 bpftool\-620059 [004] d... 2634685.517912: bpf_trace_printk: map_create sample_map idx 0 type 2 value_size 4 value_btf_id 0 r=6 bpftool\-620059 [004] d... 2634685.517997: bpf_trace_printk: prog_load sample insn_cnt 13 r=7 bpftool\-620059 [004] d... 2634685.517999: bpf_trace_printk: close(5) = 0 .EE .UNINDENT .UNINDENT .SH "همچنین ببینید (SEE ALSO)" .sp \fBbpf\fP(2), \fBbpf\-helpers\fP(7), \fBbpftool\fP(8), \fBbpftool\-btf\fP(8), \fBbpftool\-cgroup\fP(8), \fBbpftool\-feature\fP(8), \fBbpftool\-gen\fP(8), \fBbpftool\-iter\fP(8), \fBbpftool\-link\fP(8), \fBbpftool\-map\fP(8), \fBbpftool\-net\fP(8), \fBbpftool\-perf\fP(8), \fBbpftool\-struct_ops\fP(8), \fBbpftool\-token\fP(8) .\" End of generated man page.