使用emacs tramp与rsync进行远程开发的比较

12

我一直在使用Emacs Tramp进行远程开发,但是发现它运行速度非常慢。每次保存文件需要大约10秒钟才能完成保存。所以现在我改用rsync来远程传输文件,速度快多了,只需一秒钟左右,而且本地保存的速度也非常快。是否有任何Tramp配置选项可以让它像命令行上的rsync一样快?即使我看到如此糟糕的性能,是否使用Tramp仍然有什么优点,而不是使用rsync?

7个回答

12

虽然tramp可以配置使用大量的传输方法,但我想你正在使用ssh连接到远程服务器。

我认为完成操作所需的大部分时间来自于建立连接和身份验证。如果您使用的是足够新的OpenSSH版本,则可以通过使用连接共享功能来帮助解决此问题,请参见ssh_config(5)中的ControlMaster。

我建议您尝试

ControlMaster auto

并查看是否改善了情况。


6

如果你正在使用tramp进行ssh/scp功能,你会发现打开一个持久的SSH连接将使tramp操作更快:它们将重用现有的连接而不是每次创建一个新连接,从而削减了大量的加密开销而不影响安全性。请参阅关于SSH ControlMaster 功能的文章。


仍需要大约10秒钟的时间,但我能够立即连接到其他服务器。我想知道这是否可能是服务器问题。 - dr_pepper
如果仍需要10秒钟,可能是远程机器上的.bashrc/.bash_profile引起了延迟。 - Praveen Kumar

6
有几个答案提到了启用 ControlMaster 来保持一个持久的 ssh 连接(这避免了每次 Tramp 操作通过 ssh 需要昂贵的连接设置/握手),但是您不需要在 Emacs 之外配置任何内容来使用它——如果您查看 tramp-methods 变量,您将看到有现有的方法可以启用 ControlMaster。
具体而言,有 rsynccscpc 两种方法。
当然,连接的双方都需要支持 ControlMaster(例如 Cygwin 无法支持,这对于 Windows 用户来说非常遗憾*),但我建议将其中之一设置为您的 tramp-default-method
没有持久连接会使扩展 Tramp 使用非常痛苦,但有了持久连接,它就非常可用(以至于,如果连接相当快,你几乎可以忘记它正在发生)。
回答您问题的最后部分,是的,有非常好的理由使用 Tramp 而不是手动 rsync 文件。主要原因是可以直接在远程服务器上执行 shell 命令,而且您甚至不需要考虑它,因为 Emacs 会处理细节。
例如,在远程文件缓冲区中,M-xshellRET 在远程服务器上打开了一个 shell,命令像 M-x rgrep RETM-x find-grep-dired RET 将在远程服务器上运行查找+ grep。我认为这通常适用于调用 shell 命令的函数。
对我来说,这已经足够使用 Tramp 的理由(除非在远程服务器上安装 Emacs 并使用本地显示是一个选项,在这种情况下,对于长期使用,我会考虑这样做)。
(*) 在使用 Windows 时,我曾经在本地托管一个 Linux VM,并在其中运行 Emacs(Cygwin 提供 X 显示)唯一 的原因是使用 ControlMaster 进行 Tramp(https://dev59.com/A03Sa4cB1Zd3GeqPuVdI#3049375)。

我的emacs 25.3.2版本的tramp-methods中没有任何scpcrsyncc,但我发现变量tramp-ssh-controlmaster-options被插入到%c中,而常规的ssh方法使用%c - unhammer
确实如此;从Emacs 24.4开始,“plink1”、“ssh1”、“ssh2”、“scp1”、“scp2”、“scpc”和“rsyncc”连接方法已经停用。当可能时,所有基于ssh的方法都会自动设置ssh选项“ControlMaster=auto”。请参阅tramp-use-ssh-controlmaster-options - phils

3

您是否熟悉gnu.org上提到使用rsync的tramp文档中的一节?其中一部分内容如下:

5.3 External transfer methods

The external transfer methods operate through multiple channels, using the remote shell connection for many actions while delegating file transfers to an external transfer utility.

This saves the overhead of encoding and decoding that multiplexing the transfer through the one connection has with the inline methods.

...

rsync — ssh and rsync Using the ssh command to connect securely to the remote machine and the rsync command to transfer files is almost identical to the scp method.

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.

0

既然你之前说在特定服务器上有问题,那就检查一下出问题的机器上的sshd配置文件。它可能是/etc/ssh/sshd_config这样的路径。

找到一个名为“UseDNS”的配置选项。将其设置为“No”。

看看这是否可以加快速度。如果是这样,那么ssh可能会超时等待反向DNS查找,而你可能并不关心这个。


0

最近我开始使用sshfs,这样远程文件就可以在本地进行编辑。它适用于Linux、Mac和Unix系统,并将ssh部分放在一个命令中而不是每次访问时都需要输入。而且完全存在于用户空间。


0
如果您正在使用ssh方法,可以尝试使用sftp方法,它(我相信)会打开一个持久的sftp连接到远程ssh服务器。此外,如果您正在使用GNOME,则可以将sftp添加到tramp-gvfs-methods中,以便TRAMP使用GNOME的GVFS连接到sftp服务器,这可能更快/更方便。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接