PERF-DIFF(1) perf Manual PERF-DIFF(1)

perf-diff - خواندن فایل‌های perf.data و نمایش پروفایل تفاضلی

perf diff [baseline file] [data file1] [[data file2] ... ]

این دستور تفاوت کارایی میان دو یا چند فایل perf.data ضبط‌شده از طریق perf record را نمایش می‌دهد.

اگر هیچ آرگومانی داده نشود، پیش‌فرض فایل‌های perf.data.old و perf.data در نظر گرفته خواهند شد.

پروفایل تفاضلی تنها برای رویدادهایی که با هر دو فایل perf.data مشخص‌شده همخوانی داشته باشند نمایش داده می‌شود.

اگر هیچ پارامتری ارسال نشود، نمونه‌ها بر اساس dso و نماد (symbol) مرتب می‌شوند. از آنجا که ممکن است فایل‌های perf.data از باینری‌های متفاوتی تهیه شده باشند، آدرس نمادها می‌تواند متغیر باشد؛ بنابراین perf diff بر اساس مقایسه نام فایل‌ها و نمادها عمل می‌کند.

-D, --dump-raw-trace

تخلیه (dump) ردپای خام به صورت ASCII.

--kallsyms=<file>

مسیر kallsyms

-m, --modules

بارگذاری نمادهای ماژول. هشدار: تنها همراه با -k و کرنل زنده (LIVE) استفاده شود.

-d, --dsos=

فقط نمادهای موجود در این dsoها را لحاظ می‌کند. از ورودی‌های به سبک CSV و قالب file://filename پشتیبانی می‌کند. این گزینه بر درصد ستون Baseline/Delta تأثیر می‌گذارد. برای اطلاعات بیشتر --percentage را ببینید.

-C, --comms=

فقط نمادهای موجود در این commها را لحاظ می‌کند. از ورودی‌های به سبک CSV و قالب file://filename پشتیبانی می‌کند. این گزینه بر درصد ستون Baseline/Delta تأثیر می‌گذارد. برای اطلاعات بیشتر --percentage را ببینید.

-S, --symbols=

فقط این نمادها را لحاظ می‌کند. از ورودی‌های به سبک CSV و قالب file://filename پشتیبانی می‌کند. این گزینه بر درصد ستون Baseline/Delta تأثیر می‌گذارد. برای اطلاعات بیشتر --percentage را ببینید.

-s, --sort=

مرتب‌سازی بر اساس کلید(ها): pid، comm، dso، symbol، cpu، parent، srcline. لطفاً توضیحات --sort را در صفحه راهنمای perf-report مشاهده کنید.

-t, --field-separator=

استفاده از یک نویسه جداکننده خاص و بدون پر کردن فاصله‌ها با space؛ تمام رخدادهای این نویسه جداکننده در نام نمادها (و سایر خروجی‌ها) با یک نویسه . جایگزین می‌شود، در نتیجه این نویسه تنها جداکننده غیرمجاز خواهد بود.

-v, --verbose

نمایش با جزئیات بیشتر؛ برای نمونه، نمایش شمارنده‌های خام علاوه بر diff.

-q, --quiet

عدم نمایش هرگونه پیام یا هشدار. (لغو -v)

-f, --force

عدم اعتبارسنجی مالکیت فایل‌ها.

--symfs=<directory[,layout]>

جستجوی فایل‌های دارای نماد به صورت نسبی نسبت به این دایرکتوری. ساختار چیدمان اختیاری می‌تواند hierarchy (پیش‌فرض، تطبیق با مسیر کامل) یا flat (فقط تطبیق با نام پایه) باشد. این گزینه زمانی مفید است که فایل‌های دیباگ در یک ساختار دایرکتوری مسطح نگهداری می‌شوند.

-b, --baseline-only

تنها مواردی که با baseline مطابقت دارند نمایش داده شوند.

-c, --compute

انتخاب شیوه محاسبات تفاضلی - delta، ratio، wdiff، cycles، delta-abs (پیش‌فرض delta-abs است). مقدار پیش‌فرض را می‌توان با استفاده از گزینه پیکربندی diff.compute تغییر داد. برای جزئیات بیشتر بخش COMPARISON METHODS را مشاهده کنید.

--cycles-hist

ارائه گزارش هیستوگرام و انحراف معیار برای داده‌های چرخه‌ها (cycles). این گزینه کمک می‌کند تشخیص دهیم داده‌های چرخه‌های گزارش‌شده دارای نویز هستند یا خیر. این گزینه باید همراه با -c cycles استفاده شود.

-p, --period

نمایش مقادیر دوره (period) برای هر دو ورودی hist مقایسه‌شده.

-F, --formula

نمایش فرمول مورد استفاده برای محاسبه تعیین‌شده.

-o, --order

مشخص کردن شماره ستون محاسباتی برای مرتب‌سازی. مقدار 0 به معنای مرتب‌سازی بر اساس بالاسری baseline و مقدار 1 (پیش‌فرض) به معنای مرتب‌سازی بر اساس مقدار محاسبه‌شده ستون ۱ (داده‌های اولین فایل غیر از baseline) است. مقادیر بزرگتر از 1 تنها در صورتی قابل استفاده هستند که تعداد کافی فایل داده فراهم شده باشد. مقدار پیش‌فرض را می‌توان از طریق گزینه پیکربندی diff.order تنظیم کرد.

--percentage

تعیین نحوه نمایش درصد بالاسری (overhead) ورودی‌های فیلترشده. فیلترها را می‌توان با گزینه‌های --comms، --dsos و/یا --symbols اعمال کرد.
«relative» به این معنی است که درصدها فقط نسبت به ورودی‌های فیلترشده سنجیده می‌شوند
تا مجموع ورودی‌های نمایش‌یافته همیشه ۱۰۰٪ باشد. «absolute» بدین معناست
که مقادیر اصلی قبل و بعد از اعمال فیلتر بدون تغییر حفظ می‌شوند.

--time

تجزیه و تحلیل نمونه‌ها در بازه زمانی مشخص‌شده. این گزینه از درصد زمانی به همراه بازه‌های زمانی چندگانه پشتیبانی می‌کند. قالب رشته زمان به صورت a%/n,b%/m,... یا a%-b%,c%-%d,... است.
برای مثال:
انتخاب دومین برش زمانی ۱۰٪ برای مقایسه:
perf diff --time 10%/2
انتخاب برش زمانی ۰٪ تا ۱۰٪ برای مقایسه:
perf diff --time 0%-10%
انتخاب اولین و دومین برش زمانی ۱۰٪ برای مقایسه:
perf diff --time 10%/1,10%/2
انتخاب برش‌های ۰٪ تا ۱۰٪ و ۳۰٪ تا ۴۰٪ برای مقایسه:
perf diff --time 0%-10%,30%-40%
همچنین از تحلیل نمونه‌ها در یک بازه زمانی مشخص <start>,<stop>
پشتیبانی می‌کند. قالب زمان‌ها seconds.nanoseconds است. اگر 'start'
مشخص نشود (یعنی رشته زمانی ',x.y' باشد) تحلیل از ابتدای
فایل آغاز می‌شود. اگر زمان پایان مشخص نشود (یعنی رشته زمانی
'x.y,' باشد) تحلیل تا انتهای فایل ادامه می‌یابد.
چندین بازه را می‌توان با فاصله از هم جدا کرد، که نیازمند قرار دادن
آرگومان در گیومه است؛ مانند --time "1234.567,1234.789 1235,"
رشته زمانی به صورت 'a1.b1,c1.d1:a2.b2,c2.d2' است. از ':' برای جداسازی برچسب‌های زمانی
فایل‌های مختلف perf.data استفاده کنید.
برای نمونه، اطلاعات برچسب زمانی را از 'perf script' دریافت می‌کنیم.
perf script -i perf.data.old
  mgen 13940 [000]  3946.361400: ...
perf script -i perf.data
  mgen 13940 [000]  3971.150589 ...
perf diff --time 3946.361400,:3971.150589,
این دستور فایل perf.data.old را از برچسب زمانی 3946.361400 تا
انتهای perf.data.old، و فایل perf.data را از برچسب زمانی
3971.150589 تا انتهای perf.data تحلیل می‌کند.

--cpu

تنها نمونه‌ها را برای فهرست CPUهای ارائه‌شده مقایسه می‌کند. چندین CPU را می‌توان به صورت یک فهرست جداشده با کاما و بدون فاصله مشخص کرد: 0,1. بازه‌های CPU با - مشخص می‌شوند: 0-2. حالت پیش‌فرض، گزارش نمونه‌ها روی تمام CPUها است.

--pid=

تنها نمونه‌ها را برای شناسه فرایند (PID) داده‌شده مقایسه می‌کند (فهرست جداشده با کاما).

--tid=

تنها نمونه‌ها را برای شناسه رشته (TID) داده‌شده مقایسه می‌کند (فهرست جداشده با کاما).

--stream

فعال‌سازی مقایسه جریان‌های داغ (hot streams). یک جریان می‌تواند یک زنجیره فراخوانی (callchain) باشد که توسط رکوردهای انشعاب (branch records) حاصل از نمونه‌ها تجمیع شده است.

مقایسه بر اساس فایل خط‌پایه (baseline) انجام می‌شود. فایل perf.data خط‌پایه برای یافتن نمونه‌ها پیمایش می‌شود. تمام فایل‌های perf.data دیگر که در خط فرمان مشخص شده‌اند، برای یافتن جفت نمونهٔ خط‌پایه جستجو می‌شوند. اگر جفت یافت شود، محاسبات مشخص‌شده انجام و نتیجه نمایش داده می‌شود.

تمام نمونه‌های حاصل از فایل‌های perf.data غیر خط‌پایه که با هیچ ورودی خط‌پایه‌ای مطابقت ندارند، با فضای خالی در ستون خط‌پایه و نتایج محاسباتی احتمالی (دلتا) در ستون مربوط به خود نمایش داده می‌شوند.

نمونه‌های فایل‌های مثال: - فایل A با نمونه‌های f1, f2, f3, f4, f6 - فایل B با نمونه‌های f2, f4, f5 - فایل C با نمونه‌های f1, f2, f5

خروجی مثال: x - محاسبه برای جفت انجام می‌شود b - درصد نمونهٔ خط‌پایه

•perf diff A B C
baseline/A compute/B compute/C  samples
---------------------------------------
b                    x          f1
b          x         x          f2
b                               f3
b          x                    f4
b                               f6
           x         x          f5
•perf diff B A C
baseline/B compute/A compute/C  samples
---------------------------------------
b          x         x          f2
b          x                    f4
b                    x          f5
           x         x          f1
           x                    f3
           x                    f6
•perf diff C B A
baseline/C compute/B compute/A  samples
---------------------------------------
b                    x          f1
b          x         x          f2
b          x                    f5
                     x          f3
           x         x          f4
                     x          f6

در صورت تعیین، ستون Delta با مقدار d نمایش داده می‌شود که به صورت زیر محاسبه می‌گردد:

d = A->period_percent - B->period_percent

که در آن: - A/B به ترتیب مدخل‌های منطبق hist از فایل داده/خط مبنای تعیین‌شده (یا perf.data/perf.data.old) هستند.

•مقدار period_percent درصد مقدار period مدخل hist درون یک تک‌فایل داده است
•با فیلتر کردن توسط -C، -d و/یا -S، مقدار period_percent ممکن است بسته به نحوه فیلتر شدن مدخل‌ها تغییر کند. برای جلوگیری از چنین نوسانی از --percentage=absolute استفاده کنید.

مشابه با روش 'delta`، اما نتیجه را بر اساس مقادیر مطلق مرتب می‌کند.

در صورت تعیین، ستون Ratio با مقدار r نمایش داده می‌شود که به صورت زیر محاسبه می‌گردد:

r = A->period / B->period

که در آن: - A/B به ترتیب مدخل‌های منطبق hist از فایل داده/خط مبنای تعیین‌شده (یا perf.data/perf.data.old) هستند.

•مقدار period بیانگر مقدار دوره (period) مدخل hist است

در صورت تعیین، ستون Weighted diff با مقدار d نمایش داده می‌شود که به صورت زیر محاسبه می‌گردد:

d = B->period * WEIGHT-A - A->period * WEIGHT-B
•مقادیر A/B به ترتیب مدخل‌های منطبق hist از فایل داده/خط مبنای تعیین‌شده (یا perf.data/perf.data.old) هستند.
•مقدار period بیانگر مقدار دوره (period) مدخل hist است
•مقادیر WEIGHT-A/WEIGHT-B وزن‌های ارائه‌شده توسط کاربر در گزینه -c پس از جداکننده : مانند -c wdiff:1,2 هستند.
•مقدار WEIGHT-A وزن فایل داده است
•مقدار WEIGHT-B وزن فایل داده مبنا (baseline) است

در صورت تعیین شدن، ستون [Program Block Range] Cycles Diff نمایش داده می‌شود. این ستون اختلاف چرخه‌ها را برای یک بلوک پایه‌ای برنامه (basic block) یکسان در میان دو فایل perf.data نمایش می‌دهد. بلوک پایه‌ای برنامه کدی است که میان دو انشعاب قرار دارد.

[Program Block Range] محدوده یک بلوک پایه‌ای برنامه را مشخص می‌کند. در صورت یافت شدن، خط کد مبدأ گزارش می‌شود؛ در غیر این صورت به‌جای آن از symbol+offset استفاده خواهد شد.

perf-record(1), perf-report(1)

09/04/2026 perf