#caching #linux-kernel #ld
#кэширование #linux-ядро #ld
Вопрос:
При связывании исполняемых файлов (более 200) в большом проекте я получаю скорость соединения 0,5 исполняемых файла в секунду, даже если я запустил этап соединения за минуту до этого. vmstat показывает скорость чтения с диска более 20 МБ / с.
Но если я предварительно кэширую каталог сборки, используя «tar cf / dev / null build-dir» один раз, я получаю постоянную скорость соединения 4,8 исполняемых файлов в секунду, а скорость чтения с диска практически равна нулю.
Почему Linux не кэширует объектные файлы и / или файлы «.so», когда они считываются компоновщиком GNU, но делает это, когда они считываются tar? Оперативной памяти достаточно (16 ГБ). Версия ядра 4.4.146. CentOS 7.5.
Комментарии:
1. Вы используете жесткий диск, а не SSD?
2. Да, каталог сборки в настоящее время находится на обычном жестком диске. Раньше он был на SSD, но я убрал его, чтобы увеличить нагрузку на диск во время сборки, поскольку компьютер перестал отвечать. Я полагаю, что алгоритм кэширования одинаков для SSD, поэтому причиной отсутствия ответа была та же проблема с кэшированием.
Ответ №1:
Похоже, что причиной этого неправильного поведения была неправильная настройка vm.vfs_cache_pressure = 1000. Установка значения 70 устранила проблему и восстановила хорошую производительность кэша.
И документация явно рекомендует не увеличивать значение выше 100. К сожалению, интернет полон примеров с безумными значениями, такими как 1000.