У меня нет никаких альтернатив, чтобы рекомендовать, но я могу дать предложения о том, как ускорить sshfs
sshfs -o cache_timeout=115200 -o attr_timeout=115200 ...
Это должно исключить некоторые запросы туда-обратно, когда вы пытаетесь прочитать содержимое или разрешения для файлов, которые вы уже получили ранее в своем сеансе.
sshfs имитирует удаление и изменения локально, поэтому новые изменения, сделанные на локальном компьютере, должны появиться немедленно, несмотря на большие таймауты, поскольку кэшированные данные автоматически удаляются.
Но эти параметры не рекомендуются, если удаленные файлы могут обновляться без ведома локальной машины, например, другим пользователем или удаленной оболочки ssh. В этом случае более низкие тайм-ауты были бы предпочтительнее.
Вот еще несколько вариантов, с которыми я экспериментировал, хотя я не уверен, что какой-то из них имел значение:
sshfs_opts="-o auto_cache -o cache_timeout=115200 -o attr_timeout=115200 \
-o entry_timeout=1200 -o max_readahead=90000 -o large_read -o big_writes \
-o no_remote_lock"
Вам также следует проверить варианты, рекомендованные Митаем в его ответе.
Рекурсия
Самая большая проблема в моем рабочем процессе - это когда я пытаюсь прочитать много папок, например, в глубоком дереве, потому что sshfs выполняет запрос туда-обратно для каждой папки отдельно. Это также может быть узким местом, которое вы испытываете с Eclipse.
В этом может помочь параллельное выполнение запросов к нескольким папкам, но большинство приложений этого не делают: они были разработаны для файловых систем с малой задержкой и кэшированием с опережающим чтением, поэтому они ждут завершения одной статистики файла, прежде чем переходить к следующей. ,
Предварительное кэширование
Но что-то, что может сделать sshfs, это посмотреть в будущее на удаленную файловую систему, собрать статистику папок, прежде чем я их запрошу, и отправить их мне, когда соединение не будет сразу занято. Это будет использовать большую полосу пропускания (из прогнозных данных, которые никогда не используются), но может повысить скорость.
Мы можем заставить sshfs выполнить некоторое кэширование с опережением чтения, выполнив это до того, как вы начнете выполнять свою задачу, или даже в фоновом режиме, когда ваша задача уже выполняется:
find project/folder/on/mounted/fs > /dev/null &
Это должно предварительно кэшировать все записи каталога, уменьшая некоторые последующие издержки из-за циклических переходов. (Конечно, вам нужно использовать большие тайм-ауты, подобные тем, которые я предоставил ранее, или эти кэшированные данные будут удалены до того, как ваше приложение получит к ним доступ.)
Но это find
займет много времени. Как и другие приложения, он ожидает результатов из одной папки, а затем запрашивает следующую.
Можно сократить общее время, попросив несколько процессов поиска просматривать разные папки. Я не проверял, действительно ли это более эффективно. Это зависит от того, разрешает ли sshfs запросы параллельно. (Я думаю, что это так.)
find project/folder/on/mounted/fs/A > /dev/null &
find project/folder/on/mounted/fs/B > /dev/null &
find project/folder/on/mounted/fs/C > /dev/null &
Если вы также хотите предварительно кэшировать содержимое файла, вы можете попробовать это:
tar c project/folder/on/mounted/fs > /dev/null &
Очевидно, что это займет гораздо больше времени, передаст много данных и потребует огромного размера кэша. Но когда это сделано, доступ к файлам должен быть приятным и быстрым.