Всем добрый вечер.
Дистрибутив: Proxmox 2.1
Версия Debian: 6.0.6
Ядро: 2.6.32-17-pve
Утилита для тестирования: fio
Конфиг для записи: write.ini:
[writetest]
blocksize=4k
filename=/dev/sda2
rw=randwrite
#direct=1
buffered=1
ioengine=libaio
iodepth=4
Конфиг для чтения:
[readtest]
blocksize=4k
filename=/dev/sda2
rw=randread
#direct=1
buffered=1
ioengine=libaio
iodepth=4
Обращаю ваше внимание что тестируется не скорость записи или чтения, а отзывчивость системы и работа планировщика. Отзывчивость оценивается по количеству уровню iops операции чтения. Latency пока предлагаю не оценивать.
Планировщик: deadline
/sys/block/sda/queue/iosched/fifo_batch:16
/sys/block/sda/queue/iosched/front_merges:1
/sys/block/sda/queue/iosched/read_expire:500
/sys/block/sda/queue/iosched/write_expire:5000
/sys/block/sda/queue/iosched/writes_starved:2
NCQ:
/sys/block/sda/device/queue_depth:1
Проверяем в режиме простоя:
Чтение с раздела:
read : io=11328KB, bw=318406B/s, iops=77, runt= 36431msec
slat (msec): min=2, max=36, avg=12.86, stdev= 3.95
clat (usec): min=2, max=68510, avg=38565.74, stdev=7217.68
bw (KB/s) : min= 272, max= 347, per=100.12%, avg=310.38, stdev=15.79
iostat -mdx 1:
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 0.00 78.00 0.00 0.30 0.00 8.00 1.00 12.78 12.78 99.70
Запись на раздел:
write: io=4643MB, bw=238160KB/s, iops=59540, runt= 19964msec
slat (usec): min=2, max=7661K, avg=15.69, stdev=9763.96
clat (usec): min=5, max=7661K, avg=50.75, stdev=16911.66
bw (KB/s) : min= 1530, max=973280, per=334.49%, avg=796625.82, stdev=381905.95
iostat -mdx 1:
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 2.00 0.00 436.00 0.00 1.72 8.09 143.28 339.99 2.29 100.00
Естественно iostat продолжает показывать запись на диск даже после остановки fio:
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 1.00 0.00 436.00 0.00 1.70 8.00 143.66 330.46 2.29 100.00
Пробуем прочитать данные с раздела /dev/sda1:
[readtest]
blocksize=4k
filename=/dev/sda1
rw=randread
#direct=1
buffered=1
ioengine=libaio
iodepth=4
Результаты:
read : io=3732KB, bw=61752B/s, iops=15, runt= 61885msec
slat (msec): min=40, max=157, avg=66.33, stdev=13.15
clat (usec): min=2, max=418926, avg=198389.78, stdev=29420.46
bw (KB/s) : min= 13, max= 70, per=99.68%, avg=59.81, stdev= 7.34
iostat -mdx 1:
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 1.00 15.00 240.00 0.06 0.94 8.03 142.12 548.40 3.92 100.00
Видно, что чтение «худо - бедно» идет.
Пытаемся прочесть данные с /dev/sda2(Не повторяйте этого дома!):
[readtest]
blocksize=4k
filename=/dev/sda2
rw=randread
#direct=1
buffered=1
ioengine=libaio
iodepth=4
Результаты:
readtest: (g=0): rw=randread, bs=4K-4K/4K-4K, ioengine=libaio, iodepth=4
Starting 1 process
Jobs: 1 (f=1): [r] [inf% done] [0K/0K /s] [0/0 iops] [eta 1158050441d:06h:59m:26s]
iostat -mdx 1:
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 1.00 0.00 435.00 0.00 1.71 8.04 301.64 793.95 2.30 100.00
s
Как видим ни одного iops на чтение не потрачено. И это уже после остановки fio.
Пробуем читать с помощью dd:
dd if=/dev/sda2 of=/dev/null bs=4K
17403+0 records in
17402+0 records out
71278592 bytes (71 MB) copied, 98.3468 s, 725 kB/s
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
sda 187.00 3.00 4.00 330.00 0.75 1.29 12.48 302.52 920.32 2.99 100.00
Что-то мы смогли прочитать, но тратилось около 4-5 iops. Что на мой взгляд крайне низкая цифра.
Отключение в fio буфера и установка режима direct не дали никакого эффекта.
[readtest]
blocksize=4k
filename=/dev/sda2
rw=randread
direct=1
buffered=0
ioengine=libaio
iodepth=4
Эта ситуация сохраняется до тех пор пока весь кэш buffered не будет сброшен на диск.
Также прошу обратить внимание, что если операция чтения и записи выполняются в режиме direct, то блокировки чтения не происходит:
read : io=29780KB, bw=213850B/s, iops=52, runt=142598msec
slat (usec): min=2, max=25, avg= 5.00, stdev= 1.16
clat (msec): min=10, max=182, avg=76.59, stdev=26.05
bw (KB/s) : min= 162, max= 308, per=100.26%, avg=208.54, stdev=19.48
write: io=35432KB, bw=208744B/s, iops=50, runt=173812msec
slat (usec): min=2, max=27, avg= 5.21, stdev= 1.42
clat (usec): min=139, max=462406, avg=78472.54, stdev=61807.28
bw (KB/s) : min= 82, max= 1653, per=102.28%, avg=207.64, stdev=175.78
iostat -mdx 1:
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
sdb 0.00 0.00 53.00 32.00 0.21 0.12 8.00 8.00 92.02 11.76 100.00
Обратите внимание что в этом случае количество io которое тратиться на чтение больше чем то, что тратится на запись.
Есть у кого-нибудь идеи почему так происходит? Что поковырять?
P.S.: Участвует ли планировщик в режиме записи/чтения direct?
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Производительность posixaio vs libaio (2014)
- Форум Большой iostat await (2015)
- Форум ZFS: zvol on ssd - низкая производительность (по сравнению с LVM) (2019)
- Форум гадание на гуще iostat (2019)
- Форум DRBD - низкая производительность на запись (2013)
- Форум HP Proliant 360e G8 после обновления до CentOS 7.2 начал замирать ввод-вывод дисковой подсистемы при запуске hpssacli (2016)
- Форум Сколько последовательных (нерандомных) IOPs выдает современный недорогой SATA диск типа TOSHIBA HDWA130 ? (2018)
- Форум Производительность ZFS на PVE (2023)
- Форум тормозит rsync (2013)
- Форум Скорость чтения с програмного raid1 (2011)