modo più veloce per montare un file system remoto rispetto a sshfs?


72

Ho usato sshfs per lavorare in remoto, ma è davvero lento e fastidioso, in particolare quando uso eclissi su di esso.

Esiste un modo più veloce per montare il file system remoto localmente? La mia priorità n. 1 è la velocità.

La macchina remota è Fedora 15, la macchina locale è Ubuntu 10.10. Posso anche usare Windows XP localmente se necessario.

Risposte:


14

sshfs sta usando il protocollo di trasferimento file SSH, che significa crittografia.

Se monti semplicemente tramite NFS, è ovviamente più veloce, perché non crittografato.

stai provando a montare volumi sulla stessa rete? quindi utilizzare NFS .


35
Non è lento a causa della crittografia, è lento perché è FUSE e continua a controllare lo stato del file system.
wt

3
@ w00t Non penso che sia FUSE che lo rallenta e non la crittografia. La modifica della crittografia in arcfour l'ha accelerata per me, mentre l'utilizzo è scpstato altrettanto lento sshfs.
Sparhawk,

21
@Sparhawk c'è una differenza tra velocità effettiva e latenza. FUSE offre una latenza piuttosto elevata perché deve controllare molto lo stato del filesystem usando alcuni mezzi piuttosto inefficienti. arcfour offre un buon throughput perché la crittografia è più semplice. In questo caso la latenza è molto importante perché è ciò che rende l'editor lento nell'elencare e nel caricare i file.
w00t,

3
@ w00t. Ah ok. Punti buoni.
Sparhawk,

41

Se è necessario migliorare la velocità per le connessioni sshfs, provare queste opzioni:

oauto_cache,reconnect,defer_permissions,noappledouble,nolocalcaches,no_readahead

il comando sarebbe:

sshfs remote:/path/to/folder local -oauto_cache,reconnect,defer_permissions

1
Grazie, ha lavorato per me! Ho dovuto rimuovere defer_permissionsperò (opzione sconosciuta).
Mathieu Rodic,

4
Non nolocalcaches diminuirai le prestazioni forzando le ricerche in ogni operazione? Questo contraddice auto_cache?
earthmeLon

2
nolocalcaches e defer_permissions non sembrano validi (più?) su Debian Jessie.
Qualcuno il

4
Perché no_readahead?
Studgeek

1
Cosa intendi con "oauto_cache"?
ManuelSchneid3r

18

Oltre alle soluzioni già proposte di utilizzo di Samba / NFS, che sono perfettamente valide, potresti anche ottenere un aumento della velocità con la sshfscrittografia più rapida (l'autenticazione sarebbe sicura come al solito, ma i dati trasferiti sarebbero più facili da decrittografare) fornendo l' -o Ciphers=arcfouropzione a sshfs. È particolarmente utile se la tua macchina ha una CPU debole.


-oCipher=arcfournon ha fatto alcuna differenza nei miei test con un file di 141 MB creato da dati casuali.
Sparhawk,

6
Questo perché nel comando c'erano più errori di battitura. L'ho modificato. Ho notato uno speedup del 15% dal mio server Raspberry Pi. (+1)
Sparhawk,

4
Anche la cifra chacha20-poly1305@openssh.com è un'opzione che vale la pena considerare ora che arcfour è obsoleto. Chacha20 è più veloce sui processori ARM rispetto ad AES, ma molto peggio sui processori x86 con istruzioni AES (che tutte le moderne CPU desktop hanno di serie in questi giorni). klingt.net/blog/ssh-cipher-performance-comparision Puoi elencare le cifre supportate con "ssh -Q cipher"
TimSC

11

Non ho alternative da raccomandare, ma posso fornire suggerimenti su come velocizzare sshfs:

sshfs -o cache_timeout=115200 -o attr_timeout=115200 ...

Ciò dovrebbe evitare alcune delle richieste di andata e ritorno quando si tenta di leggere il contenuto o le autorizzazioni per i file già recuperati in precedenza nella sessione.

sshfs simula le eliminazioni e le modifiche localmente, quindi le nuove modifiche apportate sul computer locale dovrebbero apparire immediatamente, nonostante i grandi timeout, poiché i dati memorizzati nella cache vengono automaticamente eliminati.

Ma queste opzioni non sono consigliate se i file remoti potrebbero essere aggiornati senza che il computer locale lo sappia, ad esempio da un altro utente o una shell ssh remota. In tal caso, sarebbe preferibile un timeout inferiore.

Ecco alcune altre opzioni con cui ho sperimentato, anche se non sono sicuro che qualcuno di loro abbia fatto la differenza:

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"

Dovresti anche dare un'occhiata alle opzioni raccomandate da Meetai nella sua risposta.

ricorsione

Il problema più grande nel mio flusso di lavoro è quando provo a leggere molte cartelle, ad esempio in un albero profondo, perché sshfs esegue una richiesta di andata e ritorno per ogni cartella separatamente. Questo potrebbe anche essere il collo di bottiglia che si verifica con Eclipse.

Fare richieste per più cartelle in parallelo potrebbe essere d'aiuto, ma la maggior parte delle app non lo fa: sono state progettate per filesystem a bassa latenza con memorizzazione nella cache read-ahead, quindi attendono il completamento di una statistica del file prima di passare alla successiva .

precaching

Ma qualcosa che sshfs potrebbe fare sarebbe guardare avanti al file system remoto, raccogliere le statistiche delle cartelle prima che io le richieda e inviarle a me quando la connessione non viene immediatamente occupata. Ciò richiederebbe una maggiore larghezza di banda (dai dati lookahead che non vengono mai utilizzati) ma potrebbe migliorare la velocità.

Possiamo forzare sshfs a fare un po 'di cache read-ahead, eseguendolo prima di iniziare l'attività, o anche in background quando l'attività è già in corso:

find project/folder/on/mounted/fs > /dev/null &

Ciò dovrebbe preconfigurare tutte le voci della directory, riducendo alcune delle spese generali successive da round trip. (Ovviamente, devi utilizzare i timeout di grandi dimensioni come quelli che ho fornito in precedenza, altrimenti questi dati memorizzati nella cache verranno cancellati prima che la tua app acceda ad essi.)

Ma findci vorrà molto tempo. Come altre app, attende i risultati da una cartella prima di richiedere quella successiva.

Potrebbe essere possibile ridurre il tempo complessivo chiedendo a più processi di ricerca di esaminare cartelle diverse. Non ho testato per vedere se questo è davvero più efficiente. Dipende se sshfs consente richieste in parallelo. (Penso di si.)

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 &

Se si desidera anche pre-memorizzare nella cache il contenuto del file, è possibile provare questo:

tar c project/folder/on/mounted/fs > /dev/null &

Ovviamente ciò richiederà molto più tempo, trasferirà molti dati e richiede di avere una dimensione della cache enorme. Ma una volta terminato, l'accesso ai file dovrebbe essere piacevole e veloce.


4

SSHFS è molto lento perché trasferisce il contenuto del file anche se non è necessario (quando si esegue cp). Ho segnalato questo a monte e a Debian, ma nessuna risposta: /


2
È efficiente con mv. Sfortunatamente quando si esegue cplocalmente, FUSE vede solo richieste di apertura di file per la lettura e la scrittura. Non sa che stai facendo una copia di un file. Per FUSIBILE non sembra diverso dalla scrittura di un file generale. Quindi temo che questo non possa essere risolto a meno che il locale non cpsia reso più sensibile ai FUSE / ai FUSE. (O FUSE potrebbe essere in grado di inviare hash di blocco anziché interi blocchi quando sospetta un cp, come fa rsync, ma sarebbe complesso e potrebbe rallentare altre operazioni.)
joeytwiddle

3

Dopo la ricerca e il processo. Ho appena scoperto di aggiungere -o Compression=novelocità molto. Il ritardo può essere causato dal processo di compressione e decompressione. Inoltre, usare 'Ciphers = aes128-ctr' sembra più veloce di altri mentre alcuni post hanno fatto alcuni esperimenti su questo. Quindi, il mio comando è in qualche modo così:

sshfs -o allow_other, transform_symlink, follow_symlink, IdentityFile = / Users / maple / .ssh / id_rsa -o auto_cache, riconnetti, defer_permissions -o Ciphers = aes128-ctr -o Compression = no maple@123.123.123.123: / home / maple ~ / mntpoint


2

NFS dovrebbe essere più veloce. Quanto è remoto il filesystem? Se è sulla WAN, potresti stare meglio sincronizzando i file avanti e indietro, invece dell'accesso remoto diretto.


1

NFS o Samba se hai file di grandi dimensioni. Usare NFS con qualcosa di simile a film a 720p e merda è davvero un PITA. Samba farà un lavoro migliore, anche se non mi piace Samba per una serie di altri motivi e di solito non lo consiglierei.

Per file di piccole dimensioni, NFS dovrebbe andare bene.


1

Ho scoperto che disattivare il mio tema zsh che stava controllando lo stato del file git mi ha aiutato in modo enigmatico - entrare nella directory impiegava più di 10 minuti. Allo stesso modo, disattivando i controlli di stato git in Vim.


Caspita, questo è davvero un buon consiglio!
Dmitri,

-2

Accedi come root.

Accedi alla tua directory di livello superiore, usando "cd /".

Quindi assicurati di avere una cartella mount creata o crearne una usando "mkdir nome_cartella".

Successivamente, usa semplicemente "mount xxxx: / remote_mount_directory / local_mount_directory.

se tutto ha funzionato alla tua fine, prima di questo dovresti avere una cavalcatura di successo. Potresti voler controllare e assicurarti che la directory di destinazione sia condivisa usando il comando "exportfs" per garantire che possano essere trovati.

Spero che sia di aiuto. Questo non proviene da un ambiente Lvie, è stato testato su una LAN usando VMware e Fedora 16.


5
Questo non risponde alla domanda ...
Léo Lam
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.