Производительность софт nvme рейдов на основе mdadm, LVM, ZFS и LVM+vdo

У данной статьи есть две цели:

  1. Протестировать производительность трёх систем объединения физических устройств в одно логическое, как для локального доступа к нему, так и для использования в качестве блочного массива для виртуализации.

  2. Создание бэкэнда для кластера в виде одноконтроллерного хранилища.

Иными словами выводы данной статьи не применимы, когда Вам нужно:

  1. Синхронное отказоустойчивое решение

  2. Надежность >>> скорость

  3. Долговременное решение, которое можно поставить и забыть

В связи со значительным удешевлением NVMe дисков на различных ресурсах (таких как авито) можно найти nvme диски дешевле их аналогов на SATA или SAS интерфейсе с таким же объёмом, но остаётся вопрос в их объединение в один логический диск.

К сожалению, текущие рейд контроллеры для NVMe дисков не отличаются особой дешевизной и\или количеством доступных разъёмов для их подключения, поэтому одним из вариантов является использование программного рейда.

Для тестирования выбраны программные рейды:

Про кажую из выбранных систем можно подробнее почитать:

Для тестирования локального массива были выбраны тесты описанные тут и тут.

Для тестирования блочного массива виртуализации будет использоваться HCIbench, а параметры взяты из следующей статьи.

Тестовый стенд

Сервер виртуализации:

  • Motherboard: Supermicro H11SSL-i

  • CPU: EPYC 7302

  • RAM: 4×64GB Micron 2933MHz

  • Сеть: 40GbE ConnectX-3 Pro, 10GbE/25GbE ConnectX-4 LN EN

  • ОС: ESXi 7U3 build 20036586

Сервер хранения (в дальнейшем гибридный сервер с PCIe Passthrough для тестов блочного хранилища):

  • Motherboard: Tyan S8030 (ver 1GbE)

  • CPU: EPYC 7302

  • RAM: 4×64GB Micron 2933MHz

  • Сеть: 40GbE ConnectX-3 Pro x2

  • Диски 1: 6 x PM9A3 1.92TB, форматированы в 512n

  • Диски 2: 1 x PM1725 3.2ТБ (не участвует в конфигурации рейда, но используется для сравнения)

Софт для тестов на физике:

Софт для тестов поверх виртуализиации (to-be)

Список тестов FIO приведён ниже:

fio -name=seq_mbs_write_T1Q1N1 -ioengine=libaio -direct=1 -invalidate=1 -bs=4M -iodepth=32 -rw=write -runtime=60 -filename=/dev/nvme1n1 && sleep 10 && fio -name=seq_mbs_read_T1Q1N1 -ioengine=libaio -direct=1 -invalidate=1 -bs=4M -iodepth=32 -rw=read -runtime=60 -filename=/dev/nvme1n1 && sleep 10 && fio -name=rand_iops_write_T1Q128N1 -ioengine=libaio -direct=1 -invalidate=1 -bs=4k -iodepth=128 -numjobs=4 -group_reporting -rw=randwrite -runtime=60 -randrepeat=0 -filename=/dev/nvme1n1 && sleep 10 && fio -name=rand_iops_read_T1Q128N1 -ioengine=libaio -direct=1 -invalidate=1 -bs=4k -iodepth=128 -numjobs=4 -group_reporting -rw=randread -runtime=60 -randrepeat=0 -filename=/dev/nvme1n1 && sleep 10 && fio -name=rand_iops_read_T1Q1N1 -randrepeat=0 -ioengine=libaio -direct=1 -invalidate=1 -bs=4k -iodepth=1 -rw=randread -runtime=60 -filename=/dev/nvme1n1 && sleep 10 && fio -name=rand_iops_write_T1Q1N1 -randrepeat=0 -ioengine=libaio -direct=1 -invalidate=1 -bs=4k -iodepth=1 -fsync=1 -rw=randwrite -runtime=60 -filename=/dev/nvme1n1

Рассматриваться будет 2 сценария:

  1. Raid 0 — (все же делают бэкапы) как крайний сценарий производительного решения, когда за сохранность данных (не доступность) отвечает или репликация или бэкапы.

  2. Raid 5 — как хорошая схема для 6 дисков

В качестве блочного доступа будет использоваться iSER и NVMe-oF

Ниже приведена сводная таблица по дискам и график производительности:

Сводная таблица по дискам в системе

(MB/s) NVMe#

NVMe0 (PM1725)

NVMe1 (PM9A3)

NVMe2 (PM9A3)

Последовательная запись 4M qd=32

1 473.50

2 810.50

2 809.00

Последовательное чтение 4M qd=32

5 068.50

5 882.50

5 891.50

Случайная запись 4k qd=128 jobs=16

327.00

2 792.00

2 787.50

Случайное чтение 4k qd=128 jobs=16

3 957.00

4 620.00

4 619.00

Случайная запись 4k qd=1 fsync=1

163.50

233.00

233.50

Случайное чтение 4k qd=1 fsync=1

44.80

90.30

90.40

(MB/s) NVMe#

NVMe3 (PM9A3)

NVMe4 (PM9A3)

NVMe5 (PM9A3)

NVMe6 (PM9A3)

Последовательная запись 4M qd=32

2 807.50

2 811.00

2 809.50

2 810.50

Последовательное чтение 4M qd=32

5 884.00

5 915.00

5 904.50

5 885.50

Случайная запись 4k qd=128 jobs=16

2 793.00

2 789.00

2 779.00

2 796.50

Случайное чтение 4k qd=128 jobs=16

4 615.00

4 537.50

4 526.50

4 619.50

Случайная запись 4k qd=1 fsync=1

231.50

230.00

231.00

232.00

Случайное чтение 4k qd=1 fsync=1

90.65

90.15

90.35

90.70

Сводный график по дискам

Сводный график по дискам

Ссылка на excel файл со всеми данными.

MDADM

Создание mdadm достаточно типично:
mdadm --create --verbose /dev/md0 --level=0 --raid-devices=6 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1 /dev/nvme4n1 /dev/nvme5n1 /dev/nvme6n1

Для 5-ого рейда (Перед началом тестов было выждано 3 часа, пока создавался рейд)
mdadm --create --verbose /dev/md5 --level=5 --raid-devices=6 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1 /dev/nvme4n1 /dev/nvme5n1 /dev/nvme6n1

RAID 0 

mdadm-local-raid0

Последовательная запись 4M qd=32

11 980.80 MB/s

-

Последовательное чтение 4M qd=32

20 275.20 MB/s

-

Случайная запись 4k qd=128 jobs=16

11 827.20 MB/s

2 817 002.93 IOPS

Случайное чтение 4k qd=128 jobs=16

11 622.40 MB/s

2 771 891.56 IOPS

Случайная запись 4k qd=1 fsync=1

172.50 MB/s

42 160.66 IOPS

Случайное чтение 4k qd=1 fsync=1

99.50 MB/s

24 269.23 IOPS

RAID 5

mdadm-local-raid5

Последовательная запись 4M qd=32

1 524.00 MB/s

-

Последовательное чтение 4M qd=32

20 127.90 MB/s

-

Случайная запись 4k qd=128 jobs=16

246.50 MB/s

60 308.72 IOPS

Случайное чтение 4k qd=128 jobs=16

10 547.20 MB/s

2 514 141.78 IOPS

Случайная запись 4k qd=1 fsync=1

30.95 MB/s

7 564.39 IOPS

Случайное чтение 4k qd=1 fsync=1

62.00 MB/s

15 161.99 IOPS

LVM

LVM — для создание используются параметры
lvcreate -i6 -I64 --type striped -l 100%VG -n lvm_stripe stripe
lvcreate -i5 -I64 --type raid5 -l 100%VG -n lvm_raid5 raid

 RAID0

lvm-local-raid0

Последовательная запись 4M qd=32

10 905.60 MB/s

-

Последовательное чтение 4M qd=32

20 480.00 MB/s

-

Случайная запись 4k qd=128 jobs=16

14 080.00 MB/s

3 359 597.24 IOPS

Случайное чтение 4k qd=128 jobs=16

14 080.00 MB/s

3 358 893.54 IOPS

Случайная запись 4k qd=1 fsync=1

221.00 MB/s

53 959.59 IOPS

Случайное чтение 4k qd=1 fsync=1

81.05 MB/s

19 793.28 IOPS

 RAID5

lvm-local-raid5 alloc default

Последовательная запись 4M qd=32

1 158.50 MB/s

Последовательное чтение 4M qd=32

11 980.80 MB/s

Случайная запись 4k qd=128 jobs=16

224.00 MB/s

54 612.865 IOPS

Случайное чтение 4k qd=128 jobs=16

9 356.50 MB/s

2 285 440.25 IOPS

Случайная запись 4k qd=1 fsync=1

17.60 MB/s

4 294.32 IOPS

Случайное чтение 4k qd=1 fsync=1

54.05 MB/s

13 206.84 IOPS

 RAID5

lvm-local-raid5-alloc-normal

Последовательная запись 4M qd=32

1 176.50 MB/s

-

Последовательное чтение 4M qd=32

11 468.80 MB/s

-

Случайная запись 4k qd=128 jobs=16

227.00 MB/s

55 452.76 IOPS

Случайное чтение 4k qd=128 jobs=16

9 311.50 MB/s

2 274 871.33 IOPS

Случайная запись 4k qd=1 fsync=1

23.00 MB/s

5 599.71 IOPS

Случайное чтение 4k qd=1 fsync=1

56.85 MB/s

13 879.59 IOPS

LVM+VDO


Так как на Debian vdo просто нет, даже в виде пакета он добавлялся как модуль к ядру с использованием этого руководиства), тесты проводились с включённым дедупом, так как это параметр по умолчанию.
При создании использовались следующие параметры, так как по умолчанию VDO не поддерживает raid конфигурацию, поэтому пул создавался через lvconvert.

lvcreate -i6 -I64 --type striped -l 100%VG -n stripe-vdo lvm
lvconvert --type vdo-pool --virtualsize 8TB /dev/lvm/stripe-vdo

 RAID0

lvm-vdo-local-raid0

Последовательная запись 4M qd=32

735.00 MB/s

-

Последовательное чтение 4M qd=32

2 279.50 MB/s

-

Случайная запись 4k qd=128 jobs=16

415.50 MB/s

101 344.40 IOPS

Случайное чтение 4k qd=128 jobs=16

901.50 MB/s

220 089.32 IOPS

Случайная запись 4k qd=1 fsync=1

6.14 MB/s

1 534.41 IOPS

Случайное чтение 4k qd=1 fsync=1

39.00 MB/s

9 520.67 IOPS

lvcreate -i6 -I64 --type raid5 -l 100%VG -n lvm_raid5 raid5
lvconvert --type vdo-pool --virtualsize 8TB /dev/lvm/raid5-vdo

 RAID5

lvm-vdo-local-raid5

Последовательная запись 4M qd=32

230.50 MB/s

-

Последовательное чтение 4M qd=32

2 406.50 MB/s

-

Случайная запись 4k qd=128 jobs=16

79.50 MB/s

19 388.92 IOPS

Случайное чтение 4k qd=128 jobs=16

1 536.00 MB/s

374 751.79 IOPS

Случайная запись 4k qd=1 fsync=1

1.59 MB/s

398.57 IOPS

Случайное чтение 4k qd=1 fsync=1

34.25 MB/s

8 329.27 IOPS

ZFS

После каждой группы тестов сервер перезапускался, т.е., к примеру, после тестов stripe 16k и перед тестами на 8k, чтобы однозначно очистить ARC.
Когда выйдет ZFS 3.0 с патчем O_DIRECT для nvme, я расширю её, сейчас же ZFS выглядит следующим образом:

v1 — блок 16k (новые дефолтные параметры), компрессия lz4 (не оказывает влияния на IOPS, по множественным заявлениям и по результатом тестов), дедуп выключен:

zpool create -o ashift=12 -O compression=lz4 -O atime=off -O recordsize=16k nvme /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1 /dev/nvme4n1 /dev/nvme5n1 /dev/nvme6n1
zfs create -s -V 10T -o volblocksize=16k -o compression=lz4 nvme/iser

 Stripe

zfs-local-stripe-16k

Последовательная запись 4M qd=32

2 826.00 MB/s

-

Последовательное чтение 4M qd=32

5 955.00 MB/s

-

Случайная запись 4k qd=128 jobs=16

176.50 MB/s

43 120.67 IOPS

Случайное чтение 4k qd=128 jobs=16

827.00 MB/s

201 500.96 IOPS

Случайная запись 4k qd=1 fsync=1

22.85 MB/s

5 580.61 IOPS

Случайное чтение 4k qd=1 fsync=1

66.35 MB/s

16 209.50 IOPS

 RaidZ

zfs-local-raidZ-16k

Последовательная запись 4M qd=32

1 701.00 MB/s

-

Последовательное чтение 4M qd=32

3 967.00 MB/s

-

Случайная запись 4k qd=128 jobs=16

154.50 MB/s

37 638.80 IOPS

Случайное чтение 4k qd=128 jobs=16

427.50 MB/s

104 231.22 IOPS

Случайная запись 4k qd=1 fsync=1

11.30 MB/s

2 757.17 IOPS

Случайное чтение 4k qd=1 fsync=1

28.75 MB/s

7 017.52 IOPS

2 — блок (старые дефолтные параметры)

zpool create -o ashift=12 -O compression=lz4 -O atime=off -O recordsize=8k nvme /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1 /dev/nvme4n1 /dev/nvme5n1 /dev/nvme6n1
zfs create -s -V 10T -o volblocksize=8k -o compression=lz4 nvme/iser

 Stripe

zfs-local-stripe-8k

Последовательная запись 4M qd=32

1 513.00 MB/s

-

Последовательное чтение 4M qd=32

3 352.00 MB/s

-

Случайная запись 4k qd=128 jobs=16

155.00 MB/s

37 860.44 IOPS

Случайное чтение 4k qd=128 jobs=16

710.00 MB/s

172 631.13 IOPS

Случайная запись 4k qd=1 fsync=1

21.75 MB/s

5 311.53 IOPS

Случайное чтение 4k qd=1 fsync=1

65.55 MB/s

16 005.12 IOPS

 RaidZ

zfs-local-raidZ-8k

Последовательная запись 4M qd=32

1 035.50 MB/s

-

Последовательное чтение 4M qd=32

2 877.00 MB/s

-

Случайная запись 4k qd=128 jobs=16

153.00 MB/s

37 383.61 IOPS

Случайное чтение 4k qd=128 jobs=16

427.50 MB/s

104 453.05 IOPS

Случайная запись 4k qd=1 fsync=1

10.90 MB/s

2 657.64 IOPS

Случайное чтение 4k qd=1 fsync=1

23.45 MB/s

5 716.16 IOPS

v3 - блок 64к (как просто большой блок)

zpool create -o ashift=12 -O compression=lz4 -O atime=off -O recordsize=64k nvme /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1 /dev/nvme4n1 /dev/nvme5n1 /dev/nvme6n1
zfs create -s -V 10T -o volblocksize=64k -o compression=lz4 nvme/iser

Stripe

zfs-local-stripe-64k

Последовательная запись 4M qd=32

4 778.00 MB/s

-

Последовательное чтение 4M qd=32

5 121.00 MB/s

-

Случайная запись 4k qd=128 jobs=16

183.50 MB/s

44 785.15 IOPS

Случайное чтение 4k qd=128 jobs=16

1 062.50 MB/s

259 321.58 IOPS

Случайная запись 4k qd=1 fsync=1

22.80 MB/s

5 559.02 IOPS

Случайное чтение 4k qd=1 fsync=1

65.85 MB/s

16 085.35 IOPS

 RaidZ

zfs-local-raidZ-64k

Последовательная запись 4M qd=32

3 758.00 MB/s

-

Последовательное чтение 4M qd=32

4 269.00 MB/s

-

Случайная запись 4k qd=128 jobs=16

156.00 MB/s

38 111.73 IOPS

Случайное чтение 4k qd=128 jobs=16

1 086.50 MB/s

265 232.02 IOPS

Случайная запись 4k qd=1 fsync=1

17.90 MB/s

4 372.47 IOPS

Случайное чтение 4k qd=1 fsync=1

73.15 MB/s

17 855.23 IOPS

Также для ZFS дополнительно был сделан тест на 64 потока в виде 64 разных файлов на пуле:

recordsize=8k

 Stripe

zfs64-local-stripe-8k

Последовательная запись 4M qd=32

1 242.50 MB/s

Последовательное чтение 4M qd=32

3 123.00 MB/s

Случайная запись 4k qd=128 jobs=16

275.50 MB/s

Случайное чтение 4k qd=128 jobs=16

1 436.00 MB/s

Случайная запись 4k qd=1 fsync=1

196.50 MB/s

Случайное чтение 4k qd=1 fsync=1

1 439.00 MB/s

 RaidZ

zfs64-local-raidZ-8k

Последовательная запись 4M qd=32

981.00 MB/s

Последовательное чтение 4M qd=32

3 756.00 MB/s

Случайная запись 4k qd=128 jobs=16

187.50 MB/s

Случайное чтение 4k qd=128 jobs=16

1 192.50 MB/s

Случайная запись 4k qd=1 fsync=1

138.00 MB/s

Случайное чтение 4k qd=1 fsync=1

1 209.00 MB/s

recordsize=16k

 Stripe

zfs64-local-stripe-16k

Последовательная запись 4M qd=32

2 346.00 MB/s

Последовательное чтение 4M qd=32

4 508.00 MB/s

Случайная запись 4k qd=128 jobs=16

296.50 MB/s

Случайное чтение 4k qd=128 jobs=16

1 248.50 MB/s

Случайная запись 4k qd=1 fsync=1

201.00 MB/s

Случайное чтение 4k qd=1 fsync=1

1 228.50 MB/s

RaidZ 

zfs64-local-raidZ-16k

Последовательная запись 4M qd=32

1 579.00 MB/s

Последовательное чтение 4M qd=32

5 044.00 MB/s

Случайная запись 4k qd=128 jobs=16

186.00 MB/s

Случайное чтение 4k qd=128 jobs=16

1 000.00 MB/s

Случайная запись 4k qd=1 fsync=1

138.00 MB/s

Случайное чтение 4k qd=1 fsync=1

1 003.50 MB/s

recordsize=64k

 Stripe

zfs64-local-stripe-64k

Последовательная запись 4M qd=32

5 252.50 MB/s

Последовательное чтение 4M qd=32

6 260.00 MB/s

Случайная запись 4k qd=128 jobs=16

241.00 MB/s

Случайное чтение 4k qd=128 jobs=16

506.00 MB/s

Случайная запись 4k qd=1 fsync=1

151.00 MB/s

Случайное чтение 4k qd=1 fsync=1

562.00 MB/s

 RaidZ

zfs64-local-raidZ-64k

Последовательная запись 4M qd=32

3 658.50 MB/s

Последовательное чтение 4M qd=32

5 737.50 MB/s

Случайная запись 4k qd=128 jobs=16

177.00 MB/s

Случайное чтение 4k qd=128 jobs=16

460.50 MB/s

Случайная запись 4k qd=1 fsync=1

128.00 MB/s

Случайное чтение 4k qd=1 fsync=1

504.50 MB/s

Сводные графики по тестам:

Последовательная запись 4M qd=32

53f7f1599bc9923a88b9c17cb476c22e.png

Последовательное чтение 4M qd=32

ed35c7f752f05a40e72961aec164d3a3.png

Случайная запись 4k qd=128 jobs=16

59712a98e5da256ab6a9cbbb143e629e.png

Случайное чтение 4k qd=128 jobs=16

e4083268493ae0a5cb66967959c0518e.png

Случайная запись 4k qd=1 fsync=1

feba91c3d43e8a655cd6c3fec3b543d6.png

Случайное чтение 4k qd=1 fsync=1

511b7565c4f029bb210d690f908bebe7.png

Вывод

mdadm и stripe LVM имеют ± одинаковую производительность, при этом vdo с настройками по умолчанию в режиме stripe демонстрирует производительность (для случайных операций) на уровне ZFS.

ZFS на 64 впрочем вырывается вперёд в тестах qd=1, так как он игнорируется fsync и эффективно это 64 операции для данного теста. В чтении на 64 одних потока же прекрасное работает ARC.

В стандартном состоянии — ZFS демонстрирует то, что ожидаешь от CoW системы ориетированной на HDD. Не особо быструю производительность на NVMe. Особенно грустно со случайным чтением с большое очередью.

Если строить таблицу беря mdadm за 100% получится следующая картина:

Raid0/Stripe

Raid0/Stripe

mdadm-raid0

lvm-raid0

lvm-vdo-raid0

zfs-8k

Последовательная запись 4M qd=32

100.00%

91.03%

6.13%

12.63%

Последовательное чтение 4M qd=32

100.00%

101.01%

11.24%

16.53%

Случайная запись 4k qd=128 jobs=16

100.00%

119.05%

3.51%

1.31%

Случайное чтение 4k qd=128 jobs=16

100.00%

121.15%

7.76%

6.11%

Случайная запись 4k qd=1 fsync=1

100.00%

128.12%

3.56%

12.61%

Случайное чтение 4k qd=1 fsync=1

100.00%

81.46%

39.20%

65.88%

Raid0/Stripe

zfs-16k

zfs-64k

zfs64–8k

zfs64–16k

zfs64–64k

Последовательная запись 4M qd=32

23.59%

39.88%

10.37%

19.58%

43.84%

Последовательное чтение 4M qd=32

29.37%

25.26%

15.40%

22.23%

30.88%

Случайная запись 4k qd=128 jobs=16

1.49%

1.55%

2.33%

2.51%

2.04%

Случайное чтение 4k qd=128 jobs=16

7.12%

9.14%

12.36%

10.74%

4.35%

Случайная запись 4k qd=1 fsync=1

13.25%

13.22%

113.91%

116.52%

87.54%

Случайное чтение 4k qd=1 fsync=1

66.68%

66.18%

1446.23%

1234.67%

564.82%

Отдельно сравнение ZFS 16k с\без дедупа:

zfs-local-stripe-16k

zfs-local-stripe-16k-dedup

Последовательная запись 4M qd=32

100.00%

27.16%

Последовательное чтение 4M qd=32

100.00%

102.38%

Случайная запись 4k qd=128 jobs=16

100.00%

53.57%

Случайное чтение 4k qd=128 jobs=16

100.00%

97.94%

Случайная запись 4k qd=1 fsync=1

100.00%

97.16%

Случайное чтение 4k qd=1 fsync=1

100.00%

105.05%

Raid5/RaidZ

Raid5/RaidZ

mdadm-raid5

lvm-raid5

lvm-raid5-alloc-normal

lvm-vdo-raid5

zfs-local-raidZ-8k

Последовательная запись 4M qd=32

100.00%

76.02%

77.20%

15.12%

67.95%

Последовательное чтение 4M qd=32

100.00%

59.52%

56.98%

11.96%

14.29%

Случайная запись 4k qd=128 jobs=16

100.00%

90.87%

92.09%

32.25%

62.07%

Случайное чтение 4k qd=128 jobs=16

100.00%

88.71%

88.28%

14.56%

4.05%

Случайная запись 4k qd=1 fsync=1

100.00%

56.87%

74.31%

5.13%

35.22%

Случайное чтение 4k qd=1 fsync=1

100.00%

87.18%

91.69%

55.24%

37.82%

Raid5/RaidZ

zfs-raidZ-16k

zfs-raidZ-64k

zfs64-raidZ-8k

zfs64-raidZ-16k

zfs64-raidZ-64k

Последовательная запись 4M qd=32

111.61%

246.59%

64.37%

103.61%

240.06%

Последовательное чтение 4M qd=32

19.71%

21.21%

18.66%

25.06%

28.51%

Случайная запись 4k qd=128 jobs=16

62.68%

63.29%

76.06%

75.46%

71.81%

Случайное чтение 4k qd=128 jobs=16

4.05%

10.30%

11.31%

9.48%

4.37%

Случайная запись 4k qd=1 fsync=1

36.51%

57.84%

445.88%

445.88%

413.57%

Случайное чтение 4k qd=1 fsync=1

46.37%

117.98%

1950.00%

1618.55%

813.71%

Для дальнейших тестов с использованием iSER будут использоваться 3 основных варианта:

P.S. Если Вы считаете, что эти тесты неполные, в них что-то упущено или они некорректно — я открыт к любым предложениям по их дополнению.

Для теста zfs64 был использован следующий формат команды:

fio -name=test1 -ioengine=libaio -direct=1 -invalidate=1 -bs=4M -iodepth=32 -rw=write -runtime=60 -filesize=20G >> zfs64-.txt && echo »***» >> zfs64-.txt && sleep 30 && fio -name=test1 -ioengine=libaio -direct=1 -invalidate=1 -bs=4M -iodepth=32 -rw=read -runtime=60 -filesize=20G >> zfs64-.txt && echo »***» >> zfs64-.txt && sleep 30 && fio -name=test1 -ioengine=libaio -direct=1 -invaqdlidate=1 -bs=4k -iodepth=128 -numjobs=16 -group_reporting -rw=randwrite -runtime=60 -randrepeat=0 -filesize=20G >> zfs64-.txt && echo »***» >> zfs64-.txt && sleep 30 && fio -name=test1 -ioengine=libaio -direct=1 -invalidate=1 -bs=4k -iodepth=128 -numjobs=16 -group_reporting -rw=randread -runtime=60 -randrepeat=0 -filesize=20G >> zfs64-.txt && echo »***» >> zfs64-.txt && sleep 30 && fio -name=test1 -ioengine=libaio -direct=1 -randrepeat=0 -rw=randwrite -bs=4k -numjobs=1 -iodepth=1 -fsync=1 -runtime=60 -filesize=20G >> zfs64-.txt && echo »***» >> zfs64-.txt && sleep 30 && fio -name=test1 -ioengine=libaio -direct=1 -randrepeat=0 -rw=randread -bs=4k -numjobs=1 -iodepth=1 -fsync=1 -runtime=60 -filesize=20G >> zfs64-.txt && echo »###» >> zfs64-.txt && sleep 60 && fio -name=test1 -ioengine=libaio -direct=1 -invalidate=1 -bs=4M -iodepth=32 -rw=write -runtime=60 -filesize=20G >> zfs64-.txt && echo »***» >> zfs64-.txt && sleep 30 && fio -name=test1 -ioengine=libaio -direct=1 -invalidate=1 -bs=4M -iodepth=32 -rw=read -runtime=60 -filesize=20G >> zfs64-.txt && echo »***» >> zfs64-.txt && sleep 30 && fio -name=test1 -ioengine=libaio -direct=1 -invalidate=1 -bs=4k -iodepth=128 -numjobs=16 -group_reporting -rw=randwrite -runtime=60 -randrepeat=0 -filesize=20G >> zfs64-.txt && echo »***» >> zfs64-.txt && sleep 30 && fio -name=test1 -ioengine=libaio -direct=1 -invalidate=1 -bs=4k -iodepth=128 -numjobs=16 -group_reporting -rw=randread -runtime=60 -randrepeat=0 -filesize=20G >> zfs64-.txt && echo »***» >> zfs64-.txt && sleep 30 && fio -name=test1 -ioengine=libaio -direct=1 -randrepeat=0 -rw=randwrite -bs=4k -numjobs=1 -iodepth=1 -fsync=1 -runtime=60 -filesize=20G >> zfs64-.txt && echo »***» >> zfs64-.txt && sleep 30 && fio -name=test1 -ioengine=libaio -direct=1 -randrepeat=0 -rw=randread -bs=4k -numjobs=1 -iodepth=1 -fsync=1 -runtime=60 -filesize=20G >> zfs64-.txt && echo »***» >> zfs64-.txt

© Habrahabr.ru