Tôi không có bất kỳ lựa chọn thay thế nào để giới thiệu, nhưng tôi có thể cung cấp các đề xuất về cách tăng tốc độ sshfs:
sshfs -o cache_timeout=115200 -o attr_timeout=115200 ...
Điều này sẽ tránh một số yêu cầu chuyến đi khứ hồi khi bạn đang cố đọc nội dung hoặc quyền cho các tệp mà bạn đã truy xuất trước đó trong phiên.
sshfs mô phỏng xóa và thay đổi cục bộ, vì vậy những thay đổi mới được thực hiện trên máy cục bộ sẽ xuất hiện ngay lập tức, mặc dù thời gian chờ lớn, vì dữ liệu được lưu trong bộ nhớ cache sẽ tự động bị hủy.
Nhưng các tùy chọn này không được khuyến nghị nếu các tệp từ xa có thể được cập nhật mà máy cục bộ không biết, ví dụ: bởi một người dùng khác hoặc vỏ ssh từ xa. Trong trường hợp đó, thời gian chờ thấp hơn sẽ được ưu tiên.
Dưới đây là một số tùy chọn khác mà tôi đã thử nghiệm, mặc dù tôi không chắc liệu có bất kỳ tùy chọn nào trong số chúng tạo ra sự khác biệt không:
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"
Bạn cũng nên kiểm tra các tùy chọn được đề xuất bởi Meetai trong câu trả lời của anh ấy.
Đệ quy
Vấn đề lớn nhất trong quy trình làm việc của tôi là khi tôi cố gắng đọc nhiều thư mục, ví dụ như trong một cây sâu, bởi vì sshfs thực hiện một yêu cầu chuyến đi khứ hồi cho từng thư mục riêng biệt. Đây cũng có thể là nút cổ chai mà bạn gặp phải với Eclipse.
Việc yêu cầu song song nhiều thư mục có thể giúp ích cho việc này, nhưng hầu hết các ứng dụng không làm được điều đó: chúng được thiết kế cho các hệ thống tệp có độ trễ thấp với bộ nhớ đệm đọc trước, vì vậy chúng chờ một stat tệp hoàn thành trước khi chuyển sang tiếp theo .
Chuẩn bị
Nhưng một cái gì đó sshfs có thể làm là nhìn về phía trước hệ thống tệp từ xa, thu thập số liệu thống kê thư mục trước khi tôi yêu cầu và gửi chúng cho tôi khi kết nối không bị chiếm đóng ngay lập tức. Điều này sẽ sử dụng nhiều băng thông hơn (từ dữ liệu lookahead không bao giờ được sử dụng) nhưng có thể cải thiện tốc độ.
Chúng tôi có thể buộc sshfs thực hiện một số bộ nhớ đệm đọc trước, bằng cách chạy này trước khi bạn bắt đầu nhiệm vụ hoặc thậm chí ở chế độ nền khi nhiệm vụ của bạn đang được tiến hành:
find project/folder/on/mounted/fs > /dev/null &
Điều đó sẽ lưu trước bộ đệm tất cả các mục trong thư mục, giảm một số chi phí sau này từ các chuyến đi khứ hồi. (Tất nhiên, bạn cần sử dụng thời gian chờ lớn như những gì tôi đã cung cấp trước đó hoặc dữ liệu được lưu trong bộ nhớ cache này sẽ bị xóa trước khi ứng dụng của bạn truy cập vào nó.)
Nhưng điều đó find
sẽ mất một thời gian dài. Giống như các ứng dụng khác, nó chờ kết quả từ một thư mục trước khi yêu cầu thư mục tiếp theo.
Có thể giảm thời gian tổng thể bằng cách yêu cầu nhiều quá trình tìm kiếm xem xét các thư mục khác nhau. Tôi đã không thử nghiệm để xem điều này thực sự hiệu quả hơn. Nó phụ thuộc vào việc sshfs cho phép các yêu cầu song song. (Tôi nghĩ rằng nó làm.)
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 &
Nếu bạn cũng muốn lưu trước nội dung tệp, bạn có thể thử điều này:
tar c project/folder/on/mounted/fs > /dev/null &
Rõ ràng việc này sẽ mất nhiều thời gian hơn, sẽ truyền rất nhiều dữ liệu và đòi hỏi bạn phải có kích thước bộ đệm rất lớn. Nhưng khi hoàn thành, việc truy cập các tệp sẽ cảm thấy tốt và nhanh chóng.