Perf - системный мониторинг

Вопросы программного кода и архитектуры Linux

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Perf - системный мониторинг

Непрочитанное сообщение Olej » 13 июл 2023, 12:34

Вообще то, моё активное внимание к Perf привлекло изучение eBPF: Liz Rice, Learning eBPF.
Но он стоит того и независимо от чего либо...

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Perf - системный мониторинг

Непрочитанное сообщение Olej » 13 июл 2023, 12:47

Код: Выделить всё

olej@R420:~$ apt contains perf | grep "\/perf"$
cinnamon-common: /usr/share/cinnamon/js/perf
linux-headers-5.15.0-75-generic: /usr/src/linux-headers-5.15.0-75-generic/tools/perf
linux-headers-5.15.0-75: /usr/src/linux-headers-5.15.0-75/arch/powerpc/perf
linux-headers-5.15.0-75: /usr/src/linux-headers-5.15.0-75/drivers/perf
linux-headers-5.15.0-75: /usr/src/linux-headers-5.15.0-75/include/linux/perf
linux-headers-5.15.0-75: /usr/src/linux-headers-5.15.0-75/tools/lib/perf
linux-headers-5.15.0-75: /usr/src/linux-headers-5.15.0-75/tools/perf
linux-headers-5.15.0-76-generic: /usr/src/linux-headers-5.15.0-76-generic/tools/perf
linux-headers-5.15.0-76: /usr/src/linux-headers-5.15.0-76/arch/powerpc/perf
linux-headers-5.15.0-76: /usr/src/linux-headers-5.15.0-76/drivers/perf
linux-headers-5.15.0-76: /usr/src/linux-headers-5.15.0-76/include/linux/perf
linux-headers-5.15.0-76: /usr/src/linux-headers-5.15.0-76/tools/lib/perf
linux-headers-5.15.0-76: /usr/src/linux-headers-5.15.0-76/tools/perf
linux-tools-5.15.0-76-generic: /usr/lib/linux-tools/5.15.0-76-generic/perf
linux-tools-5.15.0-76: /usr/lib/linux-tools-5.15.0-76/perf
linux-tools-common: /usr/bin/perf

Код: Выделить всё

olej@R420:~$ aptitude show linux-tools-common
Пакет: linux-tools-common                        
Версия: 5.15.0-76.83
Новый: да
Состояние: установлен
Установлен автоматически: нет
Мультиархитектура: сторонняя
Приоритет: необязательный
Раздел: kernel
Сопровождающий: Ubuntu Kernel Team <kernel-team@lists.ubuntu.com>
Архитектура: all
Размер в распакованном виде: 850 k
Зависит: lsb-release
Описание: Linux kernel version specific tools for version 5.15.0
 This package provides the architecture independent parts for kernel version locked tools (such as perf and x86_energy_perf_policy) for version 5.15.0.
Это компонент кодов ядра, но профилировщик используемый из пользовательских приложений...

Код: Выделить всё

olej@R420:~$ sudo apt install linux-tools-5.15.0-76 linux-tools-5.15.0-76-generic
Чтение списков пакетов… Готово
Построение дерева зависимостей… Готово
Чтение информации о состоянии… Готово
Следующие НОВЫЕ пакеты будут установлены:
  linux-tools-5.15.0-76 linux-tools-5.15.0-76-generic
Обновлено 0 пакетов, установлено 2 новых пакетов, для удаления отмечено 0 пакетов, и 2 пакетов не обновлено.
Необходимо скачать 7.940 kB архивов.
После данной операции объём занятого дискового пространства возрастёт на 27,3 MB.
Пол:1 http://ubuntu.volia.net/ubuntu-archive jammy-updates/main amd64 linux-tools-5.15.0-76 amd64 5.15.0-76.83 [7.938 kB]
Пол:2 http://ubuntu.volia.net/ubuntu-archive jammy-updates/main amd64 linux-tools-5.15.0-76-generic amd64 5.15.0-76.83 [1.792 B]
Получено 7.940 kB за 6с (1.335 kB/s)
Выбор ранее не выбранного пакета linux-tools-5.15.0-76.
(Чтение базы данных … на данный момент установлен 553951 файл и каталог.)
Подготовка к распаковке …/linux-tools-5.15.0-76_5.15.0-76.83_amd64.deb …
Распаковывается linux-tools-5.15.0-76 (5.15.0-76.83) …
Выбор ранее не выбранного пакета linux-tools-5.15.0-76-generic.
Подготовка к распаковке …/linux-tools-5.15.0-76-generic_5.15.0-76.83_amd64.deb …
Распаковывается linux-tools-5.15.0-76-generic (5.15.0-76.83) …
Настраивается пакет linux-tools-5.15.0-76 (5.15.0-76.83) …
Настраивается пакет linux-tools-5.15.0-76-generic (5.15.0-76.83) …

Код: Выделить всё

olej@R420:~$ perf -v
perf version 5.15.99

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Perf - системный мониторинг

Непрочитанное сообщение Olej » 13 июл 2023, 12:58

Как установить и настроить Perf в дистрибутивах Linux
admin11 мая 2021
Perf — это один из инструментов Linux, который вы можете использовать для получения подробной информации о проверке работоспособности и текущего положения в вашей системе. Perf — один из наиболее часто используемых и надежных инструментов системного мониторинга для сбора информации о ядре Linux, процессоре и оборудовании. Кроме того, он также может выполнять динамическую трассировку, проверять состояние оборудования и предоставлять отчеты о тестах производительности на машине Linux.
Затем выполните следующую команду aptitude, приведенную ниже, чтобы установить общие инструменты Linux на свой компьютер. Следующая команда требует привилегий root; убедитесь, что вы являетесь пользователем root. Когда установка завершится, вы можете найти пакеты Perf в каталоге /usr/bin/perf.

Код: Выделить всё

sudo apt install linux-tools-common
Поскольку Perf — это общий пакет Linux, убедитесь, что Perf совместим с вашим ядром Linux. Чтобы проверить ядро ​​вашей системы, выполните следующую команду. Взамен вы получите версию своего ядра.

Код: Выделить всё

uname -r
Теперь запишите версию своего ядра и напишите команду терминала, показанную ниже, для установки общих инструментов Linux, подходящих для вашего ядра.

Код: Выделить всё

sudo apt-get install linux-tools-5.8.0-50

Код: Выделить всё

olej@R420:~$ perf -v
perf version 5.15.99

Код: Выделить всё

olej@R420:~$ sudo perf stat ls -ld /etc/
[sudo] пароль для olej:       
drwxr-xr-x 193 root root 12288 июл 12 23:54 /etc/

 Performance counter stats for 'ls -ld /etc/':

              1,70 msec task-clock                #    0,640 CPUs utilized          
                 2      context-switches          #    1,179 K/sec                  
                 0      cpu-migrations            #    0,000 /sec                   
               110      page-faults               #   64,859 K/sec                  
         3.430.888      cycles                    #    2,023 GHz                    
         2.510.452      stalled-cycles-frontend   #   73,17% frontend cycles idle   
         1.972.721      instructions              #    0,57  insn per cycle         
                                                  #    1,27  stalled cycles per insn
           384.229      branches                  #  226,552 M/sec                  
            16.865      branch-misses             #    4,39% of all branches        

       0,002651840 seconds time elapsed

       0,002458000 seconds user
       0,000000000 seconds sys

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Perf - системный мониторинг

Непрочитанное сообщение Olej » 10 авг 2023, 13:53

Olej писал(а):
13 июл 2023, 12:34
он стоит того и независимо от чего либо...
Как установить и настроить Perf в дистрибутивах Linux
admin11 мая 2021
Вы не можете найти много инструментов, чтобы узнать общее состояние системы; найти приложение, которое может генерировать подробную информацию о состоянии системы в реальном времени, сложно. Perf — это один из инструментов Linux, который вы можете использовать для получения подробной информации о проверке работоспособности и текущего положения в вашей системе.
В Linux инструмент Perf может анализировать ядро, приложения, системные библиотеки, события программного обеспечения с помощью команд и подкоманд. Его также можно использовать как PMU (блок мониторинга производительности) в Linux. Инструмент Perf написан на языке программирования C и построен под лицензией GNU GL.

Код: Выделить всё

olej@R420:~$ perf --version
perf version 5.15.99
Т.е. он должен активно обновляться с каждым обновлением версии/подверсии ядра (вторая цифра 5.Х ... ну и первая, естественно) !

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Perf - системный мониторинг

Непрочитанное сообщение Olej » 10 авг 2023, 15:02

Linux perf: How to Use the Command and Profiler
July 21, 2022
Allow Regular Users to Use perf
На своём домашнем компьютере вполне могу себе позволить, чтобы без root:

Код: Выделить всё

olej@R420:~$ sudo su -
[sudo] пароль для olej:

Код: Выделить всё

root@R420:~# echo 0 > /proc/sys/kernel/perf_event_paranoid

root@R420:~# cat /proc/sys/kernel/perf_event_paranoid
0
Чтобы сохранялось при reboot:

Код: Выделить всё

olej@R420:~$ grep -v ^# /etc/sysctl.conf | grep -v ^$
vm.swappiness=5

Код: Выделить всё

root@R420:~# echo "kernel.perf_event_paranoid = 0" >> /etc/sysctl.conf

Код: Выделить всё

olej@R420:~$ grep -v ^# /etc/sysctl.conf | grep -v ^$
vm.swappiness=5
kernel.perf_event_paranoid = 0
Проверка прав:

Код: Выделить всё

olej@R420:~$ perf stat ls -ld /etc/
drwxr-xr-x 192 root root 12288 авг 10 11:29 /etc/

 Performance counter stats for 'ls -ld /etc/':

              1,87 msec task-clock                #    0,572 CPUs utilized
                 4      context-switches          #    2,143 K/sec
                 1      cpu-migrations            #  535,646 /sec
               103      page-faults               #   55,172 K/sec
         5.183.579      cycles                    #    2,777 GHz
         4.229.204      stalled-cycles-frontend   #   81,59% frontend cycles idle
         2.019.878      instructions              #    0,39  insn per cycle
                                                  #    2,09  stalled cycles per insn
           395.428      branches                  #  211,809 M/sec
            20.344      branch-misses             #    5,14% of all branches
           
       0,003263621 seconds time elapsed
           
       0,000000000 seconds user
       0,002993000 seconds sys

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Perf - системный мониторинг

Непрочитанное сообщение Olej » 10 авг 2023, 16:14

Olej писал(а):
10 авг 2023, 15:02
Проверка прав:
Но этого мало :!:
Как установить и настроить Perf в дистрибутивах Linux
11 мая 2021
Вот так записываются в файл события Perf:

Код: Выделить всё

olej@R420:~$ perf record df -h
WARNING: Kernel address maps (/proc/{kallsyms,modules}) are restricted,
check /proc/sys/kernel/kptr_restrict and /proc/sys/kernel/perf_event_paranoid.

Samples in kernel functions may not be resolved if a suitable vmlinux
file is not found in the buildid cache or in the vmlinux path.

Samples in kernel modules won't be resolved at all.

If some relocation was applied (e.g. kexec) symbols may be misresolved
even with a suitable vmlinux or kallsyms file.

Couldn't record kernel reference relocation symbol
Symbol resolution may be skewed if relocation was used (e.g. kexec).
Check /proc/kallsyms permission or run as root.
Файл.система   Размер Использовано  Дост Использовано% Cмонтировано в
tmpfs            9,5G         2,1M  9,5G            1% /run
/dev/sda5        109G          47G   57G           46% /
tmpfs             48G         8,0K   48G            1% /dev/shm
tmpfs            5,0M         4,0K  5,0M            1% /run/lock
/dev/sda1        511M         3,3M  508M            1% /boot/efi
/dev/sdc3        576G         400G  148G           74% /mnt/sdc3
/dev/sdc2        910G          29G  836G            4% /mnt/sdc2
/dev/nvme0n1p1   229G          81G  136G           38% /home
/dev/sdb2        229G         107G  111G           50% /home/olej/Загрузки
tmpfs            9,5G         1,7M  9,5G            1% /run/user/1000
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0,002 MB perf.data (16 samples) ]
Имеем WARNING :!:

Код: Выделить всё

olej@R420:~$ ls -l perf.data 
-rw------- 1 olej olej 22492 авг 10 16:04 perf.data
По формату записи - там бессмысленный бинарный мусор...

Код: Выделить всё

olej@R420:~$ file perf.data 
perf.data: data
... требующий для просмотра специальных средств:

Код: Выделить всё

olej@R420:~$ perf report -i perf.data
Samples: 16  of event 'cycles', Event count (approx.): 5023705
Overhead  Command  Shared Object         Symbol
  15,25%  df       [unknown]             [k] 0xffffffff83ea5997
  15,18%  df       ld-linux-x86-64.so.2  [.] _dl_relocate_object
  15,17%  df       libc.so.6             [.] __vfscanf_internal
  15,08%  df       libc.so.6             [.] __gconv_transform_utf8_internal
  15,00%  df       [unknown]             [k] 0xffffffff83b8e4a9
  13,85%  df       ld-linux-x86-64.so.2  [.] handle_intel.constprop.0
   8,07%  df       [unknown]             [k] 0xffffffff838a25a5
   1,94%  perf-ex  [unknown]             [k] 0xffffffff83aa21e0
   0,39%  perf-ex  [unknown]             [k] 0xffffffff838a2829
   0,07%  perf-ex  [unknown]             [k] 0xffffffff83faf96e
   0,01%  perf-ex  [unknown]             [k] 0xffffffff8381258c
   0,00%  perf-ex  [unknown]             [k] 0xffffffff83895ee4

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Perf - системный мониторинг

Непрочитанное сообщение Olej » 10 авг 2023, 16:15

Olej писал(а):
10 авг 2023, 16:14
Имеем WARNING

Код: Выделить всё

olej@R420:~/2023/own.BOOKs/eBPF$ cat /proc/sys/kernel/kptr_restrict
1

Код: Выделить всё

olej@R420:~/2023/own.BOOKs/eBPF$ cat /proc/sys/kernel/perf_event_paranoid
0

Код: Выделить всё

root@R420:~# echo 0 > /proc/sys/kernel/kptr_restrict

root@R420:~# cat /proc/sys/kernel/kptr_restrict
0

Код: Выделить всё

olej@R420:~$ perf record df -h
Файл.система   Размер Использовано  Дост Использовано% Cмонтировано в
tmpfs            9,5G         2,1M  9,5G            1% /run
/dev/sda5        109G          47G   57G           46% /
tmpfs             48G         8,0K   48G            1% /dev/shm
tmpfs            5,0M         4,0K  5,0M            1% /run/lock
/dev/sda1        511M         3,3M  508M            1% /boot/efi
/dev/sdc3        576G         400G  148G           74% /mnt/sdc3
/dev/sdc2        910G          29G  836G            4% /mnt/sdc2
/dev/nvme0n1p1   229G          81G  136G           38% /home
/dev/sdb2        229G         107G  111G           50% /home/olej/Загрузки
tmpfs            9,5G         1,7M  9,5G            1% /run/user/1000
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0,013 MB perf.data (16 samples) ]
WARNING исчез :!:

Код: Выделить всё

olej@R420:~$ ls -l perf.data 
-rw------- 1 olej olej 34440 авг 10 16:11 perf.data

Код: Выделить всё

olej@R420:~$ perf report -i perf.data 
Samples: 16  of event 'cycles', Event count (approx.): 4788745
Overhead  Command  Shared Object         Symbol
  15,10%  df       [kernel.kallsyms]     [k] syscall_return_via_sysret
  15,08%  df       [kernel.kallsyms]     [k] fuse_show_options
  15,05%  df       [kernel.kallsyms]     [k] clear_page_erms
  15,00%  df       ld-linux-x86-64.so.2  [.] do_lookup_x
  14,78%  df       ld-linux-x86-64.so.2  [.] _dl_relocate_object
  13,55%  df       [kernel.kallsyms]     [k] error_entry
   8,51%  df       [kernel.kallsyms]     [k] __vma_adjust
   2,41%  df       [kernel.kallsyms]     [k] perf_output_begin
   0,43%  perf-ex  [kernel.kallsyms]     [k] set_pte_vaddr_p4d
   0,07%  perf-ex  [kernel.kallsyms]     [k] acpi_os_read_memory
   0,01%  perf-ex  [kernel.kallsyms]     [k] native_sched_clock
   0,00%  perf-ex  [kernel.kallsyms]     [k] native_write_msr
Размер файла записи поменялся.
И его детализация тоже :!:

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Perf - системный мониторинг

Непрочитанное сообщение Olej » 10 авг 2023, 16:33

Быстрые тесты производительности:

Код: Выделить всё

olej@R420:~$ perf bench --help
...
SUBSYSTEM
       sched
           Scheduler and IPC mechanisms.

       syscall
           System call performance (throughput).

       mem
           Memory access performance.

       numa
           NUMA scheduling and MM benchmarks.

       futex
           Futex stressing benchmarks.

       epoll
           Eventpoll (epoll) stressing benchmarks.

       internals
           Benchmark internal perf functionality.

       all
           All benchmark subsystems.
...

Код: Выделить всё

olej@R420:~$ perf bench mem --help

        # List of available benchmarks for collection 'mem':

        memcpy: Benchmark for memcpy() functions
        memset: Benchmark for memset() functions
      find_bit: Benchmark for find_bit() functions
           all: Run all memory access benchmarks
Диагностика тонкая, временами изрядно долгая, вывод её огромный, и делать её нужно по частям (параметрами запуска - только то что нужно!):

Код: Выделить всё

olej@R420:~$ perf bench mem all
# Running mem/memcpy benchmark...
# function 'default' (Default memcpy() provided by glibc)
# Copying 1MB bytes ...

       3.100198 GB/sec
# function 'x86-64-unrolled' (unrolled memcpy() in arch/x86/lib/memcpy_64.S)
# Copying 1MB bytes ...

      10.279605 GB/sec
# function 'x86-64-movsq' (movsq-based memcpy() in arch/x86/lib/memcpy_64.S)
# Copying 1MB bytes ...

       8.959289 GB/sec
# function 'x86-64-movsb' (movsb-based memcpy() in arch/x86/lib/memcpy_64.S)
# Copying 1MB bytes ...

      13.377568 GB/sec

# Running mem/memset benchmark...
# function 'default' (Default memset() provided by glibc)
# Copying 1MB bytes ...

      21.701389 GB/sec
# function 'x86-64-unrolled' (unrolled memset() in arch/x86/lib/memset_64.S)
# Copying 1MB bytes ...

      11.625744 GB/sec
# function 'x86-64-stosq' (movsq-based memset() in arch/x86/lib/memset_64.S)
# Copying 1MB bytes ...

      22.194602 GB/sec
# function 'x86-64-stosb' (movsb-based memset() in arch/x86/lib/memset_64.S)
# Copying 1MB bytes ...

      20.345052 GB/sec

# Running mem/find_bit benchmark...
100000 operations 1 bits set of 1 bits
  Average for_each_set_bit took: 1520.200 usec (+- 117.069 usec)
  Average test_bit loop took:    706.600 usec (+- 87.025 usec)
100000 operations 1 bits set of 2 bits
  Average for_each_set_bit took: 1535.400 usec (+- 18.071 usec)
  Average test_bit loop took:    859.600 usec (+- 12.766 usec)
100000 operations 2 bits set of 2 bits
  Average for_each_set_bit took: 2032.100 usec (+- 165.955 usec)
  Average test_bit loop took:    1047.100 usec (+- 62.869 usec)
100000 operations 1 bits set of 4 bits
  Average for_each_set_bit took: 1690.400 usec (+- 156.279 usec)
  Average test_bit loop took:    1504.800 usec (+- 138.737 usec)
100000 operations 2 bits set of 4 bits
  Average for_each_set_bit took: 2144.200 usec (+- 168.424 usec)
  Average test_bit loop took:    1597.600 usec (+- 72.577 usec)
100000 operations 4 bits set of 4 bits
  Average for_each_set_bit took: 3108.600 usec (+- 392.680 usec)
  Average test_bit loop took:    1847.933 usec (+- 106.027 usec)
...

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Perf - системный мониторинг

Непрочитанное сообщение Olej » 10 авг 2023, 16:39

Olej писал(а):
10 авг 2023, 15:02
Linux perf: How to Use the Command and Profiler
Чтобы отобразить статистику производительности ЦП для всех стандартных аппаратных и программных событий для всех ЦП, выполните:

Код: Выделить всё

olej@R420:~$ perf stat -a sleep 5

 Performance counter stats for 'system wide':

        200.265,93 msec cpu-clock                 #   40,004 CPUs utilized          
            90.577      context-switches          #  452,284 /sec                   
             2.511      cpu-migrations            #   12,538 /sec                   
            37.486      page-faults               #  187,181 /sec                   
    78.322.121.843      cycles                    #    0,391 GHz                    
   121.144.424.936      stalled-cycles-frontend   #  154,67% frontend cycles idle   
    98.507.608.074      instructions              #    1,26  insn per cycle         
                                                  #    1,23  stalled cycles per insn
     5.527.719.743      branches                  #   27,602 M/sec                  
       105.938.946      branch-misses             #    1,92% of all branches        

       5,006137048 seconds time elapsed


Ответить

Вернуться в «Linux изнутри»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 9 гостей