Назад | Перейти на главную страницу

Связь между дисковым IOPS и sar tps

Я пытаюсь оценить требования к 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). Как видите, это не может быть прямо коррелировано с числами пропускной способности.

Вам нужна постоянная скорость записи. Здесь есть пара ограничивающих факторов:

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

Я предполагаю для вашей системы: возьмите хороший аппаратный 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