У мене немає альтернатив, які можна рекомендувати, але я можу надати пропозиції, як пришвидшити 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, - це заглянути вперед до віддаленої файлової системи, зібрати статистику папок, перш ніж я їх запитую, і надіслати їх мені, коли з'єднання не одразу зайняте. Це використовувало б більшу пропускну здатність (з даних lookahead, які ніколи не використовуються), але може підвищити швидкість.
Ми можемо змусити 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 &
Очевидно, це займе набагато більше часу, передасть багато даних і вимагає від вас величезного розміру кешу. Але коли це зроблено, доступ до файлів повинен відчувати себе добре і швидко.