Назад | Перейти на главную страницу

Низкое количество операций ввода-вывода в секунду при произвольном чтении для 5 твердотельных накопителей при аппаратной настройке RAID5

У нас есть 5 твердотельных накопителей Toshiba Px04Srb192 (270K произвольного чтения IOP в соответствии со спецификацией), настройка в аппаратном Raid5. Запуск fio дает 250 000 операций ввода-вывода в секунду, что намного ниже того, что я ожидал.

/fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=/ae/disk1/test --bs=4k --iodepth=96 --numjobs=1 --size=8g --readwrite=randread

test: (g=0): rw=randread, bs=4K-4K/4K-4K, ioengine=libaio, iodepth=96
fio-2.0.9
Starting 1 process
Jobs: 1 (f=1): [r] [100.0% done] [961.6M/0K /s] [246K/0  iops] [eta 00m:00s]
test: (groupid=0, jobs=1): err= 0: pid=342604: Tue Feb 12 23:58:01 2019
  read : io=8192.0MB, bw=991796KB/s, iops=247948 , runt=  8458msec
  cpu          : usr=10.88%, sys=87.74%, ctx=437, majf=0, minf=115
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.1%
     issued    : total=r=2097152/w=0/d=0, short=r=0/w=0/d=0

Run status group 0 (all jobs):
   READ: io=8192.0MB, aggrb=991795KB/s, minb=991795KB/s, maxb=991795KB/s, mint=8458msec, maxt=8458msec

Disk stats (read/write):
  sdb: ios=2083688/0, merge=0/0, ticks=265238/0, in_queue=265020, util=98.53

lspci -nn | grep RAID
18:00.0 RAID bus controller [0104]: LSI Logic / Symbios Logic MegaRAID Tri-Mode SAS3508 [1000:0016] (rev 01)

Я ожидал, что IOP у 5 SSD будет как минимум в 2 раза больше, чем у отдельного SSD. Это правильно? Есть предложения, почему мы наблюдаем низкие показатели ВГД?

(Ваша версия fio древняя! https://github.com/axboe/fio/releases чтобы увидеть, чего достиг апстрим ...)

Отзывы, которые вы получаете в других ответах, хороши, но я хотел бы выделить это:

  cpu          : usr=10.88%, sys=87.74%, ctx=437, majf=0, minf=115

Если сложить процентное соотношение вашего пользовательского пространства и ядра системы, мы получим 98,62%. Настоятельно рекомендуется, чтобы у вас не осталось процессорного времени для отправки дополнительных операций ввода-вывода (обратите внимание, что вы уже используете более быструю полосу gtod_reduce=1 я обычно не рекомендую, но в вашем случае это выглядит уместно).

Но есть еще кое-что ...

  sdb: ios=2083688/0, merge=0/0, ticks=265238/0, in_queue=265020, util=98.53

Это намекает на то, что «диск», который представляет ваш RAID-контроллер, очень занят (посмотрите на это util процент). Об этом следует помнить.

Вы выполняете ввод-вывод через файл в файловой системе (/ae/disk1/)? Если да, то знаете ли вы, что файловая система будет накладывать некоторые накладные расходы и может не предлагать O_DIRECT поведение, которого вы ожидаете? Вероятно, вы захотите начать с выполнения операций ввода-вывода на уровне блоков (т.е. /dev/sdb) и работайте над тем, чтобы иметь возможность атрибутировать любые накладные расходы (ВНИМАНИЕ: будьте осторожны - fio может уничтожить данные при неправильном использовании).

Если вы действительно собираетесь ехать быстрее, я думаю, вам нужно:

  • Выполняйте ввод-вывод на уровне блочного устройства.
  • Используйте несколько потоков или процессов (например, увеличивая numjobs). Таким образом, потоки / процессы fio, вероятно, будут мигрировать на разные процессоры (но обратите внимание, что все идет за свою цену) ...
  • Начните настраивать fio, чтобы отправлять и получать операции ввода-вывода партиями.
  • Начните настраивать ядро.

Как я уже сказал, большинству людей редко приходится зайти так далеко, но, возможно, вы - одно из исключений :-). Ответ в ветке списка рассылки fio "Re: Рекомендуемый файл задания для стресс-тестирования PCI-E"упоминает об этом:

Вы можете увидеть преимущество (больше нагрузки на диск), используя потоки (поток), а не процессы. Вам также может потребоваться использовать более одного потока на диске. Видеть http://fio.readthedocs.io/en/latest/fio_doc.html для дополнительных опций. Обе https://www.spinics.net/lists/fio/msg05451.html и http://marc.info/?l=linux-kernel&m=140313968523237&w=2 приведите примеры людей, использующих fio для управления высокой нагрузкой, чтобы они были более полезными.

Во-первых, вы ожидаете 270 тыс. Операций ввода-вывода в секунду в соответствии со спецификацией, но какой размер блока требуется для соответствия этому значению? это на самом деле размер 4k io в спецификации?

Во-вторых, если вы используете один поток io для тестирования своего raid5, вы никогда не сможете показать общую производительность чтения вашего raid5. Каждое чтение io обслуживается только 1 диском SSD. Поэтому вам нужно увеличить количество рабочих (параметр fio numjobs) как минимум до 5.