LinuxForum.Fans
Тема

Проверка скорости работы жесткого диска в хостовой и гостевой ОС

Автор: AlfaStriker 15 сообщений 5017 просмотров
#387740

Решил проверить скорость работы жестких дисков на серваке виртуализации.
Проверяю двумя командами, но боюсь что не правильно делаю, и поэтому результаты не реальные:
Проверка скорости работы дисков сервера на котором запущен гипервизор KVM
Первый вариант проверки, команда - hdparm
- Системный диск на котором установлена хостовая ОС - CentOS 6.5 x64

# hdparm -tT /dev/sda

/dev/sda:
Timing cached reads: 6752 MB in 2.00 seconds = 3376.79 MB/sec
Timing buffered disk reads: 154 MB in 3.01 seconds = 51.09 MB/sec

- Программный массив из двух HDD на которых устанавливаются и работают гостевые машины

# hdparm -tT /dev/md0
text
/dev/md0:
 Timing cached reads:   6770 MB in  2.00 seconds = 3385.90 MB/sec
 Timing buffered disk reads: 404 MB in  3.01 seconds = 134.24 MB/sec

Теперь проверяю командой - dd, второй вариант
- Системный диск на котором установлена хостовая ОС - CentOS 6.5 x64

# sync ; time { dd if=/dev/zero of=/mnt/guestimages/testfile.bin bs=4k oflag=direct count=200000 ; sync ; }

200000+0 records in
200000+0 records out
819200000 bytes (819 MB) copied, 23.1779 s, 35.3 MB/s

real 0m23.233s
user 0m0.063s
sys 0m2.119s

- Программный массив из двух HDD на которых устанавливаются и работают гостевые машины
Вторая команда - dd

# touch /mnt/guestimages/testfile.bin

# sync ; time { dd if=/dev/zero of=/mnt/guestimages/testfile.bin bs=4k oflag=direct count=200000 ; sync ; }


200000+0 records in
200000+0 records out
819200000 bytes (819 MB) copied, 25.7426 s, 31.8 MB/s

real 0m25.827s
user 0m0.041s
sys 0m2.000s

В итоге появилась разница между двумя способами измерения скорости работы жестких дисков.
hdparm выдает:
- на системной диске хоста - 51.09 MB/sec
- на программной рейде где виртуалки - 134.24 MB/sec

dd выдает:
- на системной диске хоста - 35.3 MB/s
- на программной рейде где виртуалки - 31.8 MB/s


На гостевой машине CentOS 6.5 x32 аналогичные команды выдают:
hdparm -

# hdparm -tT /dev/vda
text

/dev/vda:
 Timing cached reads:   6480 MB in  2.00 seconds = 3241.27 MB/sec
 Timing buffered disk reads: 392 MB in  3.01 seconds = 130.28 MB/sec

dd -

# touch /testfile.bin

# sync ; time { dd if=/dev/zero of=/testfile.bin bs=4k oflag=direct count=200000 ; sync ; }

200000+0 records in
200000+0 records out
819200000 bytes (819 MB) copied, 51.2942 s, 16.0 MB/s

real 0m51.620s
user 0m0.157s
sys 0m4.672s

Мне вот интересно, правильно ли я проверяю скорость работы жестких дисков, и как можно просто и правильно проверить скорость?
Я просто думаю, не маленькая ли скорость работы моих жестких дисков.

Вот тест из под Win хоста VBOX, на котором установлена CentOS 6.5 x32:
hdparm:

# hdparm -tT /dev/sda
text

/dev/sda:
 Timing cached reads:   3284 MB in  2.00 seconds = 1641.60 MB/sec
 Timing buffered disk reads: 386 MB in  3.01 seconds = 128.20 MB/sec

dd:

# touch /testfile.bin

# sync ; time { dd if=/dev/zero of=/testfile.bin bs=4k oflag=direct count=200000 ; sync ; }

200000+0 records in
200000+0 records out
819200000 bytes (819 MB) copied, 101.135 s, 8.1 MB/s

real 1m41.592s
user 0m0.000s
sys 0m5.819s
#387743

для начала надо разобраться что именно мы замеряли:

hdparm:
-t Perform device read timings
-T Perform cache read timings

то есть замеряем скорость чтения из кэша и из "девайса" (потенциально можно попасть не по кэшу, хотя это редкость)


dd oflag=direct это как раз наоборот - при этом флажке, dd будет ждать сообщения о том что посланный io попал на физ. диск, то есть ускорение за счет кэша уже не канает.

отсюда разница в показателях. если наложить на них оверхед виртуализации и специфику драйверов и прослоек, то результатам можно не удивляться.

насчет верно ли проверять именно так, то нет, не верно. так можно замерить общий знаменатель, обычно для серийного io, а это более чем ситетический тест. можно погонять рандомальные тесты, например через iozone, но в конечном счете это тоже ситетика.
проверять надо на самом деле под настоящей нагрузкой релевантной для строящейся системы (например для сервера SQL надо генерировать SQL-подобную нагрузку)

#387894

Любые синтетические тесты могут отличаться от скорости на реальной задаче.
У вас гостевые машина какой диск имеет ( qcow2, qed, raw, lvm ), какой драйвер используется, и какой sheduler выбран в гостевой системе ?

Выбор обычно зависит от задачи....

#387905

Все машины имеют raw format image.
На Windows гостевых стоят драйвера virtio.
На Linux гостях - ide(qemu.
А вообще моя глупость/незнание создал все гости без virtio.


На счет планировщика не скажу сейчас, но позже напишу...

#387974
"AlfaStriker" написал:
На Linux гостях - ide(qemu.

почему не virtio?

планировщик, как правило deadline на хостах и noop в виртуалках

#387982

Я ошибся, в настройках стоит Virtio Disk 1 на госте CentOS :)
А как выбрать планировщик, где эта настройка?

#387989

У меня на физическом сервере три диска - sda, sdb и sdc.
На sda - установлена система
Два других диска в программном массиве md0. На этом массиве крутятся все виртуальные машины.

Проверяю планировщик по каждому диску:
sda

cat /sys/block/sda/queue/scheduler

noop anticipatory deadline [cfq]

sdb

cat /sys/block/sdb/queue/scheduler

noop anticipatory deadline [cfq]

sdc

cat /sys/block/sdc/queue/scheduler

noop anticipatory deadline [cfq]

Проверяю планировщик по массиву md0:
md0

cat /sys/block/md0/queue/scheduler

none

Извиняюсь, где нужно поменять планировщик?

#387991
"AlfaStriker" написал:
noop anticipatory deadline [cfq]

Ну вот же тебе на выбор =) 4 штуки. У тебя сейчас cfq.

#387993
"AlfaStriker" написал:
Извиняюсь, где нужно поменять планировщик?

Укажи в параметрах ядра

text

elevator=нужный_планировщик
#387997

А почему именно raw а не lvm раздел? На lvm разделе не будет лишней прослойки файловой системы, будет шустрее, и проще снимать бекапы файлов через lvm snapshot.

#388102
kixiro написал:
А почему именно raw а не lvm раздел? На lvm разделе не будет лишней прослойки файловой системы, будет шустрее, и проще снимать бекапы файлов через lvm snapshot.

В одном мануале был именно raw, в принципе работает, а что еще нужно.
Надо самому протестировать разницу между raw и lvm.

#388181

зависит от стореджа. если все на NFS то выбора нет. если локально или на блочном СХД то lvm эффективнее.

Войдите или зарегистрируйтесь, чтобы ответить.