Информация о событиях перфблока - PullRequest
0 голосов
/ 10 апреля 2020

Мне нужна информация о следующих событиях блока (дискового ввода / вывода), доступных в perf. Можете ли вы сказать мне, где я могу получить подробную информацию о каждом событии?

  block:block_bio_backmerge                          
  block:block_bio_bounce                            
  block:block_bio_complete                          
  block:block_bio_frontmerge                         
  block:block_bio_queue                              
  block:block_bio_remap                            
  block:block_dirty_buffer                           
  block:block_getrq                                
  block:block_plug                                  
  block:block_rq_complete                           
  block:block_rq_insert                             
  block:block_rq_issue                              
  block:block_rq_remap                               
  block:block_rq_requeue                             
  block:block_sleeprq                                
  block:block_split                                 
  block:block_touch_buffer                           
  block:block_unplug

Пожалуйста, помогите мне с этим.

1 Ответ

2 голосов
/ 11 апреля 2020

Как уже упоминал @osgx, это программные события трассировки, среди множества предопределенных наборов событий трассировки в источниках ядра, которые можно увидеть при запуске -

sudo perf list | grep Tracepoint

События трассировки на основе блоков могут дать подробную информацию о том, что делают запоминающие устройства при выполнении определенных команд.

sudo perf record -e block:block_rq_complete -a sleep 10
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 1.412 MB perf.data (340 samples) ]

block_rq_complete Точка трассировки *1009* отслеживает выполненные запросы ввода-вывода, либо полностью или частично.

sudo perf script
         swapper     0 [006] 205791.409875: block:block_rq_complete: 8,16 RM () 390439208 + 8 [0]
         swapper     0 [006] 205791.410439: block:block_rq_complete: 8,16 RM () 390439256 + 8 [0]
          chrome  9526 [006] 205793.149462: block:block_rq_complete: 8,16 W () 424979920 + 8 [0]
          chrome  9526 [006] 205793.149781: block:block_rq_complete: 8,16 W () 490387000 + 352 [0]
         swapper     0 [006] 205794.547686: block:block_rq_complete: 8,16 WS () 432636024 + 1344 [0]
         swapper     0 [006] 205794.558292: block:block_rq_complete: 8,16 WS () 432637368 + 1344 [0]
         swapper     0 [006] 205794.566718: block:block_rq_complete: 8,16 WS () 432638712 + 544 [0]
         swapper     0 [006] 205794.599791: block:block_rq_complete: 8,16 FF () 18446744073709551615 + 0 [0]
         swapper     0 [006] 205794.599868: block:block_rq_complete: 8,16 WS () 432639256 + 8 [0]
         swapper     0 [006] 205794.600792: block:block_rq_complete: 8,16 FF () 18446744073709551615 + 0 [0]
         swapper     0 [006] 205794.600798: block:block_rq_complete: 8,16 WS () 432639256 + 0 [0]
         swapper     0 [006] 205798.268989: block:block_rq_complete: 8,16 W () 462924840 + 8 [0]
         swapper     0 [006] 205798.269079: block:block_rq_complete: 8,16 W () 462934720 + 8 [0]
         swapper     0 [006] 205798.269118: block:block_rq_complete: 8,16 W () 462934752 + 8 [0]
         swapper     0 [006] 205798.269158: block:block_rq_complete: 8,16 W () 462935416 + 8 [0]
         swapper     0 [006] 205798.269195: block:block_rq_complete: 8,16 W () 462935592 + 8 [0]
         swapper     0 [006] 205798.269241: block:block_rq_complete: 8,16 W () 476143872 + 8 [0]
         swapper     0 [006] 205798.269265: block:block_rq_complete: 8,16 W () 476144624 + 8 [0]
         swapper     0 [006] 205798.269283: block:block_rq_complete: 8,16 W () 476145360 + 8 [0]

Первые 5 столбцов вывода хорошо понятны - (имя процесса / команда, pid, CPU, метка времени, имя события, для которого была произведена выборка), поэтому мы начнем с 6-го столбца далее -

8,16 относится к старшему и младшему номеру устройства.

ls -l /dev/sdb
brw-rw---- 1 root disk 8, 16 Apr  8 07:52 /dev/sdb

Символы R, W, B, S, F описывают выполняемую операцию ввода-вывода, где «R» относится к чтению, «W» относится к записи, «D» относится к блоку сброса, «M» относится к метаданным, «S» относится к синхронному, а «F» относится к гриппу sh.

Цифры, следующие за пустыми скобками (), относятся к смещению от начала устройства, на котором была выполнена операция ввода-вывода, и числу завершенных секторов ввода-вывода.

[0] указывает количество ошибок.

Некоторый уровень информации о большинстве других событий можно получить здесь - сводка событий блока

Обратите внимание, что API для этих событий постоянно меняются и могут отличаться для используемого вами ядра linux. Я приложил резюме для версии ядра 5.6.

...