(Обратите внимание, что на самом деле это не программный вопрос, поэтому Stackoverflow - неправильное место, чтобы задавать этот вопрос ... Может быть, Суперпользователь или Ошибка сервера будет лучшим выбором и будет быстрее ответы?)
Результат очень подозрительный. docker работает почти в 50 раз лучше, чем мой хост-компьютер, что невозможно. Похоже, что docker вообще не обходит кеширование.
Если задержки в вашем лучшем случае подозрительно малы по сравнению с задержками в худшем случае, весьма вероятно, что ваши подозрения обоснованы и что кэширование ядра все еще происходит. Запрос O_DIRECT
является подсказкой, а не приказом, и файловая система может все равно игнорировать его и использовать кэш (см. Часть о «Вы запрашиваете прямой ввод-вывод файла в файловая система, но ... ").
Если у вас есть опция и вас интересует скорость диска, лучше провести любой такой тест вне контейнера (со всеми вытекающими отсюда предостережениями). Другой вариант, когда вы не можете / не хотите отключать кэширование, - это убедиться, что вы выполняете ввод-вывод, который по крайней мере в два-три раза больше (как с точки зрения количества, так и используемого региона) оперативной памяти, поэтому большинство I / O не может быть удовлетворен буферами / кешем (и если вы делаете write I / O, тогда сделайте что-то вроде end_fsync=1
).
В итоге, файловая система, используемая docker, может сделать невозможным точное выполнение того, что вы запрашиваете (измеряйте скорость диска, обходя кэш, используя любую файловую систему по умолчанию docker).