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

пожалуйста, объясните мои результаты fio - O_SYNC | O_DIRECT плохо себя ведет в Linux?

Я схожу с ума по поводу того, в чем проблема может быть с одним из наших ящиков для хранения вещей. С помощью простого скрипта fio я тестирую случайные записи, используя bs = 1M и direct = 1. SSD - это Samsung 840pro, подключенный к HBA LSI (порты 3 Гбит / с).

Вот результат, который я получаю под FreeBSD 9.1:

WRITE: io=13169MB, aggrb=224743KB/s, minb=224743KB/s, maxb=224743KB/s, mint=60002msec,   maxt=60002msec

Это независимо от того, установлена ​​ли синхронизация на 0 или 1.

В linux это результат с sync = 0:

WRITE: io=14828MB, aggrb=253060KB/s, minb=253060KB/s, maxb=253060KB/s, mint=60001msec, maxt=60001msec

и с sync = 1:

WRITE: io=6360.0MB, aggrb=108542KB/s, minb=108542KB/s, maxb=108542KB/s, mint=60001msec, maxt=60001msec

Я понимаю, что, поскольку я работаю на необработанном блочном устройстве, O_SYNC не должен иметь никакого значения - нет файловой системы, какого-либо барьера, ничего между записью и самим приводом. Особенно с установленным O_DIRECT | O_SYNC.

Любые идеи?

Для справки, вот сценарий fio, с которым я тестирую:

[global]
bs=1M
ioengine=sync
iodepth=4
size=16g
direct=1
runtime=60
filename=/dev/sdh
sync=1

[rand-write]
rw=randwrite
stonewall

Разработчик ядра Linux Кристоф Хеллвиг ответил Золтану по электронной почте о O_SYNC на блочных устройствах Linux:

Для потребительских дисков использование O_SYNC в Linux действительно имеет огромное значение, потому что он очищает кеш записи на диск после завершения, чтобы обеспечить соблюдение гарантий O_SYNC, что данные попали в физическое хранилище.

Похоже, что FreeBSD может упустить этот вызов.