2008-09-29 13 views
11

Ich habe einige Remote-Entwicklung mit Emacs Tramp gemacht und festgestellt, dass es ziemlich langsam war. Jedes Mal, wenn ich eine Datei speichere, dauert es etwa 10 Sekunden, um den Speichervorgang abzuschließen. So, jetzt benutze ich rsync, um die Dateien aus der Ferne zu übertragen, und es funktioniert viel schneller, es dauert etwa eine Sekunde plus die lokalen speichert von Emacs sind sofort. Gibt es Konfigurationsoptionen innerhalb von Tramp, damit es so schnell ausgeführt wird wie rsync in der Befehlszeile? Gibt es Vorteile, Tramp anstelle von rsync zu verwenden, obwohl ich so schlechte Leistung sehe?Verwenden von Emacs Tramp vs Rsync für die Remote-Entwicklung

Antwort

5

Wenn Sie Tramp für ssh/scp-Funktionalität verwenden, werden Sie feststellen, dass das Öffnen einer persistenten SSH-Verbindung die Tramp-Operationen viel schneller macht: Sie werden die bestehende Verbindung wiederverwenden, anstatt jedes Mal eine neue Verbindung zu erstellen einen großen Teil des kryptographischen Overhead aus, ohne die Sicherheit zu beeinträchtigen. Siehe diesen Artikel auf der SSH ControlMaster Funktionalität.

+0

Es dauert immer noch etwa 10 Sekunden, aber ich kann sofort mit anderen Servern verbinden. Ich frage mich, ob es ein Serverproblem sein könnte. –

+0

Wenn es immer noch 10 Sekunden dauert, könnte die .bashrc/.bash_profile auf dem Remote-Computer die Verzögerung verursachen. –

3

Kennen Sie den Abschnitt in der Tramp-Dokumentation auf gnu.org, der die Verwendung von rsync erwähnt? Er sagt unter anderem:

5,3 Externe Übertragungsmethoden

Die externe Übertragungsverfahren über mehrere Kanäle arbeiten, die für viele Aktionen Remote-Shell-Verbindung während Datei Delegieren Transfers an ein externes Übertragungsprogramm.

Dies spart den Overhead der Codierung und Decodierung, die das Multiplexen der Übertragung über die eine Verbindung mit den Inline-Methoden hat.

...

rsync - ssh und rsync den Befehls ssh Verwendung sicher auf den entfernten Rechner zu verbinden und den rsync Befehl zur Übertragung von Dateien ist fast identisch mit dem scp Verfahren.

While rsync performs much better than scp when transferring files that 
exist on both hosts, this advantage is lost if the file exists only on one side 
of the connection. 

The rsync based method may be considerably faster than the rcp based 
methods when writing to the remote system. Reading files to the local 
machine is no faster than with a direct copy. 

This method supports the ‘-p’ hack. 
11

Während tramp konfiguriert werden kann, eine große Anzahl von Transportmethode zu verwenden, ich nehme an, Sie ssh verwenden, um den Remote-Server zu verbinden.

Ich glaube, dass die meiste Zeit, die es dauert, um den Vorgang abzuschließen, vom Aufbau einer Verbindung und der Authentifizierung kommt. Wenn Sie eine neue Version von OpenSSH verwenden, können Sie dies mithilfe der Funktion für die gemeinsame Nutzung von Verbindungen tun, siehe ControlMaster in ssh_config (5).

Ich schlage vor, Sie

ControlMaster auto

versuchen und sehen, ob das die Situation verbessert.

0

Da Sie zuvor gesagt haben, dass Sie ein Problem auf einem bestimmten Server haben, überprüfen Sie die sshd-Konfigurationsdatei auf dem Problemcomputer. Es ist wahrscheinlich etwas wie/etc/ssh/sshd_config.

Suchen Sie nach einer Konfigurationsoption namens "UseDNS". Setze das auf "Nein"

Sehen Sie, ob das die Dinge nicht für Sie beschleunigt. Wenn ja, dann ist es wahrscheinlich, dass ssh auf eine umgekehrte DNS-Suche wartet, die Ihnen wahrscheinlich egal ist.

0

Kürzlich habe ich sshfs umarmen, so dass die Remote-Dateien lokal bearbeitet werden können.Funktioniert gut für Linux-, Mac- und Unix-Systeme und fügt die ssh-Teile in einen Befehl anstatt in jeden Zugriff ein. Und existiert vollständig im Benutzerbereich.

1

Für mich war die Beschleunigung signifikant! Tramp ist jetzt sehr angenehm. Ich bevorzuge es auch über sshfs, da ich auch aus emacs kompilieren und tramp macht die remote-compilation für mich und interpretiert die Fehlermeldungen des Compilers für mich :)

0

Wenn Sie die SSH-Methode verwenden, können Sie stattdessen die SFTP-Methode versuchen , was (glaube ich) eine persistente sftp-Verbindung zum entfernten ssh-Server öffnet. Wenn Sie GNOME verwenden, können Sie auch sftp zu tramp-gvfs-methods hinzufügen, damit TRAMP mit sftp-Servern über GNOMEs GVFS eine Verbindung herstellt, die möglicherweise schneller/bequemer ist.

5

Ein paar Antworten erwähnt ermöglicht Control eine persistent SSH-Verbindung offen zu halten (was die teure Verbindung vermeidet Set-up/Handshake sonst benötigt für jeden Tramp Betrieb über ssh), aber Sie don‘ • Sie müssen alles außerhalb von Emacs konfigurieren, um dies zu verwenden - wenn Sie sich die tramp-methods Variable ansehen, werden Sie sehen, dass es bereits Methoden gibt, die ControlMaster aktivieren.

Speziell die rsyncc und scpc Methoden.

Beiden Seiten der Verbindung müssen Control, natürlich unterstützen (zum Beispiel Cygwin nicht so tun kann, was eine Schande für Windows-Nutzer *), aber ich würde vorschlagen, einen von denen als tramp-default-method Einstellung.

Keine dauerhafte Verbindung macht die erweiterte Tramp-Nutzung ziemlich schmerzhaft, aber mit einem ist es unglaublich brauchbar (bis zu dem Punkt, wo man bei einer relativ schnellen Verbindung fast vergessen kann, dass es passiert).

Als Antwort auf den letzten Teil Ihrer Frage, ja, es gibt sehr gute Gründe, Tramp anstelle von rsyncing die Dateien manuell zu verwenden. Der wichtigste ist, dass Shell-Befehle direkt auf dem Remote-Server ausgeführt werden können und Sie nicht einmal darüber nachdenken müssen, da Emacs sich um die Details kümmert.

beispielsweise von einem entfernten-Dateipuffer, MxshellRET öffnet eine Shell auf dem Remote-Server, und Befehle, wie MxrgrepRET und Mxfind-grep-diredRET wird der Lauf finde + grep auf dem entfernten Server. Ich glaube, das gilt generell für Funktionen, die Shell-Befehle aufrufen.

Für mich ist das mehr als genug Grund, Tramp zu verwenden (es sei denn, Emacs auf dem Remote-Server zu installieren und die Verwendung Ihrer lokalen Anzeige war eine Option in diesem Fall, für eine langfristige Nutzung würde ich dies stattdessen in Betracht ziehen).

(*) Bei Verwendung von Windows verwenden ich lokal einen Linux-VM Host und führten Emacs im Innern, dass (mit Cygwin dem X-Display Providing) für den Sohle Grund der Verwendung von Control für Tramp (https://stackoverflow.com/a/3049375/324105).

+0

Meine Emacs 25.3.2 hat in 'tramp-methods' keine' scpc' oder 'rsyncc', aber ich sehe, dass die Variable' tramp-ssh-controlmaster-options' für '% c' eingefügt wird und die normale' ssh' Methode '' verwendet % c' – unhammer

Verwandte Themen