| PERF-ARM-SPE(1) | perf Manual | PERF-ARM-SPE(1) |
نام (NAME)
perf-arm-spe - پشتیبانی از Arm Statistical Profiling Extension در ابزارهای Perf
خلاصه دستور (SYNOPSIS)
perf record -e arm_spe//
توضیحات (DESCRIPTION)
قابلیت SPE (پسوند نمایهسازی آماری یا Statistical Profiling Extension) انتساب دقیق تأخیرها و رویدادها را تا سطح تکتک دستورالعملها ممکن میسازد. این قابلیت بهجای وقفه-محور بودن، دستورالعملی را برای نمونهبرداری انتخاب کرده و سپس دادههای مربوط به آن را در حین اجرا جمعآوری میکند. دادهها شامل زمان اجرا برحسب چرخه (cycle) هستند. برای عملیاتهای بارگذاری (load) و ذخیرهسازی (store)، این دادهها همچنین شامل آدرس داده، رویدادهای عدم اصابت به حافظه نهان (cache miss) و مبدأ داده میشوند.
نمونهبرداری دارای ۵ مرحله است:
انتخاب یک عملیات
این عملیات از یک جامعه نمونه انتخاب میشود؛ برای SPE، این یک انتخاب وابسته به پیادهسازی (IMPLEMENTATION DEFINED) از تمام دستورالعملهای معماری یا تمام ریزدستورها (micro-ops) است. نمونهبرداری در فواصل زمانی قابل برنامهریزی انجام میشود. معماری سازوکاری فراهم میکند تا راهانداز SPE بتواند حداقل فاصلهای را که باید در آن نمونهبرداری کند، استنتاج کند. در صورتی که فاصلهای مشخص نشده باشد، این حداقل فاصله توسط راهانداز استفاده میشود. همچنین بهطور پیشفرض، یک آشفتگی شبهتصادفی (pseudo-random perturbation) به فاصله نمونهبرداری افزوده میشود.
جمعآوری دادهها درباره عملیات
شمارنده برنامه (Program counter)، رویدادهای PMU، زمانبندیها و آدرسهای داده مربوط به عملیات ثبت میشوند. سازوکار نمونهبرداری تضمین میکند که در هر زمان تنها یک عملیات نمونهبرداریشده در حال اجرا (in flight) باشد.
دور ریختن اختیاری رکورد بر اساس یک فیلتر
بر اساس معیارهای قابل برنامهریزی، نگهداشتن رکورد یا دور ریختن آن تعیین میشود. اگر رکورد دور ریخته شود، جریان پردازش برای این نمونه در همینجا متوقف میشود.
نوشتن رکورد در حافظه
رکورد به یک بافر حافظه الحاق میشود.
ایجاد وقفه هنگام پر شدن بافر
هنگامی که بافر پر میشود، یک وقفه (interrupt) ارسال شده و راهانداز به Perf اطلاع میدهد تا رکوردها را جمعآوری کند. سپس Perf دادههای خام را در فایل perf.data ذخیره میکند.
باز کردن فایل (OPENING THE FILE)
تا این نقطه، هیچ رمزگشایی از دادههای SPE توسط هسته یا Perf انجام نشده است. رمزگشایی تنها هنگامی رخ میدهد که فایل ثبتشده با perf report یا perf script باز شود. هنگام رمزگشایی دادهها، Perf «نمونههای ترکیبی» (synthetic samples) تولید میکند، گویی که این نمونهها در زمان ضبط تولید شدهاند. این نمونهها همانند حالتی هستند که نمونهبرداری عادی توسط Perf بدون استفاده از SPE انجام شده باشد، هرچند ممکن است مشخصهها و ویژگیهای بیشتری وابسته به آنها باشد. برای مثال، یک نمونه عادی ممکن است تنها حاوی اشارهگر دستورالعمل باشد، اما یک نمونه SPE میتواند آدرسهای داده و مشخصههای تأخیر (latency) را نیز در بر داشته باشد.
چرا نمونهبرداری؟ (WHY SAMPLING?)
با این حال، SPE هیچ اطلاعاتی از نمودار فراخوانی (call-graph) ارائه نمیدهد و بر روشهای آماری متکی است..SH "برخوردها (COLLISIONS)"
هنگامی که یک عملیات در حالی که عملیات نمونهبرداریشدهٔ پیشین هنوز پایان نیافته است نمونهبرداری شود، یک برخورد (collision) رخ میدهد. نمونهٔ جدید دور ریخته میشود. برخوردها بر یکپارچگی دادهها اثر میگذارند، بنابراین نرخ نمونهبرداری باید طوری تنظیم شود که از بروز برخوردها جلوگیری به عمل آید.
از رویداد PMU با نام sample_collision میتوان برای تعیین تعداد نمونههای از دست رفته استفاده کرد؛ هرچند این شمارش بر پایهٔ برخوردهای رخداده پیش از اعمال فیلتر است. از این رو، نمیتوان از آن به عنوان یک عدد دقیق برای نمونههای دور ریختهشدهای که در صورت نبود برخورد از فیلتر عبور میکردند استفاده کرد، اما میتواند یک راهنمای تقریبی باشد.
اثر نمونهبرداری ریزمعماری (THE EFFECT OF MICROARCHITECTURAL SAMPLING)
اگر یک پیادهسازی به جای دستورالعملها، ریزعملیاتها (micro-operations) را نمونهبرداری کند، نتایج نمونهبرداری باید بر همین اساس وزندهی شوند.
برای نمونه، اگر یک دستورالعمل مفروض A همواره به دو ریزعملیات A0 و A1 تبدیل شود، احتمال پدیدار شدن آن در جامعهٔ نمونه دو برابر خواهد بود.
اثر تقریبی تبدیلها، و در صورت امکان، نمونهبرداری از عملیاتهای حدسی (speculative) را میتوان از روی رویدادهای PMU شامل sample_pop و inst_retired برآورد کرد.
نیازمندیهای هسته (KERNEL REQUIREMENTS)
پیکربندی ARM_SPE_PMU باید طوری تنظیم شده باشد که یا به عنوان ماژول و یا به صورت ایستا ساخته شود.
بسته به مدل CPU، ممکن است لازم باشد هسته با غیرفعال بودن جداسازی جدول صفحه (kpti=off) راهاندازی شود. اگر لازم باشد KPTI غیرفعال شود، این فرآیند با پیام کنسول "profiling buffer inaccessible. Try passing kpti=off on the kernel command line" شکست میخورد.
برای معیارهای کاملی که تعیین میکنند آیا KPTI باید اجباراً غیرفعال شود یا خیر، تابع unmap_kernel_at_el0() را در سورسهای هسته ببینید. موارد رایجی که در آنها نیازی به غیرفعالسازی نیست عبارتند از CPUهای موجود در kpti_safe_list، یا روی +Arm v8.5 که FEAT_E0PD در آن اجباری است.
وقفهٔ SPE نیز باید توسط سفتافزار (firmware) توصیف شده باشد. اگر ماژول بارگذاری شده و KPTI غیرفعال باشد (یا نیازی به غیرفعال بودن آن نباشد) اما SPE PMU همچنان در /sys/bus/event_source/devices/ نمایش داده نشود، ممکن است وقفهٔ SPE توسط ACPI یا DT توصیف نشده باشد. در این حالت هیچ هشداری توسط درایور چاپ نخواهد شد.
ثبت SPE با ابزارهای خط فرمان PERF (CAPTURING SPE WITH PERF COMMAND-LINE TOOLS)
میتوانید یک نشست را با نمونههای SPE ضبط کنید:
perf record -e arm_spe// -- ./mybench
دورهٔ نمونهبرداری با گزینهٔ -c تعیین میشود، و از آنجا که به طور پیشفرض کمترین بازه استفاده میشود، توصیه میشود آن را روی مقدار بالاتری تنظیم کنید. مقدار در PMSIRR.INTERVAL نوشته میشود.
پارامترهای پیکربندی (Config parameters)
این پارامترها میان // در تعریف رویداد قرار میگیرند و با کاما جدا میشوند. برای نمونه: -e arm_spe/load_filter=1,min_latency=10/
event_filter=<mask> - فیلتر AND منطقی روی رویدادهای مشخص (PMSEVFR) - شرح میدان بیتی زیر را ببینید inv_event_filter=<mask> - فیلتر OR منطقی برای حذف رویدادهای مشخص (PMSNEVFR, FEAT_SPEv1p2) - شرح میدان بیتی زیر را ببینید jitter=1 - استفاده از jitter برای جلوگیری از تشدید هنگام نمونهبرداری (PMSIRR.RND) min_latency=<n> - تنها نمونههایی با این تاخیر یا بیشتر جمعآوری شوند* (PMSLATFR) pa_enable=1 - جمعآوری آدرس فیزیکی (همچنین VA) مربوط به load/storeها (PMSCR.PA) - نیازمند دسترسی ممتاز pct_enable=1 - جمعآوری برچسب زمانی فیزیکی به جای برچسب زمانی مجازی (PMSCR.PCT) - نیازمند دسترسی ممتاز ts_enable=1 - فعالسازی برچسب زمانی با مقدار تایمر عمومی (PMSCR.TS) discard=1 - فعالسازی رویدادهای SPE PMU بدون جمعآوری دادههای نمونه - بخش 'Discard mode' را ببینید (PMBLIMITR.FM = DISCARD) inv_data_src_filter=<mask> - ماسک برای فیلتر کردن از میان ۰-۶۳ منبع دادهٔ ممکن (PMSDSFR, FEAT_SPE_FDS) - بخش 'Data source filtering' را ببینید
* تاخیر، تاخیر کل از نقطهای است که نمونهبرداری روی آن دستورالعمل آغاز شده است، نه تنها تاخیر اجرا.
تنها برخی از رویدادها را میتوان با استفاده از بیتهای event_filter فیلتر کرد. فیلتر کلی حاصل AND منطقی این بیتها است؛ برای نمونه اگر بیتهای ۳ و ۵ تنظیم شوند، تنها نمونههایی ثبت میشوند که هم L1D cache refill و هم TLB walk را داشته باشند. هنگامی که FEAT_SPEv1p2 پیادهسازی شده باشد، از inv_event_filter نیز میتوان برای مستثنی کردن رویدادهایی که هر یک از بیتهای فیلتر (OR) در آنها تنظیم شده است استفاده کرد. برای نمونه تنظیم بیتهای ۳ و ۵ در inv_event_filter هر رویدادی را که L1D cache refill یا TLB walk باشد مستثنی خواهد کرد. اگر یک بیت در هر دو فیلتر تنظیم شود، لحاظ شدن یا مستثنی شدن نمونه غیرقابل پیشبینی (UNPREDICTABLE) است. بیتهای فیلتر برای هر دو event_filter و inv_event_filter عبارتند از:
bit 1 - Instruction retired (یعنی صرفنظر از دستورالعملهای حدسی)
bit 2 - L1D access (FEAT_SPEv1p4)
bit 3 - L1D refill
bit 4 - TLB access (FEAT_SPEv1p4)
bit 5 - TLB refill
bit 6 - Not taken event (FEAT_SPEv1p2)
bit 7 - Mispredict
bit 8 - Last level cache access (FEAT_SPEv1p4)
bit 9 - Last level cache miss (FEAT_SPEv1p4)
bit 10 - Remote access (FEAT_SPEv1p4)
bit 11 - Misaligned access (FEAT_SPEv1p1)
bit 12-15 - رویدادهای IMPLEMENTATION DEFINED (در صورت پیادهسازی)
bit 17 - Partial or empty SME or SVE predicate (FEAT_SPEv1p1)
bit 18 - Empty SME or SVE predicate (FEAT_SPEv1p1)
bit 19 - L2D access (FEAT_SPEv1p4)
bit 20 - L2D miss (FEAT_SPEv1p4)
bit 21 - Cache data modified (FEAT_SPEv1p4)
bit 22 - Recently fetched (FEAT_SPEv1p4)
bit 23 - Data snooped (FEAT_SPEv1p4)
bit 24 - رویداد Streaming SVE mode (هنگام پیادهسازی FEAT_SPE_SME)، یا
رویداد IMPLEMENTATION DEFINED 24 (هنگام پیادهسازی، تنها در نسخههای
کمتر از FEAT_SPEv1p4)
bit 25 - رویداد عملیات SMCU یا پردازنده کمکی خارجی هنگام پیادهسازی FEAT_SPE_SME، یا
رویداد IMPLEMENTATION DEFINED 25 (هنگام پیادهسازی، تنها در نسخههای
کمتر از FEAT_SPEv1p4)
bit 26-31 - رویدادهای IMPLEMENTATION DEFINED (تنها در نسخههای کمتر از FEAT_SPEv1p4)
bit 48-63 - رویدادهای IMPLEMENTATION DEFINED (در صورت پیادهسازی)
برای بیتهای IMPLEMENTATION DEFINED، در صورتی که این بیتها پیادهسازی شده باشند به راهنمای مرجع فنی (TRM) پردازنده مراجعه کنید.
درایور در صورتی که بیتهای فیلتر درخواستی نیازمند نسخههای پیادهسازینشدهٔ SPE باشند رویدادها را رد خواهد کرد، اما بیتهای فیلتر را برای بیتهای پیادهسازینشدهٔ IMPDEF یا هنگامی که ویژگی مرتبط با آنها وجود ندارد (مانند SME) رد نخواهد کرد. برای نمونه، اگر FEAT_SPEv1p2 پیادهسازی نشده باشد، فیلتر کردن بر روی «Not taken event» (بیت ۶) رد خواهد شد.
بنابراین برای نمونهبرداری تنها از دستورالعملهای بازنشسته (تکمیلشده):
perf record -e arm_spe/event_filter=2/ -- ./mybench
یا تنها انشعابهای اشتباه پیشبینیشده:
perf record -e arm_spe/event_filter=0x80/ -- ./mybench
در صورت تنظیم، فیلترهای زیر را میتوان برای انتخاب نمونههایی که با هر یک از انواع عملیات مطابقت دارند (فیلترگذاری OR) استفاده کرد. اگر تنها یکی تنظیم شده باشد، فقط نمونههای آن نوع جمعآوری میشوند:
branch_filter=1 - جمعآوری انشعابها (PMSFCR.B) load_filter=1 - جمعآوری بارگذاریها (PMSFCR.LD) store_filter=1 - جمعآوری ذخیرهسازیها (PMSFCR.ST)
هنگامی که فیلترگذاری گسترشیافته پشتیبانی شود (FEAT_SPE_EFT)، عملیاتهای SIMD و ممیز شناور نیز میتوانند انتخاب شوند:
simd_filter=1 - جمعآوری بارگذاریها، ذخیرهسازیها و عملیاتهای SIMD (PMSFCR.SIMD) float_filter=1 - جمعآوری بارگذاریها، ذخیرهسازیها و عملیاتهای ممیز شناور (PMSFCR.FP)
هنگامی که فیلترگذاری گسترشیافته پشتیبانی شود (FEAT_SPE_EFT)، فیلترهای نوع عملیات را میتوان با استفاده از فیلدهای mask_ به AND تغییر داد. برای نمونه میتوان نمونهها را در صورتی که هم ذخیرهسازی و هم SIMD باشند با تنظیم store_filter=1,simd_filter=1, store_filter_mask=1,simd_filter_mask=1 انتخاب کرد. ماسکهای جدید به شرح زیر هستند:
branch_filter_mask=1 - تغییر رفتار فیلتر انشعاب از OR به AND (PMSFCR.Bm) load_filter_mask=1 - تغییر رفتار فیلتر بارگذاری از OR به AND (PMSFCR.LDm) store_filter_mask=1 - تغییر رفتار فیلتر ذخیرهسازی از OR به AND (PMSFCR.STm) simd_filter_mask=1 - تغییر رفتار فیلتر SIMD از OR به AND (PMSFCR.SIMDm) float_filter_mask=1 - تغییر رفتار فیلتر ممیز شناور از OR به AND (PMSFCR.FPm)
بهطور پیشفرض perf report و perf script نمونهها را بسته به ویژگیها/رویدادهای رکورد SPE به گروههای مجزایی اختصاص میدهند. از آنجا که ممکن است چندین رویداد با یک دستورالعمل مرتبط باشند، نمونههای موجود در این گروهها لزوماً منحصربهفرد نیستند. برای مثال perf report این گروهها را نشان میدهد:
Available samples 0 arm_spe// 0 dummy:u 21 l1d-miss 897 l1d-access 5 llc-miss 7 llc-access 2 tlb-miss 1K tlb-access 36 branch 0 remote-access 900 memory 1800 instructions
رویدادهای arm_spe// و dummy:u جزئیات پیادهسازی هستند و انتظار میرود خالی باشند.
گروه instructions شامل فهرست کاملی از نمونههای منحصربهفرد است که در گروههای دیگر دستهبندی نشدهاند. برای تولید تنها این گروه از --itrace=i1i استفاده کنید.
مقدار 1i (بازه ۱ دستورالعمل) نشاندهنده عدم کاهش بیشتر نرخ نمونهبرداری (downsampling) است. این گزینه به جای بازه دستورالعمل، به ازای هر n نمونه SPE یک نمونه تولید میکند. برای مثال جهت تولید مجموعه پیشفرض رویدادها به ازای هر ۱۰۰ نمونه SPE:
perf report --itrace==bxofmtMai100i
سایر انواع بازههای زمانی، مانند نانوثانیه (ns)، در حال حاضر پشتیبانی نمیشوند.
جزئیات دسترسی به حافظه نیز در نمونهها ذخیره میشود و میتوان آن را با دستور زیر مشاهده کرد:
perf report --mem-mode
مقدار تأخیر (latency) برگرفته از نمونه SPE در فیلد weight نمونههای Perf ذخیره میشود و میتوان با فعال کردن نمایش آن از خط فرمان، آن را در خروجیهای Perf script و report نمایش داد.
خطاهای رایج
ماژول ساخته یا بارگذاری نشده است، KPTI غیرفعال نشده است، وقفه توسط سفتافزار توصیف نشده است، یا روی یک ماشین مجازی اجرا میشود. بخش 'Kernel Requirements' در بالا را ببینید.
برای جمعآوری بستههای context دسترسی ریشه (root) لازم است. اما این موارد فقط دقت انتساب PIDها به نمونههای هسته را افزایش میدهند. برای نمونهبرداری فضای کاربری میتوان این مورد را نادیده گرفت.
بازه نمونهبرداری را افزایش دهید (بالا را ببینید)
ویژگی SPE دارای رویدادهایی است که میتوانند روی PMUهای هسته شمارش شوند. پیشوند نام این رویدادها SAMPLE_ است، برای نمونه SAMPLE_POP، SAMPLE_FEED، SAMPLE_COLLISION و SAMPLE_FEED_BR.
این رویدادها تنها زمانی شمارش خواهند شد که یک رویداد SPE روی همان هستهای که رویداد PMU روی آن باز شده است اجرا شود، در غیر این صورت مقدار 0 خوانده میشود. بسته به شیوه باز شدن رویداد، روشهای گوناگونی برای اطمینان از زمانبندی همزمان رویداد PMU و رویداد SPE وجود دارد. برای نمونه، باز کردن هر دو رویداد به صورت per-process روی همان فرآیند، اگرچه تضمین نمیشود که هنگام تعویض زمینه (context switching) ابتدا رویداد PMU فعال گردد. به همین دلیل شاید بهتر باشد رویداد PMU را به صورت سراسری در سطح سیستم (systemwide) باز کرده و سپس SPE را روی فرآیند مورد نظر اجرا کنید.
حالت دور انداختن (Discard mode)
در صورتی که حالت discard پشتیبانی شود (اختیاری از Armv8.6 به بعد)، میتوان از رویدادهای PMU هسته مرتبط با SPE (مانند SAMPLE_* و غیره) بدون تحمیل بار اضافی (overhead) جمعآوری دادههای نمونه استفاده کرد. ابتدا یک نشست SPE سراسری در سطح سیستم (یا روی هسته مورد نظر) را با استفاده از گزینههایی برای به حداقل رساندن خروجی اجرا کنید. سپس دستور perf stat را اجرا نمایید:
perf record -e arm_spe/discard/ -a -N -B --no-bpf-event -o - > /dev/null & perf stat -e SAMPLE_FEED_LD
فیلتر کردن منبع داده (Data source filtering)
هنگامی که FEAT_SPE_FDS موجود باشد، میتوان از inv_data_src_filter به عنوان یک ماسک برای فیلتر کردن زیرمجموعهای (0 - 63) از شناسههای احتمالی منابع داده استفاده کرد. دامنه کامل منابع داده 0 - 65535 است، هرچند بعید است در عمل به کار روند. منابع داده به صورت IMPDEF (وابسته به پیادهسازی) هستند، بنابراین برای مشاهده نگاشتها به TRM مراجعه کنید. هر بیت N از فیلتر، به منبع داده N نگاشت میشود. این فیلتر یک OR منطقی از تمام بیتها است و مقدار دادهشده به inv_data_src_filter پیش از نوشته شدن در PMSDSFR_EL1 معکوس میشود، به طوری که بیتهای یک (set) آن منبع داده را مستثنی کرده و بیتهای صفر (cleared) آن منبع داده را شامل میشوند. بنابراین مقدار پیشفرض 0 معادل بدون فیلتر است (همه منابع داده شامل میشوند).
برای نمونه، جهت گنجاندن صرفاً منابع داده 0 و 3، بیتهای 0 و 3 را پاک (صفر) کنید (0xFFFFFFFFFFFFFFF6).
هنگامی که inv_data_src_filter روی 0xFFFFFFFFFFFFFFFF تنظیم شود، تمام نمونهها با هر منبع داده تنظیمشدهای مستثنی خواهند شد.
همچنین ببینید (SEE ALSO)
perf-record(1), perf-script(1), perf-report(1), perf-inject(1)
| 09/04/2026 | perf |