Тестируем VPS на базе сервера KVM с томами, подключенными по iSCSI c файлера NexentaStor

в 22:08, , рубрики: hostkey, kvm, nexenta, solusvm, vps, vps хостинг, Блог компании HOSTKEY, виртуализация, виртуальная машина, хостинг, метки: , , , , , , , ,

Мы в HOSTKEY недавно запустили новый сетевой файлер на базе NexentaStor для целей виртуализации и представилось время субботним вечером протестировать работу виртуальных машин на базе системы виртуализации KVM.
Мы проверим быстродействие процессора, сети и диска с картинками и размышлениями, зная что за инфраструктура стоит за этим.

Итак, наша тестовая нода KVM собрана на базе сервера Intel SR1690WBR, там стоит 2 процессора Xeon E5607 2,26GHz, 64Гб памяти и SSD диск загрузки гипервизора и жесткий диск, куда KVM любит свопить редко используемые блоки памяти. Все это подключено через 1Gbps Ethernet к нашему файлеру на NexentaStor, параметры которого подробно описаны в этом посте. Процессоры не специально подобранные, а были в запчастях. Обычно мы используем ноды в три-четыре раза крупнее для этих задач. Типовая нода имеет 196Гб памяти и два 6 ядерных процессора E5645 или E5-2630. Второй гигабитный порт смотрит в мир Интернет.

На ноде стоит старый добрый KVM, которым управляет SolusVM.
Развернем себе крупную виртуалочку:

Тестируем VPS на базе сервера KVM с томами, подключенными по iSCSI c файлера NexentaStor

Обратите внимание на тонкий базовый том размером в 7Тб — это с Нексенты смонтирован по iSCSI том виртуального размера в 7Тб, а на нем сделан с помощью LVM том для хранения виртуалок. Если что-то пойдет не так с нодой, то мы перемонтируем диск на свободный сервер аналогичного размера и запустим все виртуальные машины с минимальным простоем.

Итак, у нас есть 1Г памяти, 4 ядра и 1Тб диска (sic!).
проверимся:

[root@testio ~]# free -m
             total       used       free     shared    buffers     cached
Mem:           996        712        283          0        125        460
-/+ buffers/cache:        126        870
Swap:           99          0         99
[root@testio ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/vda1             985G  901G   34G  97% /
tmpfs                 499M     0  499M   0% /dev/shm

теперь посмотрим как это выглядит на Нексенте:
Тестируем VPS на базе сервера KVM с томами, подключенными по iSCSI c файлера NexentaStor

т.е. террабайт мы выделили, а по факту диск мы не заняли. Нексента может не резервировать место, занимать его только когда оно понадобится на деле.

промеряем скорость дисков с помощью fio, как правильно описано тут уважаемым amarao.

[root@testio ~]# cat fio.ini
[readtest]
blocksize=4k
filename=/dev/vda
rw=randread
direct=1
buffered=0
ioengine=libaio
iodepth=16

[writetest]
blocksize=4k
filename=/tmp/xxx
size=900G
rw=randwrite
direct=1
buffered=0
ioengine=libaio
iodepth=16

обратите внимание — у нас 1Тб диск и 900Гб тестовый файл для записи. Это не влезет в кэш Нексенты никак, даже боком. Если файлик сделать меньше, цифры увеличатся.

получим удивительный результат (убрал немного букв):

readtest: (groupid=0, jobs=1): err= 0: pid=4075: Sun Jan  2 01:52:14 2000
  read : io=1307.1MB, bw=28797KB/s, iops=7199 , runt= 46509msec
    clat (usec): min=58 , max=474382 , avg=2202.60, stdev=9679.77
    bw (KB/s)  : min= 1280, max=40624, per=100.00%, avg=29170.78, stdev=10972.45
    lat (usec) : 100=0.01%, 250=0.01%, 500=0.04%, 750=0.28%, 1000=0.73%
    lat (msec) : 2=89.14%, 4=6.86%, 10=1.20%, 20=1.10%, 50=0.51%
    lat (msec) : 100=0.03%, 250=0.03%, 500=0.05%
  cpu          : usr=4.79%, sys=18.70%, ctx=146562, majf=0, minf=41

writetest: (groupid=0, jobs=1): err= 0: pid=4076: Sun Jan  2 01:52:14 2000
  write: io=473612KB, bw=10190KB/s, iops=2547 , runt= 46478msec
    clat (usec): min=247 , max=1000.7K, avg=6225.70, stdev=20751.20
     lat (msec): min=1 , max=1000 , avg= 6.28, stdev=20.89
    bw (KB/s)  : min=   13, max=14792, per=100.00%, avg=10431.00, stdev=4163.53
    lat (usec) : 250=0.01%, 500=0.01%, 750=0.01%, 1000=0.01%
    lat (msec) : 2=0.07%, 4=20.12%, 10=76.81%, 20=0.93%, 50=1.05%
    lat (msec) : 100=0.69%, 250=0.15%, 500=0.12%, 750=0.02%, 1000=0.01%
    lat (msec) : 2000=0.01%

что получается:
Очередь 64: чтение 6200 IOPS и 10ms, запись 1200/44
Очередь 16: чтение 7200 IOPS и 2,4ms, запись 2500/6
Очередь 1: чтение 1260 IOPS и 4ms, запись 727/8

Не будем забывать, что диски у нас смонтированы по iSCSI через обычный Gigabit Ethernet — это верные 1мс в один конец.

Качаем файл с яндекса:

[root@testio ~]# wget ftp://ftp.yandex.ru/centos/6.3/isos/x86_64/CentOS-6.3-x86_64-bin-DVD1.iso
--2000-01-02 02:18:54--  ftp://ftp.yandex.ru/centos/6.3/isos/x86_64/CentOS-6.3-x86_64-bin-DVD1.iso
Connecting to ftp.yandex.ru|213.180.204.183|:21... connected.
Logging in as anonymous ... Logged in!
==> PASV ... done.    ==> RETR CentOS-6.3-x86_64-bin-DVD1.iso ... done.
Length: 4289386496 (4.0G) (unauthoritative)

 1% [>                         ] 69,638,574  10.7M/s  eta 6m 8s   ^C

интерфейс у нас 100М, раскачивается ровно в полку.

По быстродействию многоядерного процессора на Линуксе сложно однозначно задать систему координат для сравнения, если кто знает как это сделать — подскажите. В Винде я обычно ориентируюсь на Passmark Performance test, так как там есть бенчи практически всех процессоров этого века.

Вывод /proc/cpuinfo:

processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 13
model name      : QEMU Virtual CPU version (cpu64-rhel6)
stepping        : 3
cpu MHz         : 2266.638
cache size      : 4096 KB
physical id     : 0
siblings        : 4
core id         : 0
cpu cores       : 4
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 4
wp              : yes
flags           : fpu de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 ht syscall nx lm unfair_spinlock pni cx16 hypervisor lahf_lm
bogomips        : 4533.27
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

и так еще 3 раза. Ядер на виртуалку можно сделать до 8.

То есть, в сухом остатке:

1) производительность дисковой подсистемы виртуальной машины на базе iSCSI файлера Nexenta примерно в 70 и более раз быстрее чем на пара дисков в RAID1 на SATA. У нас часто любят брать в аренду сервера на X3440 или E3-1230, ставят туда 32Гб памяти и 2 диска по 2Гб. Нарезают мелко на 30-50 виртуалок и продают недорого. Там может быть не более 200 IOPS на всех, остерегайтесь подделок. Просите тест и проверяйте с помощью fio.

2) Тонкое выделение и дедупликация — использование современного файлера позволяет нам сильно экономить на дисковых массивах, что сказывается на цене для пользователя самым хорошим образом.

3) использование KVM исключает грязный овер-комитмент системы. Сколько памяти выделено на виртуалку, столько она и получила. Память сейчас в магазине недорогая и ставить ее можно много, нет смысла экономить.

4) Мощность и быстрота современных процессоров позволяет ставить на одну ноду до 200 машин — 6 ядерные 12 поточные процессоры так быстро разгребают очередь задач, что редко можно увидеть регулярную нагрузку больше 50-60% по процессорам. Это тоже влияет на цену самым прямым образом.

5) с помощью iostat на ноде видно как на ладони, какая виртуалка как гоняет свой кусок LVM. Нарушители и абузеры, создающие паразитную нагрузку в течение длительного времени могут быстро идентифицироваться и переводится в специальный загон, где они не причиняют вреда соседям.

6) больше IOPS — меньше удельная нагрузка на файлер и ноду. Приложения работают быстрее, больше тиков процессора остается свободным.

Надеюсь, это будет полезно читателю если у него возникнет необходимость взять себе несколько виртуалок для дела. Желаете потестить сами? Обращайтесь, тест-драйв на неделю бесплатно.

Автор: ULP

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js