Отношение между дисковым IOPS и sar tps

Я пытаюсь оценить требования IOPS моего приложения, работающего на 32-битной CentOS 6.2. Я начал проводить некоторые измерения на машине с дисками SATA, и я совершенно запутался в разнице между IOPS и tps, измеренными sar.

Согласно википедии SATA диск должен выполнять 75-100 IOPS. Утилита ioping, кажется, подтверждает это для теста произвольного доступа:

# ./ioping -R /dev/sda
--- /dev/sda (device 931.0 Gb) ioping statistics ---
279 requests completed in 3.0 s, 92 iops, 371.3 kb/s
min/avg/max/mdev = 2.7 ms / 10.8 ms / 130.8 ms / 7.9 ms

Но значения tps, производимые sar, намного выше (/dev/sda):

# iostat 1
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
       0.17    0.00    2.02   14.86    0.00   82.96

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda             559.00         0.00    142600.00          0     142600
dm-0          18433.00         0.00    147464.00          0     147464
dm-1              0.00         0.00         0.00          0          0
dm-2              0.00         0.00         0.00          0          0

На самом деле не имеет значения, является ли эта загрузка последовательной (dd с различными размерами блоков) или произвольным доступом (ioping), значение остается тем же. Я думал, что tps на самом деле является IOPS, и я ожидал, что он уменьшится при передаче больших кусков.

Итак, что именно означает значение tps? И как это связано с IOPS?

2 ответа

Решение

Транзакции - это одиночные IO-команды (блок выборки / записи), которые записываются на RAW-диск (в вашем примере dm-0). Ядро linux пытается упорядочить эти команды в лучшую последовательность или пытается сжать их в более эффективные команды (например: получить два блока одновременно вместо одного блока и получить другой блок сразу после этого). Это транзакции, которые отправляются на дисковый контроллер (tps для sda).

Хорошие контроллеры имеют собственную логику, которая еще больше уменьшает реальное количество транзакций.

Транзакцией может быть команда SCSI: "записать 2 ГБ в цель crontoller 1, лун 3, начиная с сектора 22). Как вы можете видеть, это нельзя привести в прямую корреляцию с числами пропускной способности.

Что вам нужно, так это постоянная скорость записи. У вас есть несколько ограничивающих факторов здесь:

  • соединение с клиентом: если сеть гигабитная, вы никогда не будете иметь скорость ввода более 100 МБ / с
  • дисковый контроллер: если это контроллер на 3 Гб, вы никогда не будете иметь пропускную способность более 300 МБ / с
  • диск: узнайте ценность производителей для устойчивой производительности записи
  • Файловая система: есть небольшие издержки, поскольку ОС должна обрабатывать данные - проверить это на RAM-диске...

Мое предположение для вашей системы: получить хороший аппаратный raid-контроллер, способный выполнять raid 10 или 5, и получить как минимум 6 быстрых (15k) дисков.

Для профессионального использования используйте SAS вместо SATA.

Пожалуйста, имейте в виду, что TPS значение представляет чтение и запись, вы можете использовать -x переключиться на расширенное представление, где чтение и запись разделены (r/s = чтение IOPS, w/s = запись IOPS):

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
vda               0.07    24.65    0.30   18.95    30.65   330.22    18.74     0.07    3.61   0.98   1.89

Iostat /sysstat - очень мощный инструмент. Часто лучше обратиться к соответствующей странице руководства, чтобы вам не пришлось ждать 6 лет и 10 месяцев, чтобы получить действительно правильный ответ. Ответ на ваш вопрос взят из справочной страницы:

Первый отчет, созданный командой iostat, содержит статистику времени, прошедшего с момента загрузки системы. Каждый последующий отчет охватывает время, прошедшее с момента предыдущего отчета.

Если вы запустите что-то вроде iostat 1 2, второй блок отчетов будет содержать статистику операций ввода-вывода за одну секунду, а первый - совокупный набор предыдущих данных. Часто бывает полезно запустить sar в cron, чтобы вы могли собирать значимую статистику легким, но последовательным способом.

В вашем примере вы видите совокупную предыдущую статистику, а не IOPS, зафиксированные во время некоторого стресс-теста.

Другие вопросы по тегам