Я схожу с ума по поводу того, в чем проблема может быть с одним из наших ящиков для хранения вещей. С помощью простого скрипта 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
Для потребительских дисков использование O_SYNC в Linux действительно имеет огромное значение, потому что он очищает кеш записи на диск после завершения, чтобы обеспечить соблюдение гарантий O_SYNC, что данные попали в физическое хранилище.
Похоже, что FreeBSD может упустить этот вызов.