Внимание, пожалуйста. Долго читал.
Во время начальных тестов производительности приводов Hitachi Ultrastar 7K6000, которые я планирую использовать в своей установке Ceph, я заметил странную вещь: производительность записи выше, когда кэш записи на диск отключен.
я использую fio
:
fio --filename=/dev/sda --direct=1 --sync=1 --rw=randwrite --bs=4k --numjobs=1 --iodepth=1 --runtime=60 --time_based --group_reporting --name=4krandw
Когда кэш записи отключен:
hdparm -W 0 /dev/sda
4krandw: (groupid=0, jobs=1): err= 0: pid=6368: Thu Jun 22 07:36:44 2017
write: io=63548KB, bw=1059.9KB/s, iops=264, runt= 60003msec
clat (usec): min=473, max=101906, avg=3768.57, stdev=11923.0
Когда кэш записи включен:
hdparm -W 1 /dev/sda
4krandw: (groupid=0, jobs=1): err= 0: pid=6396: Thu Jun 22 07:39:14 2017
write: io=23264KB, bw=397005B/s, iops=96, runt= 60005msec
clat (msec): min=1, max=48, avg=10.30, stdev= 4.12
Соответствующие детали оборудования:
К сожалению, я не могу придумать разумного объяснения такого поведения, краткое резюме:
UPD: Я протестировал диск с прямым подключением к порту SATA на материнской плате (отдельный контроллер SATA, а не LSI2116), и ничего не изменилось, те же результаты. Итак, я полагаю, это не контроллер SW LSI2116, который дает странные результаты.
UPD2: Интересно, что прирост производительности для последовательных операций, когда кеш отключен ниже, но стабильно. Вот пример:
fio --filename=/dev/sdl --direct=1 --sync=1 --rw=write --bs=16M --numjobs=1 --iodepth=1 --runtime=60 --time_based --group_reporting --name=16M-wr
Запись в кеш включена:
16M-wr: (groupid=0, jobs=1): err= 0: pid=2309: Fri Jun 23 11:52:37 2017
write: io=9024.0MB, bw=153879KB/s, iops=9, runt= 60051msec
clat (msec): min=86, max=173, avg=105.37, stdev= 9.64
Запись в кеш отключен:
16M-wr: (groupid=0, jobs=1): err= 0: pid=2275: Fri Jun 23 11:45:22 2017
write: io=10864MB, bw=185159KB/s, iops=11, runt= 60082msec
clat (msec): min=80, max=132, avg=87.42, stdev= 6.84
И это становится интересным, потому что разница между результатами при включенном и отключенном кешировании - это именно то, что HGST утверждает в своей таблице данных:
https://www.hgst.com/sites/default/files/resources/Ultrastar-7K6000-DS.pdf
• По сравнению с предыдущим поколением 7K4000
...
- Скорость произвольной записи до 3 раз выше благодаря технологии кэширования мультимедиа
- На 25% выше скорость последовательного чтения / записи
Это все еще не объясняет, почему производительность лучше с отключенным кешем записи, однако действительно похоже, что когда кеш записи включен, я получаю производительность, сопоставимую с предыдущей. поколение 7К4000. Без кеша записи скорость произвольной записи в 2,6 раза выше, а последовательной в 1,2 раза.
Гипотез UPD3: В новых накопителях Hitachi Ultrastar есть функция, называемая Медиа-кеш. Это продвинутая техника энергонезависимого кеширования, и вот как она работает (конечно, как я понимаю):
Итак, Media Cache - это двухэтапный кэш с обратной записью, и я думаю, что операция записи считается завершенной только после того, как выполняется сброс в Media Cache.
Должен признать, интересная техника. Моя гипотеза заключается в том, что когда мы отключаем кеширование записи с помощью hdparm -W0
, отключен только медиа-кеш.
Данные кэшируются только в DRAM, а затем сразу сбрасываются на пластины. Хотя Media Cache наверняка должен предоставить большое преимущество, во время синхронной записи мы должны ждать записи в область Media Cache. А когда Media Cache отключен, запись считается завершенной после записи данных в буфер DRAM диска. Намного быстрее. При более низкой глубине очереди кэш DRAM обеспечивает достаточно места для записи без снижения скорости, однако в больших очередях, когда МНОЖЕСТВО сбросов на пластину должно происходить постоянно, ситуация иная. Я провел два теста с QD = 256.
fio --filename=/dev/sda --direct=1 --sync=1 --rw=randwrite --bs=4k --numjobs=1 --iodepth=256 --runtime=180 --time_based --group_reporting --name=4krandwrite
hdparm -W0 /dev/sda (write cache disabled)
4krandwrite: (groupid=0, jobs=1): err= 0: pid=3176: Wed Jun 28 10:11:15 2017
write: io=62772KB, bw=357093B/s, iops=87, runt=180005msec
clat (msec): min=1, max=72, avg=11.46, stdev= 4.95
hdparm -W1 (write cache enabled)
4krandwrite: (groupid=0, jobs=1): err= 0: pid=3210: Wed Jun 28 10:14:37 2017
write: io=70016KB, bw=398304B/s, iops=97, runt=180004msec
clat (msec): min=1, max=52, avg=10.27, stdev= 3.99
Итак, мы ясно видим, что включение кеша записи дает 11,5% преимущество в IOPS и задержке фиксации. Похоже, у меня правильный гипотез и hdparm
контролирует только кэш мультимедиа, но не буфер DRAM. И на большей глубине очереди MC действительно себя окупает.
Однако это не относится к последовательным операциям.
fio --filename=/dev/sda --direct=1 --sync=1 --rw=write --bs=16M --numjobs=1 --iodepth=256 --runtime=180 --time_based --group_reporting --name=16Mseq
hdparm -W0 /dev/sda (write cache disabled)
16Mseq: (groupid=0, jobs=1): err= 0: pid=3018: Wed Jun 28 09:38:52 2017
write: io=32608MB, bw=185502KB/s, iops=11, runt=180001msec
clat (msec): min=75, max=144, avg=87.27, stdev= 6.58
hdparm -W1 /dev/sda (write cache enabled)
16Mseq: (groupid=0, jobs=1): err= 0: pid=2986: Wed Jun 28 09:34:00 2017
write: io=27312MB, bw=155308KB/s, iops=9, runt=180078msec
clat (msec): min=83, max=165, avg=104.44, stdev=10.72
Итак, я полагаю, Media Cache обеспечивает преимущество в скорости при произвольной загрузке записи, для последовательной записи он может использоваться в основном как дополнительный механизм надежности.
UPD4 (похоже, у меня есть ответ)
Я связался со службой поддержки HGST, и они уточнили, что на 7K6000 медиа-кеш активен только когда кэш записи (DRAM) отключен. Итак, похоже, что при низкой глубине очереди Media Cache на самом деле быстрее, чем кеш DRAM. Я думаю, это связано с тем, что Media Cache позволяет последовательно записывать данные в области кеширования независимо от шаблона ввода-вывода. Это значительно сводит к минимуму необходимые движения головки жесткого диска и приводит к повышению производительности. Я все еще хотел бы узнать больше о Media Cache, поэтому пока не отвечаю на свой вопрос. Вместо этого я попросил поддержку предоставить дополнительную техническую информацию о Media Cache. Если я получу, обновлю этот вопрос, добавив дополнительную информацию.
Я все еще буду очень признателен за любые предложения, комментарии или альтернативные объяснения. Заранее спасибо!
Кажется, что последние накопители HGST ведут себя иначе, с hdparm -W0|1
контролирующий обе кэш DRAM и MediaCache. Более того, MediaCache кажется активным на WCE/W1
(кеш включен), а не включен WCD/W0
(кеш отключен).
Посмотрим, как этот диск HGST HUS722T2TALA604 ведет себя на некоторых fio
бежит.
отключенные кеши (hdparm -W0
) и direct
пишет
[root@singularity ~]# fio --name=test --filename=/dev/sda --io_size=4M --direct=1 --rw=randwrite
...
write: IOPS=73, BW=295KiB/s (302kB/s)(4096KiB/13908msec)
...
отключенные кеши (hdparm -W0
), direct
+ sync
пишет
[root@singularity ~]# fio --name=test --filename=/dev/sda --io_size=4M --direct=1 --sync=1 --rw=randwrite
...
write: IOPS=73, BW=295KiB/s (302kB/s)(4096KiB/13873msec)
...
включенные кеши (hdparm -W1
), direct
+ sync
пишет
[root@singularity ~]# fio --name=test --filename=/dev/sda --io_size=4M --direct=1 --sync=1 --rw=randwrite
...
write: IOPS=127, BW=510KiB/s (523kB/s)(4096KiB/8027msec)
...
Соображения:
из direct
против direct+sync
с отключенными кешами мы видим, что hdparm -W0
отключает обе буфер DRAM и MediaCache; в противном случае direct
результаты будут значительно выше, чем direct+sync
ед. Эти результаты идеально соответствуют производительности диска с ограничением поиска 7200 об / мин при ~ 70 IOPS.
при включенных кэшах производительность намного выше, а количество операций ввода-вывода в секунду почти удваивается. Так как sync
предотвращает кеширование только в буфере DRAM, значит, здесь работает MediaCache.
Итак, хотя некоторые другие технологии NVRAM работают на WCD/WC0
(запись в кеш отключена) настройка диска, кажется, что MediaCache требует WCE/WC1
работать.