Howto Профилирование Linux

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
howto:howto_kernel:howto_профилирование_linux [20.09.2018 06:45]
олег_стрижеченко Approved(admin 2018/09/20 12:56)
howto:howto_kernel:howto_профилирование_linux [20.05.2019 15:18] (текущий)
Строка 1: Строка 1:
 +===== Введение =====
 +**Начать с**: 
 +<code bash>
 +yum --enablerepo='​base-debuginfo'​ install kernel-debuginfo-`uname -r` kernel-devel perf oprofile gdb kexec-tools crash
 +</​code>​
 +
 +**если по быстрому**
 +  * perf top - не точно показывает адрес топ фукнции
 +    * https://​perf.wiki.kernel.org/​index.php/​Tutorial#​Sampling_with_perf_record
 +    * perf top -d 5 -U
 +    * perf top -d 5 -g -U
 +    * perf stat -e task-clock,​cycles,​instructions,​cache-references,​cache-misses sleep 5
 +    * **perf record -a sleep 5** и **потом perf report**
 +  * powertop
 +**если всерьез**
 +  * oprofile
 +  * sysrq
 +  * ftrace + debugfs
 ===== Общий алгоритм ===== ===== Общий алгоритм =====
   - Привести машину в максимально дефалтное состояние. Проверить и устранить аномалии и вредные настройки,​ например штормы прерываний,​ постоянный лог ошибок в dmesg и прочее. Убрать все оптимизации,​ если они были наугад включены. ​   - Привести машину в максимально дефалтное состояние. Проверить и устранить аномалии и вредные настройки,​ например штормы прерываний,​ постоянный лог ошибок в dmesg и прочее. Убрать все оптимизации,​ если они были наугад включены. ​
Строка 8: Строка 26:
   - Попробовать решить задачу оптимизацией настроек и оборудования и правил и тп workaround   - Попробовать решить задачу оптимизацией настроек и оборудования и правил и тп workaround
   - Если невозможно решить оптимизацией настроек,​ пробуем оптимизировать код, убрать локи добавить хеши усилить параллельность итп.   - Если невозможно решить оптимизацией настроек,​ пробуем оптимизировать код, убрать локи добавить хеши усилить параллельность итп.
-===== Рекомендации профилированию сетевого стека ядра =====+===== Рекомендации профилированию сетевого стека ядра ​для маршрутизаторов и firewall ​===== 
 +**Перед профилированием попробовать решить типовые проблемы,​ а именно:​**
   - Убедиться,​ что нет шторма прерываний(особенно usb и прочее левое оборудование).   - Убедиться,​ что нет шторма прерываний(особенно usb и прочее левое оборудование).
   - Проверить,​ что dmesg чистый.   - Проверить,​ что dmesg чистый.
Строка 19: Строка 38:
   - Проверить,​ что используются только fifo или fast_fifo очереди на сетевках,​ на qdisc, на imq, тк все остальные хитрые очереди гарантированно дают лишнюю нагрузку и никакой пользы не дают на современных скоростях.   - Проверить,​ что используются только fifo или fast_fifo очереди на сетевках,​ на qdisc, на imq, тк все остальные хитрые очереди гарантированно дают лишнюю нагрузку и никакой пользы не дают на современных скоростях.
   - Проверить что connlimit либо патченый c hash? либо не используется тк дефалтный очень плохой и тормозной.   - Проверить что connlimit либо патченый c hash? либо не используется тк дефалтный очень плохой и тормозной.
-  - Проверить колво маршрутов в ip route show и ip route show cache, бывает,​ что там 1млн маршрутов и это будет тормозить +  - Проверить колво маршрутов в ip route show и ip route show cache, бывает,​ что там 1млн маршрутов и это будет тормозить, однако если в FORWARD поставить первым ACCEPT или DROP(для зеркальных firewall) и нагрузка упадет в разы значит кеш маршрутов не причем. Оттюнить бакеты и прочее в rt_cache в proc sys 
-  - Проверить колво контраков+  - Проверить колво контраков, если запредельно,​ то будет тормозить. Оттюнить колво бакеты и прочее в  в proc sy
   - Для carbon_xge проверить,​ что используется ядро carbon_master с правильными оптимизированными OSV патчами IMQ.   - Для carbon_xge проверить,​ что используется ядро carbon_master с правильными оптимизированными OSV патчами IMQ.
   - Для carbon_xge проверить,​ что включены все оптимизаци для arp и для route подсистем.   - Для carbon_xge проверить,​ что включены все оптимизаци для arp и для route подсистем.
Строка 30: Строка 49:
   - Включить и настроить RPS на NUMA0 на все процессоры кроме CPU0   - Включить и настроить RPS на NUMA0 на все процессоры кроме CPU0
   - Убедиться,​ что нагрузка на CPU0 и CPU1 не менее 10% если CPU1 менее 10% уменшить колво процов на RPS или даже весь rps повешать на CPU1   - Убедиться,​ что нагрузка на CPU0 и CPU1 не менее 10% если CPU1 менее 10% уменшить колво процов на RPS или даже весь rps повешать на CPU1
-  - Далее проводить профилирование по Общему алгоритму ​п3+  - Далее проводить профилирование по Общему алгоритму
  
 ===== Как работает профилирование oprofile ===== ===== Как работает профилирование oprofile =====
Строка 192: Строка 211:
 opcontrol --init opcontrol --init
 opcontrol --reset opcontrol --reset
-opcontrol --start --vmlinux=/boot/vmlinux+opcontrol --start --vmlinux=/usr/​lib/​debug/​lib/​modules/​2.6.32-642.el6.x86_64/vmlinux
 # но иногда можно и --no-vmlinux если нам не важно про ядро, а только про юспейс # но иногда можно и --no-vmlinux если нам не важно про ядро, а только про юспейс
 # если баг Failed to open profile device: Device or resource busy, то стопаем все виртуалки KVM, одна из них залочила nmi # если баг Failed to open profile device: Device or resource busy, то стопаем все виртуалки KVM, одна из них залочила nmi
 sleep 10 # ждем сбора статистики sleep 10 # ждем сбора статистики
 opcontrol --stop opcontrol --stop
 +
 +# включаем watchdog обратно
 +echo 1 > /​proc/​sys/​kernel/​nmi_watchdog
 # собрали стату, стопнули,​ чтоб не грузить. # собрали стату, стопнули,​ чтоб не грузить.
 </​code>​ </​code>​
Строка 235: Строка 257:
  
 ==== Отчета о кастомном модуле ==== ==== Отчета о кастомном модуле ====
 +opreport -l -w -p /​lib/​modules/​2.6.32-642.el6.x86_64/​kernel/​drivers/​net/​i40e/​\\
 opreport -l -w -p **/​node/​bin** 2>&​1| head -n 100 | grep flas\\ opreport -l -w -p **/​node/​bin** 2>&​1| head -n 100 | grep flas\\
 0000000000007d30 5385 1.3249 flashcache.ko flashcache flashcache_hash_lookup\\ 0000000000007d30 5385 1.3249 flashcache.ko flashcache flashcache_hash_lookup\\