Як відключити підсистему perf в ядрі Linux?


15

Я виконую деякі орієнтири. Мій тест-бігун відстежує буфер dmesg між експериментами, шукаючи все, що може вплинути на продуктивність. Сьогодні це підкинуло:

[2015-08-17 10:20:14 Попередження] dmesg, схоже, змінився! Різниця наступна:
--- 2015-08-17 09:55:00
+++ 2015-08-17 10:20:14
@@ -825,3 +825,4 @@
 [3.802206] [drm] Увімкнення станів RC6: RC6 увімкнено, RC6p вимкнено, RC6pp вимкнено
 [7.900533] r8169 0000: 06: 00.0 eth0: з'єднатись
 [7.900541] IPv6: ADDRCONF (NETDEV_CHANGE): eth0: посилання стає готовим
+ [236832.221937] перерваність perf зайняло занадто довго (2504> 2500), знизивши kernel.perf_event_max_sample_rate до 50000

Після деяких пошуків я тепер знаю, що це стосується підсистеми профілювання ядра Linux під назвою "perf". Я не думаю, що нам це потрібно, тому я хотів би це взагалі відключити.

Шукаючи знову, я знаходжу, що sysctl perf_cpu_time_max_percentможе допомогти. Тут хтось пропонує вимкнути його, встановивши його на 0. Ознайомтесь із цим ще тут :

perf_cpu_time_max_percent:

Підкаже ядро, скільки часу процесора потрібно використовувати для обробки подій вибірки perf. Якщо підсистему perf буде повідомлено, що її зразки перевищують цю межу, вона знизить свою частоту вибірки, щоб спробувати зменшити її використання процесора.

Деякі зразки парфуму трапляються в НМІ. Якщо цих зразків несподівано зайняти занадто багато часу для виконання, НМІ можуть скластись один до одного стільки, що більше нічого не дозволено виконати.

0: відключити механізм. Не слідкуйте і не коригуйте частоту вибірки perf незалежно від того, скільки часу займає процесор.

1-100: спроба зменшити частоту вибірки перф до цього відсотка процесора. Примітка: ядро ​​обчислює "очікувану" довжину кожної вибіркової події. 100 тут означає 100% очікуваної довжини. Навіть якщо для цього встановлено значення 100, ви все одно можете побачити дроселювання зразка, якщо ця довжина буде перевищена. Встановіть 0, якщо вам по-справжньому байдуже, скільки споживається процесор.

Мені це звучить як 0 означає, що швидкість вибірки профілювання більше не перевіряється, але частота підсистеми залишається запущеною (?).

Чи може хтось пролити світло на те, як повністю відключити профілювання ядра за допомогою freq?

EDIT: Хтось запропонував спробувати створити ядро ​​без perf, але я не думаю, що це навіть можливо. Параметр, здається, не змінюється:

menuconfig

EDIT2: Після більшого читання я вирішив, що зможу встановити kernel.perf_event_max_sample_rateнуль. Тобто ніяких проб за секунду. Однак ви також не можете цього зробити ( джерело ):

фіксувати 02f98e3e36da106338b7c732fed516420fb20e2a
Автор: Кнут Петерсен 
Дата: Ср 25 вересня 14:29:37 2013 +0200

perf: Застосовуйте 1 як нижню межу для perf_event_max_sample_rate

EDIT 3: FWIW, perf_cpu_time_max_percentвстановлено на 25, що означає, що ядро ​​витрачало понад 25% свого часу на вибірку апаратних реєстрів часу. Це неприпустимо для машини порівняльного аналізу.

Зараз я впевнений, що встановлення perf_cpu_time_max_percentнуля лише погіршить ситуацію, оскільки ядро продовжує використовувати понад 25% свого часу для читання апаратних регістрів. Помилка призводить до коригування частоти вибірки, таким чином намагаючись переконатися, що ядро ​​відповідає квотові використання <25% свого часу в перф. 25% все ще занадто високий ІМХО.

Якщо я дійсно не можу відключити перф, можливо, найкращим компромісом було б встановити perf_event_max_sample_rate1.

EDIT4: Друг припустив, що я, можливо, неправильно трактував значення perf_cpu_time_max_percent, тому вищезазначені твердження можуть бути невірними. Значення 25 вказує на те, що ядро ​​використовувало більше 25% деякої довільної довжини, яку воно зарезервувало для обслуговування переривань perf.

EDIT5:

Як зазначається в коментарях, -*-проти варіанту perf говорить про те, що цю функцію нав'язує інша включена функція. Якщо я заглянув help, він говорить про те, які такі особливості:

допомогу

Я не думаю, що я можу перемогти тут. Булева формула selected byговорить

Якщо ви орієнтуєтесь на X86 або ...

Я щойно перевірив, чи дійсно націлювання на X86_64 дозволяє CONFIG_X86. Тож здається, що як тільки ви націлюєте на X86 або X86_64, ви отримуєте перф.

Тому я хотів би трохи змінити своє питання на:

Які параметри perf я можу використовувати, щоб мінімізувати час, витрачений ядром, в підпрограми perf?

Майте на увазі, що загальною метою є контроль джерел випадкових варіацій для проведення бенчмаркінгу. Якщо я не можу відключити perf, як я можу мінімізувати його вплив на орієнтири?


1
Ви повинні бути в змозі відключити perf на попередньому екрані.
Майкл Хемптон

1
Ви маєте на увазі "Профільна підтримка"? Якщо я відключу це, я все одно не можу зняти прапорець, зображений вище. Також якщо я вивчу .config, у мене є CONFIG_HAVE_PERF_EVENTS=yі CONFIG_PERF_EVENTS=y. Я не думаю, що це відключений перф.
Едд Барретт

2
Повідомлення є інформаційним. Ядро автоматично визначає швидкість вибірки, яку можна використовувати, не впливаючи на продуктивність системи, і записує її в журнал навіть тоді, коли perf не активний або навіть встановлений. Коли завантаження системи вище або є масштабування частоти, ви часто отримуватимете ці повідомлення.
Брайан

1
Символ -*-означає, що деяка підсистема залежить від модуля perf. Helpпоказує дерево залежностей, яке потрібно відключити, щоб змінити параметр на [*]або [M].
Руфо Ель Магуфо

4
Я переглянув питання, щоб врахувати це. Коротше кажучи, парфуми, здається, є обов'язковими для X86_64.
Едд Барретт

Відповіді:


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.