И сервер, и клиент являются 64-битными Ubuntu 10.04 LTS.
Рассматриваемое приложение является настраиваемым приложением, которое использует mmap()
для быстрого произвольного доступа к файлам. Идеальное состояние - когда весь файл кэшируется в ОЗУ.
Сетевые соединения действительно быстрые 10Gb Ethernet. Это установка блейд-сервера виртуального сервера.
Дело не в сетевых подключениях, которые замедляют работу, потому что все работает отлично при использовании виртуального диска (iSCSI для SAN). Но когда мы запускаем приложение на монтировании домашнего каталога NFS, производительность падает.
Похоже, что ядро Linux не кеширует что-нибудь. Таким образом, он читает каждый блок диска, необходимый для mmap()
доступ снова и снова и снова.
Монтирование NFS выполняется через autofs, который имеет только настройки по умолчанию. /proc/mounts
показывает, что монтирование NFS выполняется со следующими параметрами:
rw, relatime, vers = 3, rsize = 131072, wsize = 131072, namlen = 255, hard, proto = tcp, timeo = 600, retrans = 2, sec = sys, mountaddr = 192.168.11.52, mountvers = 3, mountproto = tcp, адрес = 192.168.11.52
Как я могу заставить Ubuntu 10.04 кэшировать файл вместо постоянной его перезагрузки?
Вы вообще настраивали экспорт или монтирование NFS? Какие у вас сейчас варианты крепления? Какую файловую систему вы используете на сервере NFS?
Я знаю, что вы используете Ubuntu, но это Руководство по настройке NFS от Red Hat может быть хорошим началом, особенно если у вас есть хороший показатель производительности для тестирования с другими настройками. Некоторые из советов в документе касаются ограничения изменений метаданных при доступе к файлам через NFS и расширения кеша атрибутов.
Является Кеширование NFS (FS-Cache, CacheFS) вариант в этом случае?