Какой SSD выбрать под ZIL?
Как мне кажется, одна из основных проблем при создании NAS на базе ZFS - какой SSD использовать под SLOG? Немного погуглив, все в один голос твердят, необходимо использовать ZeusRAM, но текущие реалии таковы, что данные диски сняты с производства и найти их можно только на ebay и подобных сайтах. Использование PCIE Flash невозможно ввиду того, что его нельзя расшарить между двумя серверами, следовательно нельзя собрать HA кластер.
На сегодняшний день мне видятся привлекательными следующие диски:
- HGST HUSMH8010BSS204 / HUSMH8020BSS204
- TOSHIBA PX04SHB160
Ввиду того, что в интернете имеется достаточно скудная информация о latency данных дисков, хочу поделиться с Вами результатом тестирования HUSMH8020BSS204.
Конфигурация оборудования
Тестирование SSD диска проводилось на сервер:
- Vendor: SuperMicro
- Product: X10DRi-LN4+
- CPU: 2 x (R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz
- Mem: 524175 Megabytes Speed: 2133 MHz
- SAS: LSI SAS 9300-16e
- JBOS: SC216BE2C-R741JBOD
Конфигурация ОС
Тестирование проводилось с использованием ОС OmniOS релиз r151014. Операционная система имеет следующие настройки:
root@zns1-n2 ~ # egrep "^set" /etc/system
set ibft_noprobe=1
set noexec_user_stack=1
set noexec_user_stack_log=1
set idle_cpu_no_deep_c=1
set ip:ip_squeue_fanout=1
set pcplusmp:apic_panic_on_nmi=1
set apix:apic_panic_on_nmi=1
set dump_plat_mincpu=0
set dump_bzip2_level=1
set dump_metrics_on=1
set sata:sata_auto_online=1
set hires_tick=1
set zfs:zfs_arc_max = 450971566080
set rlim_fd_max = 131072
set rlim_fd_cur = 65536
set nfs:nfs3_max_threads = 32
set nfs:nfs4_max_threads = 32
set rpcmod:clnt_max_conns = 8
set sd:sd_io_time=10
root@zns1-n2 ~ # cat /kernel/drv/sd.conf
name="sd" class="scsi" target=0 lun=0;
name="sd" class="scsi" target=1 lun=0;
name="sd" class="scsi" target=2 lun=0;
name="sd" class="scsi" target=3 lun=0;
name="sd" class="scsi" target=4 lun=0;
name="sd" class="scsi" target=5 lun=0;
name="sd" class="scsi" target=6 lun=0;
name="sd" class="scsi" target=7 lun=0;
name="sd" class="scsi" target=8 lun=0;
name="sd" class="scsi" target=9 lun=0;
name="sd" class="scsi" target=10 lun=0;
name="sd" class="scsi" target=11 lun=0;
name="sd" class="scsi" target=12 lun=0;
name="sd" class="scsi" target=13 lun=0;
name="sd" class="scsi" target=14 lun=0;
name="sd" class="scsi" target=15 lun=0;
name="sd" class="scsi-self-identifying";
sd-config-list=
"", "retries-timeout:1,retries-busy:1,retries-reset:1,retries-victim:2",
"HGST HUSMH8010BSS204", "power-condition:false,physical-block-size:4096",
"HGST HUSMH8020BSS204", "power-condition:false,physical-block-size:4096",
"HGST HUSMH8040BSS204", "power-condition:false,physical-block-size:4096",
"HGST HUSMH8080BSS204", "power-condition:false,physical-block-size:4096",
"HGST HUSMM1616ASS204", "power-condition:false,physical-block-size:4096",
"HGST HUSMM1680ASS204", "power-condition:false,physical-block-size:4096",
"HGST HUSMM1640ASS204", "power-condition:false,physical-block-size:4096",
"HGST HUSMM1620ASS204", "power-condition:false,physical-block-size:4096",
"TOSHIBA PX04SHB160", "power-condition:false,physical-block-size:4096",
"TOSHIBA PX04SHB080", "power-condition:false,physical-block-size:4096",
"TOSHIBA PX04SHB040", "power-condition:false,physical-block-size:4096",
"TOSHIBA PX04SHB020", "power-condition:false,physical-block-size:4096";
ddi-devid-registrant=1;
root@zns1-n2 ~ # egrep -v "^$|^#" /kernel/drv/scsi_vhci.conf
name="scsi_vhci" class="root";
load-balance="round-robin";
auto-failback="enable";
ddi-forceload =
"misc/scsi_vhci/scsi_vhci_f_asym_sun",
"misc/scsi_vhci/scsi_vhci_f_asym_lsi",
"misc/scsi_vhci/scsi_vhci_f_asym_emc",
"misc/scsi_vhci/scsi_vhci_f_sym_emc",
"misc/scsi_vhci/scsi_vhci_f_sym_hds",
"misc/scsi_vhci/scsi_vhci_f_sym",
"misc/scsi_vhci/scsi_vhci_f_tpgs";
scsi-vhci-failover-override =
"HGST HUSMH8010BSS204", "f_sym",
"HGST HUSMH8020BSS204", "f_sym",
"HGST HUSMH8040BSS204", "f_sym",
"HGST HUSMH8080BSS204", "f_sym",
"HGST HUSMM1616ASS204", "f_sym",
"HGST HUSMM1680ASS204", "f_sym",
"HGST HUSMM1640ASS204", "f_sym",
"HGST HUSMM1620ASS204", "f_sym",
"TOSHIBA PX04SHB160", "f_sym",
"TOSHIBA PX04SHB080", "f_sym",
"TOSHIBA PX04SHB040", "f_sym",
"TOSHIBA PX04SHB020", "f_sym";
Инструмент тестирования - VDBENCH 5.04.06
Тестируемый диск
По заверению производителя имеет следующие характеристики:
- Read throughput (max MB/s, sequential 64K) - 1100
- Write throughput (max MB/s, sequential 64K) - 765
- Read IOPS (max IOPS, random 4K) - 130,000
- Write IOPS (max IOPS, random 4k) - 110,000
Профили тестирования и результаты
Полный отчет vdbench и профили нагрузки можно найти здесь. Если сравнить показатели последовательного чтения/записи с заявленными производителем, то они оказались дастаточно близки к тому, что заявляет производитель. Вот пример:
Read throughput (max MB/s, sequential 64K)
13:09:27.001 Starting RD=rd1; I/O rate: Uncontrolled MAX; elapsed=700 warmup=20; For loops: xfersize=64k
Nov 11, 2016 interval i/o MB/sec bytes read resp read write resp resp queue cpu% cpu%
13:21:27.009 avg_3-72 16198.73 1012.42 65536 100.00 0.490 0.490 0.000 5.080 0.107 7.9 1.7 1.4
Read Latency (sequential 64K)
13:09:27.000 Starting RD=rd1; I/O rate: Uncontrolled MAX; elapsed=700 warmup=20; For loops: xfersize=64k
Only reads done for this workload:
min(ms) < max(ms) count %% cum%% '+': Individual%; '+-': Cumulative%
0.000 < 0.020 0 0.0000 0.0000
0.020 < 0.040 0 0.0000 0.0000
0.040 < 0.060 0 0.0000 0.0000
0.060 < 0.080 0 0.0000 0.0000
0.080 < 0.100 0 0.0000 0.0000
0.100 < 0.200 0 0.0000 0.0000
0.200 < 0.400 1,676,027 14.3762 14.3762 +++++++
0.400 < 0.600 8,498,194 72.8937 87.2699 ++++++++++++++++++++++++++++++++++++-------
0.600 < 0.800 1,338,586 11.4818 98.7517 +++++-------------------------------------------
0.800 < 1.000 127,247 1.0915 99.8432 -------------------------------------------------
1.000 < 2.000 15,003 0.1287 99.9719 -------------------------------------------------
2.000 < 4.000 3,276 0.0281 100.0000 -------------------------------------------------
4.000 < 6.000 4 0.0000 100.0000 -------------------------------------------------
6.000 < 8.000 0 0.0000 100.0000 --------------------------------------------------
8.000 < 10.000 0 0.0000 100.0000 --------------------------------------------------
10.000 < 20.000 0 0.0000 100.0000 --------------------------------------------------
20.000 < 40.000 0 0.0000 100.0000 --------------------------------------------------
40.000 < 60.000 0 0.0000 100.0000 --------------------------------------------------
60.000 < 80.000 0 0.0000 100.0000 --------------------------------------------------
80.000 < 100.000 0 0.0000 100.0000 --------------------------------------------------
100.000 < 200.000 0 0.0000 100.0000 --------------------------------------------------
200.000 < 400.000 0 0.0000 100.0000 --------------------------------------------------
400.000 < 600.000 0 0.0000 100.0000 --------------------------------------------------
600.000 < 800.000 0 0.0000 100.0000 --------------------------------------------------
800.000 < 1000.000 0 0.0000 100.0000 --------------------------------------------------
1000.000 < 2000.000 0 0.0000 100.0000 --------------------------------------------------
2000.000 < max 0 0.0000 100.0000 --------------------------------------------------
Write throughput (max MB/s, sequential 64K)
19:37:14.000 Starting RD=rd1; I/O rate: Uncontrolled MAX; elapsed=700 warmup=20; For loops: xfersize=64k
Nov 11, 2016 interval i/o MB/sec bytes read resp read write resp resp queue cpu% cpu%
19:49:14.010 avg_3-72 10538.96 658.69 65536 0.00 0.734 0.000 0.734 8.833 0.374 7.7 1.8 1.0
Write Latency (sequential 64K)
19:37:14.000 Starting RD=rd1; I/O rate: Uncontrolled MAX; elapsed=700 warmup=20; For loops: xfersize=64k
Only writes done for this workload:
min(ms) < max(ms) count %% cum%% '+': Individual%; '+-': Cumulative%
0.000 < 0.020 0 0.0000 0.0000
0.020 < 0.040 0 0.0000 0.0000
0.040 < 0.060 0 0.0000 0.0000
0.060 < 0.080 0 0.0000 0.0000
0.080 < 0.100 0 0.0000 0.0000
0.100 < 0.200 88 0.0012 0.0012
0.200 < 0.400 55,576 0.7330 0.7341
0.400 < 0.600 3,762,288 49.6192 50.3533 ++++++++++++++++++++++++
0.600 < 0.800 1,747,374 23.0454 73.3987 +++++++++++-------------------------
0.800 < 1.000 738,326 9.7375 83.1362 ++++------------------------------------
1.000 < 2.000 1,228,690 16.2047 99.3408 ++++++++-----------------------------------------
2.000 < 4.000 42,490 0.5604 99.9012 -------------------------------------------------
4.000 < 6.000 3,843 0.0507 99.9519 -------------------------------------------------
6.000 < 8.000 3,632 0.0479 99.9998 -------------------------------------------------
8.000 < 10.000 16 0.0002 100.0000 -------------------------------------------------
10.000 < 20.000 0 0.0000 100.0000 --------------------------------------------------
20.000 < 40.000 0 0.0000 100.0000 --------------------------------------------------
40.000 < 60.000 0 0.0000 100.0000 --------------------------------------------------
60.000 < 80.000 0 0.0000 100.0000 --------------------------------------------------
80.000 < 100.000 0 0.0000 100.0000 --------------------------------------------------
100.000 < 200.000 0 0.0000 100.0000 --------------------------------------------------
200.000 < 400.000 0 0.0000 100.0000 --------------------------------------------------
400.000 < 600.000 0 0.0000 100.0000 --------------------------------------------------
600.000 < 800.000 0 0.0000 100.0000 --------------------------------------------------
800.000 < 1000.000 0 0.0000 100.0000 --------------------------------------------------
1000.000 < 2000.000 0 0.0000 100.0000 --------------------------------------------------
2000.000 < max 0 0.0000 100.0000 --------------------------------------------------
ZFS
Меня в первую очередь интересует использование этого устройства под ZIL, данный диск показывает достаточно хороший latency при I/O блоками до 32кбайт, далее же latency увеличивается и при размере I/O == 128k 86% записей фиксируется на ssd в пределах 1 милисекунды. В данный момент на zfs у нас два типа нагрузки, это кластер виртуализации из 800-та машин и файловый сервер для бэкапов. Проанализировав средний размер I/O, которым идет запись в SLOG на текущей системе, а также, учитывая то, что при операциях типа storage vmotion размер I/O составляет примерно 256кб, что в свою очередь будет увеличивать latency (см. тесты с xfeesize 128kb - 256kb), имеет смысл использовать конфигурацию, в которой на каждый две полки с 24 HHD 10krpm sas, будет приходиться по 2 SSD диска в RAID1 под ZIL.
Скрипт построения гистограммы I/O на блочное устройство.
#!/usr/sbin/dtrace -s
io:::start /args[1]->dev_pathname == $$1 && args[0]->b_flags & B_WRITE/ {
@[args[1]->dev_pathname] = quantize(args[0]->b_bcount);
}
tick-30s {
exit(0)
}
Backup SLOG I/O Distribution
# ./iosize_sd.d /devices/scsi_vhci/disk@g5000cca04e27f5a4:a
dtrace: script './iosize_sd.d' matched 8 probes
CPU ID FUNCTION:NAME
33 178951 :tick-30s
/devices/scsi_vhci/disk@g5000cca04e27f5a4:a
value ------------- Distribution ------------- count
2048 | 0
4096 | 14
8192 |@@@@@@@ 394
16384 | 4
32768 | 0
65536 | 4
131072 |@@@@@@@@@ 478
262144 |@@@@@@@@@@@@@@@@@@@@@@@@ 1300
524288 | 4
1048576 | 0
VMWare SLOG I/O Distribution
# ./iosize_sd.d /devices/scsi_vhci/disk@g5000cca04e27f490:a
dtrace: script './iosize_sd.d' matched 8 probes
CPU ID FUNCTION:NAME
53 178379 :tick-30s
/devices/scsi_vhci/disk@g5000cca04e27f490:a
value ------------- Distribution ------------- count
2048 | 0
4096 |@@ 3989
8192 |@@@@@@@@@@@@@@@@@@ 37923
16384 |@@@@@@@@@@@@@@@@@ 36245
32768 |@@ 4046
65536 |@ 2419
131072 | 74
262144 | 19
524288 | 1
1048576 | 0
Привет. А конфиги для vdbench остались?
ReplyDelete