Мы проверим быстродействие процессора, сети и диска с картинками и размышлениями, зная что за инфраструктура стоит за этим.
Итак, наша тестовая нода KVM собрана на базе сервера Intel SR1690WBR, там стоит 2 процессора Xeon E5607 2,26GHz, 64Гб памяти и SSD диск загрузки гипервизора и жесткий диск, куда KVM любит свопить редко используемые блоки памяти. Все это подключено через 1Gbps Ethernet к нашему файлеру на NexentaStor, параметры которого подробно описаны в этом посте. Процессоры не специально подобранные, а были в запчастях. Обычно мы используем ноды в три-четыре раза крупнее для этих задач. Типовая нода имеет 196Гб памяти и два 6 ядерных процессора E5645 или E5-2630. Второй гигабитный порт смотрит в мир Интернет.
На ноде стоит старый добрый KVM, которым управляет SolusVM.
Развернем себе крупную виртуалочку:
Обратите внимание на тонкий базовый том размером в 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
теперь посмотрим как это выглядит на Нексенте:
т.е. террабайт мы выделили, а по факту диск мы не заняли. Нексента может не резервировать место, занимать его только когда оно понадобится на деле.
промеряем скорость дисков с помощью 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 — меньше удельная нагрузка на файлер и ноду. Приложения работают быстрее, больше тиков процессора остается свободным.
Надеюсь, это будет полезно читателю если у него возникнет необходимость взять себе несколько виртуалок для дела. Желаете потестить сами? Обращайтесь, тест-драйв на неделю бесплатно.
ссылка на оригинал статьи http://habrahabr.ru/company/hostkey/blog/171397/
Добавить комментарий