Утилита Linux для записи статистики ввода-вывода (случайная / последовательная, размеры блоков, соотношение чтения / записи)
В рамках подготовки нашего нового сервера (см. Другие SF) я хотел бы узнать следующее:
- соотношение случайных и последовательных операций чтения и записи
- количество данных, считываемых и записываемых за один раз (предпочтительно в форме гистограммы)
Я уже могу выяснить наши операции чтения / записи для каждой операции и общего уровня данных с помощью iostat & dstat, но я хотел бы узнать больше. Например, я хотел бы знать, что мы в основном случайные чтения по 16 КБ или много последовательных операций чтения по 64 КБ со случайной записью.
Мы (в настоящее время) на Ubuntu 10.04 VM.
Могу ли я запустить утилиту, которая будет записывать и представлять эту информацию для меня?
3 ответа
Мне нравится использовать утилиту collectl для этой цели. Я упоминал об этом в другом ответе для кого-то, кто ищет конкретную статистику ввода-вывода для воспроизведения. Вы должны быть в состоянии адаптировать вывод к вашим конкретным потребностям. В Ubuntu это должно быть доступно через обычные репозитории. Предостережение заключается в том, что вы не увидите проценты, которые вы ищете.
Nmon также хороший инструмент, который может предоставить большую часть информации, которую вы ищете в простом интерфейсе.
Если вы уже знакомы с iostat
Какие флаги вы используете в настоящее время?
Если вы хардкор и профилируете конкретное приложение, SystemTap может быть вариантом, но я не уверен, что это правильное соответствие. Это может быть больше работы, чем необходимо.
Получить эту информацию из Solaris Dtrace довольно просто (в системах ZFS - снимок экрана NexentaStor ниже), но нужно немного покопаться на стороне Linux... Так что вы можете рассмотреть Dtrace для Linux.
Я пошел по пути из этого поста, используя инструмент SystemTap.
Во-первых, установите systemtap. Для Debian/Ubuntu:
apt-get install systemtap linux-image-$(uname -r)-dbg linux-headers-$(uname -r)
Создать скрипт systemtap, сохранить как blockio.stp
:
global writes
global reads
probe ioblock.request {
if(bio_rw_num(rw) == BIO_WRITE)
writes[devname] <<< size
if(bio_rw_num(rw) == BIO_READ)
reads[devname] <<< size
}
probe end {
printf("\n")
# foreach([devname] in writes-) {
# printf("Device: %s\n", devname)
# println(@hist_log(writes[devname]))
# }
printf("WRITE\n")
println(@hist_log(writes["sda1"]))
printf("READ\n")
println(@hist_log(reads["sda1"]))
}
Замените sda1 на ваш диск или используйте метод foreach, как в оригинальном сообщении, чтобы показать статистику для всех дисков.
Начать мониторинг. Запуск от имени пользователя root
stap -v blockio.stp
Остановите это с помощью Ctrl+C, когда вы хотите закончить мониторинг. Выход будет как
Pass 1: parsed user script and 95 library script(s) using 84064virt/25528res/2408shr/23916data kb, in 160usr/0sys/164real ms.
Pass 2: analyzed script: 3 probe(s), 21 function(s), 2 embed(s), 4 global(s) using 297648virt/205248res/86464shr/119268data kb, in 1750usr/60sys/1815real ms.
Pass 3: using cached /root/.systemtap/cache/ea/stap_ea33aaf95086fa562bb720d36fca7504_12821.c
Pass 4: using cached /root/.systemtap/cache/ea/stap_ea33aaf95086fa562bb720d36fca7504_12821.ko
Pass 5: starting run.
^C
WRITE
value |-------------------------------------------------- count
0 |@@@@@@@@@@@@@@@@@@@@@@@@ 191952
1 | 0
2 | 0
~
1024 | 0
2048 | 0
4096 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 395272
8192 |@@ 16273
16384 |@ 12799
32768 | 4908
65536 | 4170
131072 | 2159
262144 | 6546
524288 | 4587
1048576 | 0
2097152 | 0
READ
value |-------------------------------------------------- count
128 | 0
256 | 0
512 | 2
1024 | 0
2048 | 0
4096 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 38229
8192 |@@ 1550
16384 |@@@ 2525
32768 |@@ 1692
65536 |@@ 1693
131072 |@@@@@@@@@@@@@@@@@@ 14455
262144 | 217
524288 | 0
1048576 | 0
Pass 5: run completed in 140usr/720sys/3662349real ms.
iopattern
на OSX делает случайный% и последовательный процент, и iopending
на OSX показывает гистограмму, но я не уверен, что из. Это сценарии Dtrace, поэтому они могут быть не очень полезны для вас.