2007-08-08

atime or noatime? that's the question

на lkml торвальдс начал немаленький флейм, посвященный вопросам производительности ФС и ипции atime.
некоторые разработчики заявляют, что noatime позволяет получить прирост производительности интенсивного чтения с диска до 50%

ну и соответственно я решил это протестить. заодно потестить не только на екст3, на которую лились все обвинения, но и рейзер.
суть теста: рекурсивный греп по дереву портежа. с atime, и без него. поиск на время. причем в 2х режимах: с "холодным" кешем, и с прокешированым деревом. тест повторю по 2 раза.
почему именно портеж? потому что на большом количестве файлов большее количество раз надо выполнять обновление atime, следовательнее будет более заметен результат. другими аналогичными примерами могли бы быть: компиляция большой программы, работа почтового сервера под большой нагрузкой, и т.д.

1) рейзер (3я версия, из 2.6.23-гит6), atime
Cold cache:
real 5m12.021s
user 0m13.316s
sys 0m7.575s
Warm cache:
real 3m39.969s
user 0m13.341s
sys 0m6.831s

Cold cache:
real 5m43.197s
user 0m13.491s
sys 0m8.068s
Warm cache:
real 5m19.285s
user 0m13.426s
sys 0m8.343s


2) рейзер (3я версия, из 2.6.23-гит6), noatime
Cold cache:
real 4m26.874s
user 0m13.172s
sys 0m7.058s
Warm cache:
real 2m57.963s
user 0m13.373s
sys 0m6.871s

Cold cache:
real 4m24.752s
user 0m13.237s
sys 0m7.149s
Warm cache:
real 2m47.410s
user 0m13.277s
sys 0m6.116s


3) екст3 (2.6.23-гит6), atime
Cold cache:
real 10m34.207s
user 0m13.986s
sys 0m6.704s
Warm cache:
real 0m16.512s
user 0m13.073s
sys 0m2.427s

Cold cache:
real 10m51.976s
user 0m13.450s
sys 0m6.677s
Warm cache:
real 0m16.305s
user 0m13.018s
sys 0m2.445s


4) екст3 (2.6.23-гит6), noatime
Cold cache:
real 8m36.656s
user 0m13.007s
sys 0m5.223s
Warm cache:
real 0m14.773s
user 0m12.878s
sys 0m1.892s

Cold cache:
real 8m29.148s
user 0m12.869s
sys 0m5.148s
Warm cache:
real 0m14.791s
user 0m12.895s
sys 0m1.894s


что сразу заметно:
  • с использованием кеша екст3 - просто молния
  • дир_индекс намного быстре происходит работа с большими каталогами
  • разнице atime - noatime хоть и не вдвое, но все-таки весьма заметна
  • на портеже рейдер эффективнее чем екст :(
причина 1го - то, что рейзер использует свои, оптимизированные, функции работы с блочными устройствами. и не смотря на все заявления ганса, это вовсе не плюс, т.к. их никто фактически не поддерживает и не развивает, и она не использует многие достижения подсистемы ио линукса.

причина 2го - то что с использованием dir_index содержимое каталого хешируеться и храниться в бинарном дереве - точно так же как и на рейзере. но на экст3 это делаеться не со всеми каталогами (в моем случае - меньше трети) - потому экст3 и проигрывает. хотя экст4, которую я тестировал приблизительно в таких же условиях - порвала рейзер в клочья.

выводы: все использую noatime. часто вместо него имеет смысл использовать inotify. или mtime.

Немає коментарів: