TURBOSTAT(8) System Manager's Manual TURBOSTAT(8)

turbostat - گزارش بسامد پردازنده و آمار وضعیت‌های بیکاری

turbostat [گزینه‌ها] دستور
turbostat [گزینه‌ها] [--interval ثانیه]

دستور turbostat ساختار پردازنده (topology)، بسامد، آمار وضعیت توان در حالت بیکاری، دما و توان مصرفی را در پردازنده‌های X86 گزارش می‌دهد. دو روش برای فراخوانی turbostat وجود دارد. روش نخست، مشخص کردن یک دستور (command) است که منشعب شده (fork) و پس از پایان اجرای آن، آمارها به صورت یک‌باره چاپ می‌شوند. روش دوم، مشخص نکردن دستور است که در این حالت turbostat آمار را در بازه‌های زمانی ۵ ثانیه‌ای نمایش می‌دهد. این بازه ۵ ثانیه‌ای را می‌توان با استفاده از گزینه --interval تغییر داد.

برخی اطلاعات در پردازنده‌های قدیمی‌تر در دسترس نیستند.

گزینه‌ها را می‌توان با یک یا دو خط تیره '-' مشخص کرد، و تنها درج مقداری از نام گزینه که برای تمایز آن از سایر گزینه‌ها لازم است، کافی خواهد بود. توجه داشته باشید که گزینه‌ها به بزرگ و کوچک بودن حروف حساس هستند.

--add attributes ستونی با شمارنده‌ای دارای «ویژگی‌های» (attributes) مشخص‌شده اضافه می‌کند. ویژگی 'location' الزامی است، سایر ویژگی‌ها اختیاری هستند.

location: {msrDDD | msr0xXXX | /sys/path... | perf/<device>/<event>}
	msrDDD یک آفست ده‌دهی است، مانند msr16
	msr0xXXX یک آفست مبنای ۱۶ (hex) است، مانند msr0x10
	/sys/path... یک مسیر مطلق به یک ویژگی در sysfs است
	<device> یک دستگاه perf از مسیر /sys/bus/event_source/devices/<device> است، مانند cstate_core
		در پلتفرم‌های هیبریدی اینتل، به جای یک دستگاه perf با نام "cpu"، دو دستگاه "cpu_core" و "cpu_atom" به ترتیب برای هسته‌های P و E وجود دارند.
		در این حالت، Turbostat به کاربر اجازه می‌دهد از دستگاه "cpu" استفاده کند و به طور خودکار نوع پردازنده را تشخیص داده و آن را به تناسب به "cpu_core" و "cpu_atom" ترجمه می‌کند.
		برای یک مثال کامل بخش «مثال ۲ افزودن شمارنده PERF (با استفاده از دستگاه مجازی cpu)» را ببینید.
	<event> یک رویداد perf برای دستگاه مشخص‌شده از مسیر /sys/bus/event_source/devices/<device>/events/<event> است، مانند c1-residency
		سپس perf/cstate_core/c1-residency از مسیر /sys/bus/event_source/devices/cstate_core/events/c1-residency استفاده خواهد کرد
scope: {cpu | core | package}
	نمونه‌برداری و چاپ شمارنده برای هر پردازنده (cpu)، هسته (core) یا پکیج (package).
	پیش‌فرض: cpu
size: {u32 | u64 }
	ثبات‌های MSR به صورت ۶۴ بیتی خوانده می‌شوند، u32 مقدار نمایش‌داده‌شده را به ۳۲ بیت کوتاه می‌کند.
	پیش‌فرض: u64
format: {raw | delta | percent | average}
	مقدار 'raw' محتویات MSR را در مبنای ۱۶ نشان می‌دهد.
	مقدار 'delta' تفاوت مقادیر در طول بازه اندازه‌گیری را نشان می‌دهد.
	مقدار 'percent' مقدار دلتا را به عنوان درصدی از چرخه‌های سپری‌شده نشان می‌دهد.
	مقدار 'average' شبیه به raw است، اما برای خلاصه‌های گره/پکیج (یا هنگام استفاده از -S) میانگین‌گیری نیز می‌شود.
	پیش‌فرض: delta
name: "name_string"
	هر رشته‌ای که با کلمات کلیدی بالا مطابقت نداشته باشد، به عنوان
	سربرگ ستون استفاده می‌شود.

--add pmt,[attr_name=attr_value, ...] ستونی با یک شمارنده PMT (فناوری پایش پلتفرم اینتل - Intel Platform Monitoring Technology) به روشی مشابه با گزینه --add در بالا اضافه می‌کند، اما برای خواندن و نمایش صحیح شمارنده نیازمند ارائه متادیتای PMT است. این متادیتا را می‌توان در فایل‌های XML اینتل PMT یافت که در نشانی https://github.com/intel/Intel-PMT میزبانی می‌شود. برای یک مثال کامل بخش «مثال افزودن شمارنده PMT» را ببینید.

name="name_string"
	برای سربرگ ستون.
type={raw}
	مقدار 'raw' محتویات شمارنده را در مبنای ۱۶ نشان می‌دهد.
	پیش‌فرض: raw
format={raw | delta}
	مقدار 'raw' محتویات شمارنده را در مبنای ۱۶ نشان می‌دهد.
	مقدار 'delta' تفاوت مقادیر در طول بازه اندازه‌گیری را نشان می‌دهد.
	پیش‌فرض: raw
domain={cpu%u | core%u | package%u}
	مقدار 'cpu' برای شمارنده به ازای هر پردازنده/ریسه.
	مقدار 'core' برای شمارنده به ازای هر هسته.
	مقدار 'package' برای شمارنده به ازای هر پکیج.
	عبارت '%u' نشان‌دهنده شناسه دامنه‌ای است که شمارنده با آن مرتبط است. برای مثال core4 یعنی شمارنده با هسته شماره ۴ مرتبط است.
offset=%u
	مقدار '%u' آفست در ناحیه MMIO مربوط به PMT.
lsb=%u
	مقدار '%u' کم‌ارزش‌ترین بیت در مقدار ۶۴ بیتی خوانده‌شده از 'offset'. به همراه 'msb' برای تشکیل ماسک خواندن استفاده می‌شود.
msb=%u
	مقدار '%u' باارزش‌ترین بیت در مقدار ۶۴ بیتی خوانده‌شده از 'offset'. به همراه 'lsb' برای تشکیل ماسک خواندن استفاده می‌شود.
guid=%x
	مقدار '%x' شناسه هگزادسیمال ناحیه MMIO مربوط به PMT.

--cpu cpu-set خروجی را به خلاصه کل سیستم به همراه مجموعه پردازنده‌های مشخص‌شده (cpu-set) محدود می‌کند. اگر cpu-set رشته "core" باشد، خلاصه سیستم به همراه نخستین پردازنده در هر هسته چاپ می‌شود -- برای مثال پردازنده‌های هم‌نیای بعدی HT چاپ نمی‌شوند. یا اگر cpu-set رشته "package" باشد، خلاصه سیستم به علاوه نخستین پردازنده در هر پکیج چاپ می‌شود. در غیر این صورت، خلاصه سیستم به همراه مجموعه مشخص‌شده از پردازنده‌ها چاپ می‌شود. ترتیب cpu-set از کم به زیاد است، با کاما از هم جدا شده و استفاده از ".." و "-" برای تعیین محدوده مجاز است؛ مانند: 1,2,8,14..17,21-44

--hide column ستون‌های توکار مشخص‌شده را نمایش نمی‌دهد. می‌تواند چندین بار یا با فهرستی از نام‌های ستون جداشده با کاما فراخوانی شود.

--enable column ستون‌های توکار مشخص‌شده را نمایش می‌دهد که در غیر این صورت به طور پیش‌فرض غیرفعال هستند. در حال حاضر تنها شمارنده‌های توکار غیرفعال به طور پیش‌فرض عبارتند از "usec"، "Time_Of_Day_Seconds"، "APIC" و "X2APIC". نام ستون "all" می‌تواند برای فعال کردن تمام شمارنده‌های توکار که به طور پیش‌فرض غیرفعال هستند به کار رود.

--show column فقط ستون‌های توکار مشخص‌شده را نمایش می‌دهد. می‌تواند چندین بار یا با فهرستی از نام‌های ستون جداشده با کاما فراخوانی شود.

--show CATEGORY --hide CATEGORY گزینه‌های show و hide همچنین فهرستی از دسته‌های (CATEGORIES) ستون‌ها را به صورت جداشده با کاما می‌پذیرند: "all"، "topology"، "idle"، "frequency"، "power"، "cpuidle"، "hwidle"، "swidle"، "cache"، "llc"، "other". دسته "idle" (به طور پیش‌فرض فعال)، شامل "hwidle" و "pct_idle" است. دسته "cpuidle" (به طور پیش‌فرض غیرفعال) شامل شمارنده‌های فراخوانی نرم‌افزاری cpuidle است. دسته "swidle" شامل "cpuidle" به همراه "pct_idle" است. دسته "hwidle" فقط شامل شمارنده‌های ماندگاری در حالت بیکاری مبتنی بر سخت‌افزار است. نسخه‌های قدیمی‌تر turbostat از اصطلاح "sysfs" برای آنچه اکنون "swidle" نامیده می‌شود استفاده می‌کردند.

--Dump مقادیر خام شمارنده‌ها را نمایش می‌دهد.

--quiet اطلاعات سربرگ پیکربندی سیستم را رمزگشایی و چاپ نمی‌کند.

--no-msr تمام استفاده‌ها از درایور MSR را غیرفعال می‌کند.

--no-perf تمام استفاده‌ها از رابط برنامه‌نویسی کاربردی (API) مربوط به perf را غیرفعال می‌کند.

--force اجرای turbostat را روی یک پلتفرم پشتیبانی‌نشده اجبار می‌کند (با حداقل مقادیر پیش‌فرض).

--interval seconds بازه زمانی اندازه‌گیری پیش‌فرض ۵٫۰ ثانیه‌ای را بازنویسی می‌کند.

--num_iterations num تعداد تکرارهای اندازه‌گیری.

--header_iterations num چاپ سربرگ در هر num تکرار.

--out output_file خروجی turbostat در output_file مشخص‌شده نوشته می‌شود. اگر فایل از قبل وجود داشته باشد بریده (truncate) می‌شود و اگر وجود نداشته باشد ایجاد می‌گردد.

--help نحوه استفاده برای رایج‌ترین پارامترها را نمایش می‌دهد.

--Joules انرژی را به ژول نمایش می‌دهد، به جای تقسیم ژول بر زمان برای چاپ توان بر حسب وات.

--list نام‌های سربرگ ستون‌های موجود برای استفاده توسط --show و --hide را نمایش می‌دهد و سپس خارج می‌شود.

--Summary خروجی را به یک خط خلاصه سیستم برای هر بازه محدود می‌کند.

--TCC temperature دمای مدار کنترل حرارتی (Thermal Control Circuit) را برای سیستم‌هایی که این مقدار را صادر نمی‌کنند تنظیم می‌کند. این گزینه برای معنادار کردن خروجی‌های حسگر حرارتی دیجیتال (Digital Thermal Sensor) استفاده می‌شود، زیرا آنها درجه سلسیوس پایین‌تر از دمای فعال‌سازی TCC را برمی‌گردانند.

--version نسخه برنامه را نمایش می‌دهد.

پارامتر دستور (command)، دستور داده‌شده را منشعب کرده (fork) و پس از خروج آن، آمارهای گردآوری‌شده از زمان انشعاب آن را نمایش می‌دهد.

پس از خروجی پیکربندی سیستم (در صورتی که از --quiet استفاده نشده باشد)، آمارها قرار می‌گیرند. اولین سطر از آمارها، محتوای هر ستون را برچسب‌گذاری می‌کند (در زیر). سطر دوم آمارها، خط خلاصه سیستم است. خط خلاصه سیستم در ستون‌های Package، Core و CPU یک علامت '-' دارد. محتوای خط خلاصه سیستم به نوع ستون بستگی دارد. ستون‌هایی که موارد را می‌شمارند (مانند IRQ) مجموع تمام پردازنده‌های سیستم را نشان می‌دهند. ستون‌هایی که درصد را نشان می‌دهند، میانگین تمام پردازنده‌های سیستم را نشان می‌دهند. ستون‌هایی که مقادیر خام MSR را تخلیه می‌کنند، در خلاصه به سادگی 0 را نشان می‌دهند. پس از سطر خلاصه سیستم، هر سطر یک Package/Core/CPU مشخص را توصیف می‌کند. توجه داشته باشید که اگر از پارامتر --cpu برای محدود کردن پردازنده‌های نمایش‌داده‌شده استفاده شود، turbostat همچنان آمار تمام پردازنده‌های سیستم را جمع‌آوری خواهد کرد و همچنان خلاصه سیستم را برای تمام پردازنده‌های سیستم نشان می‌دهد.

usec برای هر پردازنده، تعداد میکروثانیه‌های سپری‌شده در طول جمع‌آوری شمارنده‌ها، از جمله مهاجرت ریسه (thread migration) -- در صورت وجود. این شمارنده به طور پیش‌فرض غیرفعال است و با "--enable usec"; یا --debug فعال می‌شود. در سطر خلاصه، usec به کل زمان سپری‌شده برای ثبت تصویر لحظه‌ای (snapshot) از procfs/sysfs و جمع‌آوری شمارنده‌ها در تمام پردازنده‌ها اشاره دارد.

Time_Of_Day_Seconds برای هر پردازنده، مقدار gettimeofday(2) (ثانیه.کسر‌ثانیه از مبدأ زمان Epoch) در هنگام جمع‌آوری شمارنده‌های پایان‌بخش بازه اندازه‌گیری. این ستون به طور پیش‌فرض غیرفعال است و می‌تواند با "--enable Time_Of_Day_Seconds"; یا "--debug" فعال شود. در سطر خلاصه، Time_Of_Day_Seconds به برچسب زمانی پس از جمع‌آوری شمارنده‌ها در آخرین پردازنده اشاره دارد.

Core شماره هسته پردازنده. توجه داشته باشید که وجود چندین پردازنده در هر هسته نشان‌دهنده پشتیبانی از فناوری چندریسمانی همزمان اینتل (Intel Hyper-Threading Technology یا HT) است.

CPU شماره پردازنده لینوکس (پردازنده منطقی). بله، این طبیعی است که در بسیاری از سیستم‌ها پردازنده‌ها به ترتیب عددی فهرست نمی‌شوند -- به دلایل کارایی، turbostat به ترتیب ساختار (topology) اجرا می‌شود، بنابراین هم‌نیای‌های HT در کنار یکدیگر ظاهر می‌شوند.

Package شماره پکیج پردازنده -- در سیستم‌هایی با یک پکیج پردازنده منفرد وجود ندارد.

Avg_MHz تعداد چرخه‌های اجرا شده تقسیم بر زمان سپری‌شده. توجه داشته باشید که این مقدار شامل زمان بیکاری (زمانی که ۰ دستورالعمل اجرا می‌شود) نیز هست.

Busy% درصد زمانی از بازه اندازه‌گیری که پردازنده در حال اجرای دستورالعمل‌ها است، یا به عبارت دیگر درصد زمان حضور در وضعیت "C0".

Bzy_MHz میانگین آهنگ کلاک زمانی که پردازنده بیکار نبوده است (یعنی در وضعیت "c0").

TSC_MHz میانگین مگاهرتزی که شمارنده مهر زمانی (TSC) در کل بازه کار کرده است.

IRQ تعداد وقفه‌های پاسخ‌داده‌شده توسط آن پردازنده در طول بازه اندازه‌گیری. سطر مجموع سیستم، جمع وقفه‌های ارائه‌شده در تمام پردازنده‌ها است. turbostat برای تولید این خلاصه، فایل /proc/interrupts را تجزیه می‌کند.

SMI تعداد وقفه‌های مدیریت سیستم (System Management Interrupts) پاسخ‌داده‌شده توسط پردازنده در طول بازه اندازه‌گیری. در حالی که این شمارنده در عمل به ازای هر پردازنده است، وقفه‌های SMI روی تمام پردازنده‌ها برانگیخته می‌شوند، بنابراین این عدد باید برای تمام پردازنده‌ها یکسان باشد.

LLCMRPS میلیون‌ها مراجعه در ثانیه به حافظه نهان سطح آخر (Last Level Cache Millions of References Per Second). برای پردازنده‌هایی با LLC سطح ۳ (L3)، این مقدار تعداد مراجعات آن پردازنده به L3 (و تعداد عدم‌اصابت‌های آن پردازنده به L2 خود) است. برای پردازنده‌هایی با LLC سطح ۲ (L2)، این مقدار تعداد مراجعات به L2 (و تعداد عدم‌اصابت‌ها به L1 پردازنده) است. سطر خلاصه سیستم مجموع را برای تمام پردازنده‌ها نشان می‌دهد. در هر دو حالت، مقدار نمایش‌داده‌شده برابر با مقدار واقعی تقسیم بر ۱٬۰۰۰٬۰۰۰ است. اگر این مقدار بزرگ باشد، ستون LLC%hit بااهمیت است. اگر این مقدار کوچک باشد، ستون LLC%hit اهمیت چندانی ندارد.

LLC%hit درصد نرخ اصابت به حافظه نهان سطح آخر. درصد نرخ اصابت = 100.0 * Hits/References. سطر خلاصه سیستم میانگین وزنی را برای تمام پردازنده‌ها نشان می‌دهد (100.0 * Sum_Hits/Sum_References).

L2MRPS میلیون‌ها مراجعه در ثانیه به حافظه نهان سطح ۲ (Level-2 Cache Millions of References Per Second). برای پردازنده‌هایی با LLC سطح ۲، این مقدار همان مراجعات LLC است. سطر خلاصه سیستم مجموع را برای تمام پردازنده‌ها نشان می‌دهد. در هر دو حالت، مقدار نمایش‌داده‌شده برابر با مقدار واقعی تقسیم بر ۱٬۰۰۰٬۰۰۰ است. اگر این مقدار بزرگ باشد، ستون L2%hit بااهمیت است. اگر این مقدار کوچک باشد، ستون L2%hit اهمیت چندانی ندارد.

L2%hit درصد نرخ اصابت به حافظه نهان سطح ۲. درصد نرخ اصابت = 100.0 * Hits/References. سطر خلاصه سیستم میانگین وزنی را برای تمام پردازنده‌ها نشان می‌دهد (100.0 * (Sum_Hits)/Sum_References).

C1, C2, C3... تعداد دفعاتی که لینوکس وضعیت‌های بیکاری C1، C2، C3 را در طول بازه اندازه‌گیری درخواست کرده است. سطر خلاصه سیستم، مجموع را برای تمام پردازنده‌ها نشان می‌دهد. این‌ها نام‌های C-state هستند که در مسیر /sys/devices/system/cpu/cpu*/cpuidle/state*/name صادر شده‌اند. با اینکه نام‌های آن‌ها عمومی است، ویژگی‌هایشان وابسته به پردازنده است. بخش توضیحات سیستم در خروجی نشان می‌دهد که آنها در هر سیستم به چه زیروضعیت‌های MWAIT نگاشت شده‌اند. این شمارنده‌ها در گروه "cpuidle" قرار دارند که به طور پیش‌فرض غیرفعال است.

C1+, C2+, C3+... آمار پیش‌بینی نادرست وضعیت بیکاری توسط تنظیم‌کننده بیکاری (idle governor). نشان‌دهنده تعداد دفعاتی است که لینوکس وضعیت بیکاری C1، C2، C3 را در طول بازه اندازه‌گیری درخواست کرده است، اما باید وضعیت بیکاری عمیق‌تری را درخواست می‌کرد (در صورتی که وجود داشته و فعال بوده باشد). این آمارها از فایل /sys/devices/system/cpu/cpu*/cpuidle/state*/below می‌آیند. این شمارنده‌ها در گروه "cpuidle" قرار دارند که به طور پیش‌فرض غیرفعال است.

C1-, C2-, C3-... آمار پیش‌بینی نادرست وضعیت بیکاری توسط تنظیم‌کننده بیکاری (idle governor). نشان‌دهنده تعداد دفعاتی است که لینوکس وضعیت بیکاری C1، C2، C3 را در طول بازه اندازه‌گیری درخواست کرده است، اما باید وضعیت بیکاری سطحی‌تری را درخواست می‌کرد (در صورتی که وجود داشته و فعال بوده باشد). این آمارها از فایل /sys/devices/system/cpu/cpu*/cpuidle/state*/above می‌آیند. این شمارنده‌ها در گروه "cpuidle" قرار دارند که به طور پیش‌فرض غیرفعال است.

C1%, C2%, C3% درصد ماندگاری که لینوکس برای C1، C2، C3... درخواست کرده است. خلاصه سیستم میانگین تمام پردازنده‌ها در سیستم است. توجه داشته باشید که این‌ها مقادیر نرم‌افزاری هستند و نشان‌دهنده آنچه درخواست شده است می‌باشند. شمارنده‌های سخت‌افزاری نشان‌دهنده آنچه در عمل حاصل شده است هستند. این شمارنده‌ها در گروه "pct_idle" قرار دارند که به طور پیش‌فرض فعال است.

CPU%c1, CPU%c3, CPU%c6, CPU%c7 درصد ماندگاری در وضعیت‌های بیکاری سخت‌افزاری هسته را نشان می‌دهند. این اعداد از شمارنده‌های ماندگاری سخت‌افزاری به دست می‌آیند و در گروه "hwidle" قرار دارند که به طور پیش‌فرض فعال است.

CoreTmp درجه سلسیوس گزارش‌شده توسط حسگر حرارتی دیجیتال (DTS) به ازای هر هسته.

PkgTmp درجه سلسیوس گزارش‌شده توسط پایشگر حرارتی پکیج (Package Thermal Monitor) به ازای هر پکیج.

CoreThr رویدادهای گلوگاه حرارتی هسته (Core Thermal Throttling) در طول بازه اندازه‌گیری. توجه داشته باشید که رویدادها از زمان بوت در مسیر /sys/devices/system/cpu/cpu*/thermal_throttle/* قابل مشاهده هستند.

GFX%rc6 درصد زمانی که پردازنده گرافیکی (GPU) در طول بازه اندازه‌گیری در وضعیت "render C6" (یا rc6) قرار دارد. بسته به درایور گرافیک مورد استفاده، از مسیرهای /sys/class/drm/card0/power/rc6_residency_ms یا /sys/class/drm/card0/gt/gt0/rc6_residency_ms یا /sys/class/drm/card0/device/tile0/gtN/gtidle/idle_residency_ms خوانده می‌شود.

GFXMHz تصویر لحظه‌ای از آنچه sysfs در پایان بازه اندازه‌گیری ارائه می‌دهد. بسته به درایور گرافیک مورد استفاده، از مسیرهای /sys/class/graphics/fb0/device/drm/card0/gt_cur_freq_mhz یا /sys/class/drm/card0/gt_cur_freq_mhz یا /sys/class/drm/card0/gt/gt0/rps_cur_freq_mhz یا /sys/class/drm/card0/device/tile0/gtN/freq0/cur_freq خوانده می‌شود.

GFXAMHz تصویر لحظه‌ای از آنچه sysfs در پایان بازه اندازه‌گیری ارائه می‌دهد. بسته به درایور گرافیک مورد استفاده، از مسیرهای /sys/class/graphics/fb0/device/drm/card0/gt_act_freq_mhz یا /sys/class/drm/card0/gt_act_freq_mhz یا /sys/class/drm/card0/gt/gt0/rps_act_freq_mhz یا /sys/class/drm/card0/device/tile0/gtN/freq0/act_freq خوانده می‌شود.

SAM%mc6 درصد زمانی که بخش SA Media در طول بازه اندازه‌گیری در وضعیت "module C6" (یا mc6) قرار دارد. بسته به درایور گرافیک مورد استفاده، از مسیرهای /sys/class/drm/card0/gt/gt1/rc6_residency_ms یا /sys/class/drm/card0/device/tile0/gtN/gtidle/idle_residency_ms خوانده می‌شود.

SAMMHz تصویر لحظه‌ای از آنچه sysfs در پایان بازه اندازه‌گیری ارائه می‌دهد. بسته به درایور گرافیک مورد استفاده، از مسیرهای /sys/class/drm/card0/gt/gt1/rps_cur_freq_mhz یا /sys/class/drm/card0/device/tile0/gtN/freq0/cur_freq خوانده می‌شود.

SAMAMHz تصویر لحظه‌ای از آنچه sysfs در پایان بازه اندازه‌گیری ارائه می‌دهد. بسته به درایور گرافیک مورد استفاده، از مسیرهای /sys/class/drm/card0/gt/gt1/rps_act_freq_mhz یا /sys/class/drm/card0/device/tile0/gtN/freq0/act_freq خوانده می‌شود.

Totl%C0 درصد وزنی زمانی که پردازنده‌ها مشغول هستند. اگر N پردازنده در طول یک بازه مشغول باشند، این درصد برابر با N * 100% خواهد بود.

Any%C0 درصد زمانی که دست‌کم یک پردازنده مشغول است.

GFX%C0 درصد زمانی که دست‌کم یک موتور محاسباتی گرافیکی (GFX compute engine) مشغول است.

CPUGFX% درصد زمانی که دست‌کم یک پردازنده به طور همزمان با دست‌کم یک موتور محاسباتی گرافیکی مشغول است.

Pkg%pc2, Pkg%pc3, Pkg%pc6, Pkg%pc7 درصد ماندگاری در وضعیت‌های بیکاری سخت‌افزاری پکیج. این اعداد از شمارنده‌های ماندگاری سخت‌افزاری به دست می‌آیند.

PkgWatt توان مصرفی کل پکیج بر حسب وات.

CorWatt توان مصرفی بخش هسته‌های پکیج بر حسب وات.

GFXWatt توان مصرفی بخش گرافیک پکیج بر حسب وات -- فقط روی پردازنده‌های کلاینت در دسترس است.

RAMWatt توان مصرفی ماژول‌های DRAM DIMM بر حسب وات -- فقط روی پردازنده‌های سرور در دسترس است.

SysWatt توان مصرفی کل پلتفرم بر حسب وات (RAPL PSYS).

PKG_% درصد زمانی از بازه که گلوگاه‌سازی (throttling) فناوری RAPL روی پکیج فعال بوده است. توجه داشته باشید که خلاصه سیستم مجموع زمان‌های گلوگاه پکیج‌ها است، بنابراین در یک سیستم چندپکیجی ممکن است بالاتر از 100% باشد. همچنین توجه داشته باشید که مفهوم این فیلد وابسته به مدل سخت‌افزار است. برای مثال، برخی سخت‌افزارها هنگام پاسخگویی RAPL به محدودیت‌های حرارتی این شمارنده را افزایش می‌دهند، اما هنگام پاسخگویی به محدودیت‌های توان آن را افزایش نمی‌دهند. مقایسه PkgWatt و PkgTmp با محدودیت‌های سیستم ضروری است.

RAM_% درصد زمانی از بازه که گلوگاه‌سازی RAPL روی DRAM فعال بوده است.

UncMHz مگاهرتز بخش uncore به ازای هر پکیج، نمونه‌برداری لحظه‌ای.

UMHz1.0 مگاهرتز بخش uncore به ازای هر پکیج برای pm_domain=1 و fabric_cluster=0، نمونه‌برداری لحظه‌ای. خلاصه سیستم میانگین تمام پکیج‌ها است. سیستم‌های Intel Granite Rapids از دامنه‌های pm_domain شماره ۰ تا ۲ برای پردازنده‌ها و ۳ تا ۴ برای IO استفاده می‌کنند که cluster همیشه ۰ است. برای گزینه‌های "--show" و "--hide"، از "UncMHz" برای اعمال روی تمام UMHz*.* به صورت یک گروه استفاده کنید.

به طور پیش‌فرض، turbostat تمام اطلاعات ممکن را نمایش می‌دهد -- یک سربرگ پیکربندی سیستم که به دنبال آن ستون‌های تمام شمارنده‌ها می‌آیند. این حالت برای اشکال‌زدایی از راه دور ایده‌آل است؛ از گزینه "--out" برای ذخیره همه چیز در یک فایل متنی استفاده کنید و آن فایل را در اختیار کارشناسی که به شما در اشکال‌زدایی کمک می‌کند قرار دهید.

هنگامی که به تمام این اطلاعات علاقه‌مند نیستید، روش‌های متعددی برای مشاهده تنها موارد مورد نظرتان وجود دارد. نخست، گزینه "--quiet" از اطلاعات پیکربندی صرف‌نظر می‌کند و turbostat تنها ستون‌های شمارنده را نشان می‌دهد. دوم، می‌توانید ستون‌ها را با گزینه‌های "--hide" و "--show" کاهش دهید. اگر از گزینه "--show" استفاده کنید، turbostat تنها ستون‌هایی را که فهرست کرده‌اید نشان می‌دهد. اگر از گزینه "--hide" استفاده کنید، turbostat تمام ستون‌ها را به جز مواردی که فهرست کرده‌اید نشان خواهد داد.

برای آگاهی از اینکه چه ستون‌هایی برای --show و --hide در دسترس هستند، گزینه "--list" در دسترس است. معمولاً از نام‌های دسته‌بندی (CATEGORY) ذکرشده در بالا برای ارجاع به گروه‌هایی از شمارنده‌ها استفاده می‌شود. همچنین برای راحتی کار، می‌توان از رشته ویژه "sysfs" برای ارجاع یک‌باره به تمام شمارنده‌های C-state در sysfs استفاده کرد:

sudo ./turbostat --show sysfs --quiet sleep 10
10.003837 sec
	C1	C1E	C3	C6	C7s	C1%	C1E%	C3%	C6%	C7s%
	4	21	2	2	459	0.14	0.82	0.00	0.00	98.93
	1	17	2	2	130	0.00	0.02	0.00	0.00	99.80
	0	0	0	0	31	0.00	0.00	0.00	0.00	99.95
	2	1	0	0	52	1.14	6.49	0.00	0.00	92.21
	1	2	0	0	52	0.00	0.08	0.00	0.00	99.86
	0	0	0	0	71	0.00	0.00	0.00	0.00	99.89
	0	0	0	0	25	0.00	0.00	0.00	0.00	99.96
	0	0	0	0	74	0.00	0.00	0.00	0.00	99.94
	0	1	0	0	24	0.00	0.00	0.00	0.00	99.84

اگر turbostat همراه با یک دستور فراخوانی شود، آن دستور را منشعب (fork) کرده و آمارهای گردآوری‌شده را پس از خروج دستور نمایش می‌دهد. در این حالت، خروجی turbostat به طور پیش‌فرض به خروجی خطای استاندارد (stderr) ارسال می‌شود. در عوض می‌توان خروجی را با استفاده از گزینه --out در یک فایل ذخیره کرد. در این مثال، دستور "sleep 10" منشعب شده و turbostat پیش از ذخیره تمام آمارها در "ts.out"، منتظر اتمام آن می‌ماند. توجه داشته باشید که "sleep 10" بخشی از turbostat نیست، بلکه صرفاً نمونه‌ای از دستوری است که turbostat می‌تواند منشعب کند. فایل "ts.out" همان فایلی است که می‌توانید آن را در یک پنجره بسیار عریض ویرایش کنید، در یک صفحه گسترده قرار دهید یا به یک گزارش در bugzilla ضمیمه نمایید.

[root@hsw]# ./turbostat -o ts.out sleep 10
[root@hsw]#

بدون وجود دستوری برای انشعاب، turbostat آمارها را هر ۵ ثانیه یک‌بار نمایش می‌دهد. خروجی دوره‌ای به طور پیش‌فرض به خروجی استاندارد (stdout) ارسال می‌شود، مگر اینکه از --out برای تعیین فایل خروجی استفاده شود. بازه ۵ ثانیه‌ای را می‌توان با گزینه "-i sec"; تغییر داد.

sudo turbostat --quiet --show CPU,frequency
	Core	CPU	Avg_MHz	Busy%	Bzy_MHz	TSC_MHz	CPU%c7	UncMhz
	-	-	524	12.48	4198	3096	74.53	3800
	0	0	4	0.09	4081	3096	98.88	3800
	0	4	1	0.02	4063	3096
	1	1	2	0.06	4063	3096	99.60
	1	5	2	0.05	4070	3096
	2	2	4178	99.52	4199	3096	0.00
	2	6	3	0.08	4159	3096
	3	3	1	0.04	4046	3096	99.66
	3	7	0	0.01	3989	3096
	Core	CPU	Avg_MHz	Busy%	Bzy_MHz	TSC_MHz	CPU%c7	UncMhz
	-	-	525	12.52	4198	3096	74.54	3800
	0	0	4	0.10	4051	3096	99.49	3800
	0	4	2	0.04	3993	3096
	1	1	3	0.07	4054	3096	99.56
	1	5	4	0.10	4018	3096
	2	2	4178	99.51	4199	3096	0.00
	2	6	4	0.09	4143	3096
	3	3	2	0.06	4026	3096	99.10
	3	7	7	0.17	4074	3096

این مثال همچنین استفاده از گزینه --show را برای نمایش تنها ستون‌های مورد نظر نشان می‌دهد.

به طور پیش‌فرض، turbostat همواره پیش از شروع اندازه‌گیری‌ها، اطلاعات پیکربندی سیستم را تخلیه (dump) می‌کند. در مثال بالا، از "--quiet" برای جلوگیری از نمایش این خروجی استفاده شده است. در اینجا نمونه‌ای از اطلاعات پیکربندی آورده شده است:

turbostat version 2022.04.16 - Len Brown <lenb@kernel.org>
Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.18.0-rc6-00001-ge6891250e3b5 ...
CPUID(0): GenuineIntel 0x16 CPUID levels
CPUID(1): family:model:stepping 0x6:9e:9 (6:158:9) microcode 0xea
CPUID(0x80000000): max_extended_levels: 0x80000008
CPUID(1): SSE3 MONITOR - EIST TM2 TSC MSR ACPI-TM HT TM
CPUID(6): APERF, TURBO, DTS, PTM, HWP, HWPnotify, HWPwindow, HWPepp, No-HWPpkg, EPB
cpu7: MSR_IA32_MISC_ENABLE: 0x00850089 (TCC EIST MWAIT PREFETCH TURBO)
CPUID(7): SGX
cpu7: MSR_IA32_FEATURE_CONTROL: 0x00000005 (Locked )
CPUID(0x15): eax_crystal: 2 ebx_tsc: 258 ecx_crystal_hz: 0
TSC: 3096 MHz (24000000 Hz * 258 / 2 / 1000000)
CPUID(0x16): base_mhz: 3100 max_mhz: 4200 bus_mhz: 100
cpu7: MSR_MISC_PWR_MGMT: 0x00401cc0 (ENable-EIST_Coordination DISable-EPB DISable-OOB)
RAPL: 5825 sec. Joule Counter Range, at 45 Watts
cpu7: MSR_PLATFORM_INFO: 0x80839f1011f00
8 * 100.0 = 800.0 MHz max efficiency frequency
31 * 100.0 = 3100.0 MHz base frequency
cpu7: MSR_IA32_POWER_CTL: 0x002c005d (C1E auto-promotion: DISabled)
cpu7: MSR_TURBO_RATIO_LIMIT: 0x2728292a
39 * 100.0 = 3900.0 MHz max turbo 4 active cores
40 * 100.0 = 4000.0 MHz max turbo 3 active cores
41 * 100.0 = 4100.0 MHz max turbo 2 active cores
42 * 100.0 = 4200.0 MHz max turbo 1 active cores
cpu7: MSR_CONFIG_TDP_NOMINAL: 0x0000001f (base_ratio=31)
cpu7: MSR_CONFIG_TDP_LEVEL_1: 0x00000000 ()
cpu7: MSR_CONFIG_TDP_LEVEL_2: 0x00000000 ()
cpu7: MSR_CONFIG_TDP_CONTROL: 0x80000000 ( lock=1)
cpu7: MSR_TURBO_ACTIVATION_RATIO: 0x00000000 (MAX_NON_TURBO_RATIO=0 lock=0)
cpu7: MSR_PKG_CST_CONFIG_CONTROL: 0x1e008008 (UNdemote-C3, UNdemote-C1, demote-C3, demote-C1, locked, pkg-cstate-limit=8 (unlimited))
Uncore Frequency pkg0 die0: 800 - 3900 MHz (800 - 3900 MHz)
/dev/cpu_dma_latency: 2000000000 usec (default)
current_driver: intel_idle
current_governor: menu
current_governor_ro: menu
cpu7: POLL: CPUIDLE CORE POLL IDLE
cpu7: C1: MWAIT 0x00
cpu7: C1E: MWAIT 0x01
cpu7: C3: MWAIT 0x10
cpu7: C6: MWAIT 0x20
cpu7: C7s: MWAIT 0x33
cpu7: C8: MWAIT 0x40
cpu7: C9: MWAIT 0x50
cpu7: C10: MWAIT 0x60
cpu7: cpufreq driver: intel_pstate
cpu7: cpufreq governor: performance
cpufreq intel_pstate no_turbo: 0
cpu7: MSR_MISC_FEATURE_CONTROL: 0x00000000 (L2-Prefetch L2-Prefetch-pair L1-Prefetch L1-IP-Prefetch)
cpu0: MSR_PM_ENABLE: 0x00000001 (HWP)
cpu0: MSR_HWP_CAPABILITIES: 0x01101f53 (high 83 guar 31 eff 16 low 1)
cpu0: MSR_HWP_REQUEST: 0x00005353 (min 83 max 83 des 0 epp 0x0 window 0x0 pkg 0x0)
cpu0: MSR_HWP_INTERRUPT: 0x00000001 (EN_Guaranteed_Perf_Change, Dis_Excursion_Min)
cpu0: MSR_HWP_STATUS: 0x00000004 (No-Guaranteed_Perf_Change, No-Excursion_Min)
cpu0: EPB: 6 (balanced)
cpu0: MSR_RAPL_POWER_UNIT: 0x000a0e03 (0.125000 Watts, 0.000061 Joules, 0.000977 sec.)
cpu0: MSR_PKG_POWER_INFO: 0x00000168 (45 W TDP, RAPL 0 - 0 W, 0.000000 sec.)
cpu0: MSR_PKG_POWER_LIMIT: 0x42820800218208 (UNlocked)
cpu0: PKG Limit #1: ENabled (65.000 Watts, 64.000000 sec, clamp ENabled)
cpu0: PKG Limit #2: ENabled (65.000 Watts, 0.002441* sec, clamp DISabled)
cpu0: MSR_VR_CURRENT_CONFIG: 0x00000000
cpu0: PKG Limit #4: 0.000000 Watts (UNlocked)
cpu0: MSR_DRAM_POWER_LIMIT: 0x5400de00000000 (UNlocked)
cpu0: DRAM Limit: DISabled (0.000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_PP0_POLICY: 0
cpu0: MSR_PP0_POWER_LIMIT: 0x00000000 (UNlocked)
cpu0: Cores Limit: DISabled (0.000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_PP1_POLICY: 0
cpu0: MSR_PP1_POWER_LIMIT: 0x00000000 (UNlocked)
cpu0: GFX Limit: DISabled (0.000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_IA32_TEMPERATURE_TARGET: 0x00640000 (100 C) (100 default - 0 offset)
cpu0: MSR_IA32_PACKAGE_THERM_STATUS: 0x88200800 (68 C)
cpu0: MSR_IA32_PACKAGE_THERM_INTERRUPT: 0x00000003 (100 C, 100 C)
cpu7: MSR_PKGC3_IRTL: 0x0000884e (valid, 79872 ns)
cpu7: MSR_PKGC6_IRTL: 0x00008876 (valid, 120832 ns)
cpu7: MSR_PKGC7_IRTL: 0x00008894 (valid, 151552 ns)
cpu7: MSR_PKGC8_IRTL: 0x000088fa (valid, 256000 ns)
cpu7: MSR_PKGC9_IRTL: 0x0000894c (valid, 339968 ns)
cpu7: MSR_PKGC10_IRTL: 0x00008bf2 (valid, 1034240 ns)

بسامد حداکثر کارایی (max efficiency)، که با نام حالت بسامد پایین (Low Frequency Mode) نیز شناخته می‌شود، بسامدی است که در حداقل ولتاژ پکیج در دسترس است. بسامد TSC بسامد پایه پردازنده است -- این مقدار باید با رشته نام تجاری (brand string) در /proc/cpuinfo مطابقت داشته باشد. این بسامد پایه باید با داشتن توان و خنک‌سازی نامی، روی تمام پردازنده‌ها به طور نامحدود پایدار بماند. سطرهای باقیمانده نشان می‌دهند که چه حداکثر بسامد توربویی بسته به تعداد هسته‌های بیکار امکان‌پذیر است. توجه داشته باشید که تمام این اطلاعات روی تمام پردازنده‌ها در دسترس نیستند.

در اینجا نمایش turbostat را تنها به شماره CPU برای cpu0 تا cpu3 محدود می‌کنیم. ما شمارنده‌ای اضافه می‌کنیم که مقدار خام ۳۲ بیتی ثبات MSR 0x199 (MSR_IA32_PERF_CTL) را نشان می‌دهد، آن را با سربرگ ستون "PRF_CTRL" برچسب‌گذاری می‌کنیم و آن را تنها یک بار، پس از پایان یک خواب (sleep) ۰٫۱ ثانیه‌ای نمایش می‌دهیم.

sudo ./turbostat --quiet --cpu 0-3 --show CPU --add msr0x199,u32,raw,PRF_CTRL sleep .1
0.101604 sec
CPU	  PRF_CTRL
-	0x00000000
0	0x00000c00
1	0x00000800
2	0x00000a00
3	0x00000800

در اینجا نمایش turbostat را تنها به شماره CPU برای cpu0 تا cpu3 محدود می‌کنیم. ما شمارنده‌ای اضافه می‌کنیم که زمان سپری‌شده در وضعیت cstate هسته C1 را نشان می‌دهد، آن را با سربرگ ستون "pCPU%c1" برچسب‌گذاری می‌کنیم و تنها یک بار، پس از اتمام خواب ۰٫۱ ثانیه‌ای نمایش می‌دهیم. ما همچنین شمارنده توکار CPU%c1 را نشان می‌دهیم که باید مقادیر مشابهی را نشان دهد.

sudo ./turbostat --quiet --cpu 0-3 --show CPU,CPU%c1 --add perf/cstate_core/c1-residency,cpu,delta,percent,pCPU%c1 sleep .1
0.102448 sec
CPU     pCPU%c1 CPU%c1
-       34.89   34.89
0       45.99   45.99
1       45.94   45.94
2       23.83   23.83
3       23.84   23.84

در اینجا برنامه را روی یک پلتفرم هیبریدی Meteor Lake اجرا می‌کنیم. ما turbostat را محدود می‌کنیم تا خروجی را فقط برای cpu0 (هسته کارایی - pcore) و cpu4 (هسته کم‌مصرف - ecore) نشان دهد. ما شمارنده‌ای برای نمایش تعداد عدم‌اصابت‌های حافظه نهان L3 با استفاده از دستگاه مجازی "cpu" اضافه می‌کنیم و آن را با سربرگ ستون "VCMISS" برچسب می‌زنیم. ما شمارنده‌ای برای نمایش تعداد عدم‌اصابت‌های حافظه نهان L3 با استفاده از دستگاه مجازی "cpu_core" اضافه می‌کنیم و آن را با سربرگ ستون "PCMISS" برچسب می‌زنیم. این شمارنده روی هسته کم‌مصرف cpu4 با شکست مواجه می‌شود. ما شمارنده‌ای برای نمایش تعداد عدم‌اصابت‌های حافظه نهان L3 با استفاده از دستگاه مجازی "cpu_atom" اضافه می‌کنیم و آن را با سربرگ ستون "ECMISS" برچسب می‌زنیم. این شمارنده روی هسته کارایی cpu0 با شکست مواجه می‌شود. ما آن را تنها یک بار، پس از پایان خواب ۵ ثانیه‌ای نمایش می‌دهیم.

sudo ./turbostat --quiet --cpu 0,4 --show CPU --add perf/cpu/cache-misses,cpu,delta,VCMISS --add perf/cpu_core/cache-misses,cpu,delta,PCMISS --add perf/cpu_atom/cache-misses,cpu,delta,ECMISS sleep 5
turbostat: added_perf_counters_init_: perf/cpu_atom/cache-misses: failed to open counter on cpu0
turbostat: added_perf_counters_init_: perf/cpu_core/cache-misses: failed to open counter on cpu4
5.001207 sec
CPU	ECMISS		PCMISS		VCMISS
-	41586506	46291219	87877749
4	83173012	0		83173040
0	0		92582439	92582458

در اینجا ما turbostat را تنها به نمایش پردازنده شماره ۰ محدود می‌کنیم. ما دو شمارنده اضافه می‌کنیم که تعداد کلاک کریستال و میزان ماندگاری DC6 را نشان می‌دهند. تمام پارامترهای ارسال‌شده بر اساس متادیتای موجود در فایل‌های XML فناوری PMT هستند.

برای شمارش کلاک کریستال، ما آن را با سربرگ ستون "XTAL" برچسب‌گذاری می‌کنیم، نوع (type) آن را روی 'raw' تنظیم می‌کنیم تا تعداد تیک‌های کلاک را در مبنای ۱۶ بخواند، قالب (format) آن را روی 'delta' تنظیم می‌کنیم تا اختلاف تیک‌ها در طول بازه اندازه‌گیری نمایش داده شود، دامنه (domain) آن را روی 'package0' تنظیم می‌کنیم تا جمع‌آوری شده و به کل پکیج شماره ۰ نسبت داده شود، آفست (offset) را روی '0' تنظیم می‌کنیم که آفست شمارنده در ناحیه MMIO مربوط به PMT است، مقادیر lsb و msb را طوری تنظیم می‌کنیم که تمام ۶۴ بیت از مقدار ۶۴ بیتی خوانده‌شده را پوشش دهند، و در نهایت guid را روی '0x1a067102' قرار می‌دهیم که ناحیه MMIO مربوط به PMT را که 'offset' روی آن برای خواندن مقدار شمارنده اعمال می‌شود، مشخص می‌کند.

برای شمارنده ماندگاری DC6، ما آن را با سربرگ ستون "Die%c6" برچسب‌گذاری می‌کنیم، نوع آن را روی 'txtal_time' تنظیم می‌کنیم تا مقدار درصد ماندگاری به دست آید، قالب آن را روی 'delta' قرار می‌دهیم تا اختلاف تیک‌ها در طول بازه اندازه‌گیری نمایش داده شود، دامنه آن را روی 'package0' تنظیم می‌کنیم تا جمع‌آوری شده و به کل پکیج شماره ۰ نسبت داده شود، آفست را روی '0' تنظیم می‌کنیم که آفست شمارنده در ناحیه MMIO مربوط به PMT است، مقادیر lsb و msb را طوری تنظیم می‌کنیم که تمام ۶۴ بیت از مقدار ۶۴ بیتی خوانده‌شده را پوشش دهند، و در نهایت guid را روی '0x1a067102' قرار می‌دهیم که ناحیه MMIO مربوط به PMT را که 'offset' روی آن برای خواندن مقدار شمارنده اعمال می‌شود، مشخص می‌کند.

sudo ./turbostat --quiet --cpu 0 --show CPU --add pmt,name=XTAL,type=raw,format=delta,domain=package0,offset=0,lsb=0,msb=63,guid=0x1a067102 --add pmt,name=Die%c6,type=txtal_time,format=delta,domain=package0,offset=120,lsb=0,msb=63,guid=0x1a067102
0.104352 sec
CPU                   XTAL      Die%c6
-       0x0000006d4d957ca7      0.00
0       0x0000006d4d957ca7      0.00
0.102448 sec

در حالت بازه‌ای (interval-mode)، به محض دریافت یک کاراکتر خط جدید در ورودی استاندارد، turbostat بلافاصله به بازه جاری پایان می‌دهد. سپس turbostat بازه بعدی را آغاز خواهد کرد. فشردن Control-C یک سیگنال SIGINT به turbostat ارسال می‌کند که بلافاصله بدون هیچ‌گونه پردازش دیگری برنامه را لغو می‌کند.

سیگنال SIGINT حالت بازه‌ای را قطع خواهد کرد. داده‌های پایان بازه پیش از خروج turbostat جمع‌آوری و نمایش داده می‌شوند.

سیگنال SIGUSR1 به بازه جاری پایان می‌دهد، و داده‌های پایان بازه پیش از اینکه turbostat بازه جدیدی را آغاز کند، جمع‌آوری و نمایش داده می‌شوند.

دستور turbostat باید به عنوان کاربر ریشه (root) اجرا شود. همچنین، می‌توان به کاربران غیرریشه امکان داد تا turbostat را به این روش اجرا کنند:

# setcap cap_sys_admin,cap_sys_rawio,cap_sys_nice=+ep path/to/turbostat

# chmod +r /dev/cpu/*/msr

# chmod +r /dev/cpu_dma_latency

دستور turbostat شمارنده‌های سخت‌افزاری را می‌خواند، اما مقداری در آن‌ها نمی‌نویسد. بنابراین با سیستم‌عامل یا برنامه‌های دیگر، از جمله فراخوانی‌های چندگانه از خودش، تداخلی ایجاد نخواهد کرد.

دستور turbostat ممکن است روی لینوکس نسخه‌های 2.6.20 تا 2.6.29 عملکرد ضعیفی داشته باشد، زیرا درایور acpi-cpufreq در آن کرنل‌ها ثبات‌های MSR مربوط به APERF و MPERF را به صورت دوره‌ای پاک می‌کرد.

AVG_MHz = APERF_delta/measurement_interval. این مقدار تعداد واقعی چرخه‌های سپری‌شده تقسیم بر کل بازه نمونه‌برداری است -- شامل زمان بیکاری. توجه داشته باشید که این محاسبه در برابر سیستم‌هایی که فاقد TSC بی‌وقفه (non-stop TSC) هستند انعطاف‌پذیر است.

TSC_MHz = TSC_delta/measurement_interval. در سیستمی با TSC تغییرناپذیر (invariant TSC)، این مقدار ثابت خواهد بود و با مقدار بسامد پایه نشان‌داده‌شده در رشته نام تجاری در /proc/cpuinfo تطابق نزدیکی خواهد داشت. در سیستمی که TSC در حالت بیکاری متوقف می‌شود، مقدار TSC_MHz به پایین‌تر از بسامد پایه پردازنده کاهش می‌یابد.

Busy% = MPERF_delta/TSC_delta

Bzy_MHz = TSC_delta*APERF_delta/MPERF_delta/measurement_interval

توجه داشته باشید که این محاسبات به TSC_delta وابسته هستند، بنابراین در طول بازه‌هایی که TSC_MHz با بسامد پایه کار نمی‌کند، قابل اعتماد نیستند.

گردآوری داده‌های Turbostat اتمیک (atomic) نیست. بازه‌های اندازه‌گیری بسیار کوتاه (خیلی کمتر از ۱ ثانیه)، یا فعالیت‌های سیستمی که مانع اجرای سریع turbostat روی تمام پردازنده‌ها برای جمع‌آوری داده‌ها می‌شوند، منجر به نتایج متناقض خواهند شد.

ثبات‌های MSR مربوط به APERF و MPERF طوری تعریف شده‌اند که چرخه‌های متوقف‌نشده (non-halted) را بشمارند. اگرچه این موضوع توسط معماری تضمین نشده است، اما turbostat فرض می‌کند که آنها با نرخ TSC شمارش می‌کنند، که این امر در تمام پردازنده‌های آزمایش‌شده تا به امروز صادق است.

Volume 3B: System Programming Guide https://www.intel.com/products/processor/manuals

اگر turbostat اعلام کرد که پردازنده شما را شناسایی نمی‌کند، لطفاً جدیدترین نسخه را امتحان کنید.

جدیدترین نسخه turbostat نیازمند جدیدترین نسخه از هسته لینوکس نیست. با این حال، برخی قابلیت‌ها مانند شمارنده‌های perf(1) به پشتیبانی هسته نیاز دارند.

جدیدترین انتشار turbostat در درخت سورس بالادستی هسته لینوکس در دسترس است؛ مانند: "git pull https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git" و سپس اجرای دستور make در مسیر tools/power/x86/turbostat/.

توجه: دستور "make install" سیستم شما را به صورت دستی به‌روزرسانی می‌کند، اما به‌روزرسانی‌های بعدی توزیع ممکن است مجدداً نسخه turbostat شما را به یک نسخه قدیمی‌تر تنزل دهند. به همین دلیل، نصب دستی در مسیر /usr/local/bin احتمالاً همان چیزی است که به آن نیاز دارید.

توجه داشته باشید که turbostat/Makefile یک هدف "make snapshot" دارد که یک فایل tar ایجاد می‌کند که می‌تواند بدون نیاز به درخت محلی سورس هسته کامپایل شود.

اگر نسخه بالادستی به اندازه کافی جدید نیست، درخت توسعه را می‌توانید در اینجا بیابید: "git pull https://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux.git turbostat"

اگر درخت توسعه کار نکرد، لطفاً از طریق چت، یا از طریق ایمیل با ذکر کلمه "turbostat" در خط موضوع (Subject) با نویسنده تماس بگیرید.

یک باینری قدیمی turbostat ممکن است با استفاده از "--force" روی سخت‌افزار ناشناخته اجرا شود، اما نتایج به دست آمده پشتیبانی نمی‌شوند.

/sys/bus/event_source/devices/
/dev/cpu/*/msr
/sys/class/intel_pmt/
/sys/devices/system/cpu/

perf(1), msr(4), vmstat(8)

نوشته‌شده توسط Len Brown <len.brown@intel.com>