12 Stimmen

Verwendung von emacs tramp vs. rsync für die Fernentwicklung

Ich habe einige Remote-Entwicklung mit emacs tramp getan und fand, dass es ziemlich langsam war. Jedes Mal, wenn ich eine Datei speichere, dauert es etwa 10 Sekunden, um die Speicherung abzuschließen. Jetzt verwende ich rsync, um die Dateien aus der Ferne zu übertragen, und das geht viel schneller, es dauert etwa eine Sekunde, und die lokalen Speicherungen von emacs erfolgen sofort. Gibt es irgendwelche Konfigurationsoptionen innerhalb von tramp, damit es so schnell läuft wie rsync auf der Kommandozeile? Gibt es irgendwelche Vorteile bei der Verwendung von tramp anstelle von rsync, auch wenn ich eine so schlechte Leistung sehe?

12voto

Obwohl Tramp so konfiguriert werden kann, dass es eine Vielzahl von Transportmethoden verwendet, nehme ich an, dass Sie ssh verwenden, um sich mit dem entfernten Server zu verbinden.

Ich glaube, der größte Teil der Zeit, die für den Abschluss des Vorgangs benötigt wird, geht auf den Aufbau der Verbindung und die Authentifizierung zurück. Wenn du eine ausreichend neue Version von OpenSSH verwendest, kann dies durch die Verwendung der Verbindungsfreigabefunktion erleichtert werden, siehe ControlMaster in ssh_config(5).

Ich schlage vor, Sie versuchen

ControlMaster auto

und sehen Sie, ob sich die Situation dadurch verbessert.

6voto

James Sutherland Punkte 797

Wenn Sie Tramp für ssh/scp-Funktionen verwenden, werden Sie feststellen, dass das Öffnen einer dauerhaften SSH-Verbindung die Tramp-Operationen erheblich beschleunigt: Die bestehende Verbindung wird wiederverwendet, anstatt jedes Mal eine neue aufzubauen, wodurch ein großer Teil des kryptografischen Overheads eingespart wird, ohne die Sicherheit zu beeinträchtigen. Siehe diesen Artikel über die SSH ControlMaster Funktionalität.

0 Stimmen

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

0 Stimmen

Wenn es immer noch 10 Sekunden dauert, könnte es an der .bashrc/.bash_profile auf dem entfernten Rechner liegen, die die Verzögerung verursacht.

6voto

phils Punkte 68556

In einigen Antworten wurde die Aktivierung von ControlMaster um eine beständig ssh-Verbindung geöffnet (was den teuren Verbindungsaufbau / Hand-Shaking vermeidet, der sonst für jede Tramp-Operation über ssh notwendig ist), aber Sie müssen nichts außerhalb von Emacs konfigurieren, um dies zu nutzen -- wenn Sie sich die tramp-methods variabel werden Sie sehen, dass es bereits Methoden gibt, die ControlMaster aktivieren.

Genauer gesagt, die rsyncc y scpc Methoden.

Beide Seiten der Verbindung müssen natürlich ControlMaster unterstützen (Cygwin zum Beispiel kann das nicht, was für Windows-Benutzer* schade ist), aber ich würde vorschlagen, eine von beiden als Ihre tramp-default-method .

Ohne eine dauerhafte Verbindung ist eine längere Nutzung von Tramp ziemlich mühsam, aber mit einer solchen ist es unglaublich benutzbar (bis zu dem Punkt, an dem man bei einer einigermaßen schnellen Verbindung fast vergessen kann, dass es überhaupt passiert).

Um den letzten Teil Ihrer Frage zu beantworten: Ja, es gibt sehr gute Gründe, Tramp zu verwenden, anstatt die Dateien manuell zu rsyncen. Der wichtigste ist, dass Shell-Befehle direkt auf dem entfernten Server ausgeführt werden können, und Sie müssen nicht einmal darüber nachdenken, da Emacs sich um die Details kümmert.

Zum Beispiel aus einem Ferndateipuffer, M-x shell RET öffnet eine Shell auf dem entfernten Server, und Befehle wie M-x rgrep RET y M-x find-grep-dired RET führt das Programm find + grep auf dem entfernten Server aus. Ich glaube, dass dies generell für Funktionen gilt, die Shell-Befehle aufrufen.

Für mich ist das mehr als genug Grund, Tramp zu verwenden (es sei denn, die Installation von Emacs auf dem entfernten Server und die Verwendung des lokalen Bildschirms wäre eine Option, in diesem Fall würde ich bei langfristiger Nutzung dies in Betracht ziehen).

(*) Wenn ich Windows benutzte, habe ich lokal eine Linux-VM gehostet und Emacs darin laufen lassen (wobei Cygwin die X-Anzeige bereitstellte), um die allein Grund für die Verwendung von ControlMaster für Tramp ( https://stackoverflow.com/a/3049375/324105 ).

0 Stimmen

Mein emacs 25.3.2 hat keine scpc o rsyncc en tramp-methods aber ich sehe die Variable tramp-ssh-controlmaster-options wird eingefügt für %c und der regulären ssh Methode verwendet %c

0 Stimmen

Ja, ab Emacs 24.4 "Die Verbindungsmethoden "plink1", "ssh1", "ssh2", "scp1", "scp2", "scpc" und "rsyncc" werden nicht mehr angeboten. Die ssh-Option "ControlMaster=auto" wird bei allen ssh-basierten Methoden automatisch gesetzt, wenn möglich. Siehe tramp-use-ssh-controlmaster-options ."

3voto

Bryan Oakley Punkte 337213

Kennen Sie den Abschnitt in der Tramp-Dokumentation auf gnu.org, der die Verwendung von rsync erwähnt? Dort heißt es unter anderem:

5.3 Externe Übertragungsmethoden

Die externen Übertragungsmethoden arbeiten über mehrere Kanäle, wobei die Remote-Shell-Verbindung für viele Aktionen, während die Datei Dateiübertragungen an ein externes Übertragungsprogramm.

Dies spart den Overhead der Kodierung und Dekodierung, der beim Multiplexen der Übertragung über die eine Verbindung mit den Inline-Methoden hat.

...

rsync - ssh und rsync Die Verwendung des Befehls ssh für eine sichere Verbindung zum entfernten Rechner und des Befehls rsync-Befehl zur Übertragung von Dateien ist fast identisch mit der scp-Methode.

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.

0voto

darrint Punkte 418

Da Sie zuvor sagten, dass Sie ein Problem auf einem bestimmten Server haben, überprüfen Sie die sshd-Konfigurationsdatei auf dem problematischen Rechner. Sie lautet wahrscheinlich so etwas wie /etc/ssh/sshd_config.

Suchen Sie nach einer Konfigurationsoption namens "UseDNS". Setzen Sie diese auf "Nein".

Schauen Sie, ob das nicht die Dinge für Sie beschleunigt. Wenn ja, dann wartet ssh wahrscheinlich auf einen Reverse-DNS-Lookup, um den Sie sich wahrscheinlich nicht kümmern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X