Я пишу код C с некоторыми ограничениями в реальном времени. Я проверил скорость записи на диск с помощью dd:
dd if = / dev / zero = = dev / sdb bs = 32K count = 32768 oflag = direct
Записывает 1 ГБ нулей в / dev / sdb с размером блока 32 КБ
Я достигаю около 103 МБ / с с этим
Теперь я программно делаю нечто подобное:
open("/dev/sdb",O_WRONLY|O_CREAT|O_DIRECT|O_TRUNC, 0666);
Я получаю значение метки времени
запись из буфера 32K в / dev / sdb 10000 раз (в цикле for)
получить другое значение метки времени
немного увеличьте число, чтобы получить скорость в МБ / с, и она составляет около 49 МБ / с
Почему я не могу достичь той же скорости, что и дд? Strace показывает ту же команду открытия, которую я использую.