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

13

Я пытаюсь оценить требования 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?

pystole
источник
2
Я полагаю, что вы видите более высокие IOPS в значении TPS из-за дискового кэша.
ceejayoz
1
Хорошо, я попробовал файл 10GB через dd с блоком 256kB, чтобы фактически заполнить кеш, и через ~ 90 секунд tps падает до ~ 200, так что, возможно, вы правы. Но все же 80 и 200 - это большая разница ... Возможно ли, что чтение и запись IOPS различаются? И есть ли способ определить требуемые IOPS из этого значения?
Пистоль
1
Можете ли вы описать, почему вы после IOPS? читать и писать - это совсем другая пара обуви, которую здесь бросают в один и тот же горшок.
Нильс
Причина в том, что мне нужно описать минимальные требования к HW. У меня есть сервер, который получает данные по сети (мы можем предположить постоянный битрейт здесь) и записывает полученные данные на диск. Данные записываются в файлы последовательно, но их может быть сотни (например, 800) параллельно. Я понял, что когда число клиентов достигает некоторой точки, я начинаю получать большие iowaits. Фактическая пропускная способность диска, которую я могу достичь, составляет около 25 МБ / с, что довольно мало, меньше клиентов с более высоким битрейтом могут делать 35 МБ / с, чисто последовательные около 130 МБ / с. Так что я думаю, что здесь
важны

Ответы:

6

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

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

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

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

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

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

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

Nils
источник
Хорошо, вы правы. IOPS не имеет никакого смысла для записи, так как в ней много кэшей, переупорядочивание и слияния. Закрытие ... Спасибо.
Пистоль
5

Также имейте в виду, что 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
HTF
источник
Да, ты прав. Но в моем случае это почти 100% записей, чтения почти нет.
Пистоль