私は emacs tramp を使用してリモート開発を行っていましたが、非常に遅いことがわかりました。ファイルを保存するたびに、保存が完了するまでに約 10 秒かかります。そのため、今はrsyncを使用してファイルをリモートで転送していますが、はるかに高速に動作し、約1秒かかり、emacsからのローカル保存は瞬時です。コマンドラインでrsyncと同じくらい速く実行するためのtramp内の構成オプションはありますか? rsync の代わりに Tramp を使用する利点はありますか?
7 に答える
トランプは多数の転送方法を使用するように構成できますが、ssh を使用してリモート サーバーに接続していると思います。
操作を完了するのにかかる時間のほとんどは、接続のセットアップと認証にかかると思います。十分に新しいバージョンの OpenSSH を使用している場合、これは接続共有機能を使用することで解決できます。ssh_config(5) の ControlMaster を参照してください。
試してみることをお勧めします
ControlMaster auto
そして、それが状況を改善するかどうかを確認してください。
ssh/scp 機能にトランプを使用している場合、永続的な SSH 接続を開くと、トランプ操作がはるかに高速になることがわかります。毎回新しい接続を作成するのではなく、既存の接続を再利用するため、大幅に削減されます。セキュリティに影響を与えることなく、暗号化のオーバーヘッドを軽減します。SSH ControlMaster機能については、この記事を参照してください。
いくつかの回答では、ControlMasterが永続的なssh 接続を開いたままにできるようにすることが言及されています (これにより、ssh を介した各 Tramp 操作に必要な高価な接続セットアップ/ハンドシェイクが回避されます) が、Emacs 以外で何も構成する必要はありません。これを使用するには --tramp-methods
変数を見ると、ControlMaster を有効にする既存のメソッドがあることがわかります。
具体的には、 メソッドrsyncc
とscpc
メソッドです。
もちろん、接続の両側で ControlMaster をサポートする必要があります (たとえば、Cygwin ではサポートできないため、Windows ユーザーにとっては残念なことです*) tramp-default-method
。
永続的な接続がないと、Tramp の長時間の使用はかなり苦痛になりますが、1 つあれば信じられないほど使いやすくなります (かなり高速な接続があれば、それが起こっていることをほとんど忘れることができます)。
あなたの質問の最後の部分への答えとして、はい、ファイルを手動で再同期する代わりに Tramp を使用する非常に良い理由があります。主なものは、シェル コマンドをリモート サーバー上で直接実行できることです。Emacs が詳細を処理するため、それについて考える必要さえありません。
たとえば、リモート ファイル バッファからM-x shell
RETリモート サーバーでシェルを開き、 や のようなコマンドを実行するM-x rgrep
RETとM-x find-grep-dired
RET、リモート サーバーで find + grep が実行されます。これは、シェル コマンドを呼び出す関数に一般的に当てはまると思います。
私にとっては、それだけで Tramp を使用する十分な理由があります (リモート サーバーに Emacs をインストールし、ローカル ディスプレイを使用することがオプションであった場合を除きます。この場合、長期間使用する場合は、代わりに使用することを検討します)。
(*) Windows を使用しているときは、Linux VM をローカルでホストし、その中で Emacs を実行していました (Cygwin が X ディスプレイを提供する)。 これは、ControlMaster for Tramp ( https://stackoverflow.com/a/3049375/324105 ) を使用する唯一の理由でした。 )。
rsync の使用について言及している gnu.org のトランプのドキュメントのセクションを知っていますか? 部分的に次のように述べています。
5.3 外部転送方法
外部転送方法は、ファイル転送を外部転送ユーティリティに委譲しながら、多くのアクションにリモート シェル接続を使用して、複数のチャネルを介して動作します。
これにより、1 つの接続を介した転送の多重化がインライン メソッドで発生するエンコードとデコードのオーバーヘッドが節約されます。
...
rsync — ssh と rsync ssh コマンドを使用してリモート マシンに安全に接続し、rsync コマンドを使用してファイルを転送する方法は、scp の方法とほとんど同じです。
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.
ssh メソッドを使用している場合は、代わりに sftp メソッドを試すことができます。これにより、リモート ssh サーバーへの永続的な sftp 接続が開かれると思います。また、GNOME を使用している場合は、GNOME の GVFS を使用して TRAMP を sftp サーバーに接続するようにsftp
追加できます。tramp-gvfs-methods
最近、リモート ファイルをローカルで編集できるように、sshfs を採用するようになりました。Linux、Mac、および Unix システムでうまく機能し、すべてのアクセスではなく 1 つのコマンドで ssh パーツを配置します。そして完全にユーザー空間に存在します。
特定のサーバーに問題があると前に述べたので、問題のマシンの sshd 構成ファイルを確認してください。おそらく/etc/ssh/sshd_configのようなものです。
「UseDNS」という名前の構成オプションを探します。それを「いいえ」に設定します。
それがあなたのために物事をスピードアップしないかどうかを確認してください。もしそうなら、ssh はおそらくあなたが気にしないリバース DNS ルックアップを待っている間にタイムアウトしています。