Я пытаюсь оценить требования к IOPS моего приложения, работающего на 32-битной CentOS 6.2. Я начал проводить некоторые измерения на машине с дисками SATA, и меня очень смущает разница между IOPS и tps, измеренными с помощью sar.
В соответствии с википедия Диск SATA должен выполнять 75–100 операций ввода-вывода в секунду. утилита 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?
Транзакции - это одиночные команды ввода-вывода (выборка блока / записи), которые записываются на RAW-диск (в вашем примере dm-0). Ядро linux пытается упорядочить эти команды в лучшей последовательности или пытается сжать их в более эффективные команды (например: получить два блока одновременно, а не получить один блок и получить другой блок сразу после этого). Это транзакции, которые поступают на контроллер диска (tps для sda).
У хороших контроллеров есть своя собственная логика, которая еще больше сокращает реальное количество транзакций.
Транзакцией может быть SCSI-команда «записать 2 ГБ в crontoller 1 target 2 lun 3, начиная с сектора 22). Как видите, это не может быть прямо коррелировано с числами пропускной способности.
Вам нужна постоянная скорость записи. Здесь есть пара ограничивающих факторов:
Я предполагаю для вашей системы: возьмите хороший аппаратный raid-контроллер, способный выполнять рейд 10 или 5, и получите как минимум 6 быстрых (15 КБ) дисков.
Для профессионального использования используйте 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