12

我一直在使用 emacs tramp 进行一些远程开发,发现它很慢。每次我保存一个文件,大约需要 10 秒才能完成保存。所以,现在我正在使用 rsync 远程传输文件,它的工作速度要快得多,大约需要一秒钟,而且来自 emacs 的本地保存是即时的。tramp 中是否有任何配置选项可以让它像 rsync 在命令行上一样快地运行?即使我看到性能如此糟糕,使用 tramp 而不是 rsync 有什么好处吗?

4

7 回答 7

12

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

我相信完成操作所需的大部分时间来自建立连接和身份验证。如果您使用的是足够新的 OpenSSH 版本,则可以使用连接共享功能来帮助您,请参阅 ssh_config(5) 中的 ControlMaster。

我建议你试试

ControlMaster auto

看看这是否能改善情况。

于 2008-09-29T13:59:03.557 回答
6

如果您将 tramp 用于 ssh/scp 功能,您会发现打开一个持久的 SSH 连接将使 tramp 操作更快:它们将重用现有连接而不是每次都创建一个新连接,从而减少很多在不影响安全性的情况下减少加密开销。请参阅这篇关于 SSH ControlMaster功能的文章。

于 2008-09-29T13:48:15.253 回答
6

有几个答案提到使ControlMaster能够保持持久的ssh 连接打开(这避免了昂贵的连接设置/握手,否则每次通过 ssh 的 Tramp 操作都需要),但您不需要在 Emacs 之外配置任何东西使用它——如果你查看tramp-methods变量,你会看到现有的方法可以启用 ControlMaster。

具体来说,rsynccscpc方法。

当然,连接的双方都需要支持 ControlMaster(例如 Cygwin 不能这样做,这对 Windows 用户来说是一种耻辱*),但我建议将其中一个设置为您的tramp-default-method.

没有持久连接会使扩展 Tramp 的使用变得非常痛苦,但有了它就非常有用(到了这样的程度,如果连接速度相当快,你几乎可以忘记它正在发生)。

在回答您问题的最后一部分时,是的,有很好的理由使用 Tramp 而不是手动同步文件。第一个是shell命令可以直接在远程服务器上执行,你甚至不必考虑它,因为Emacs会处理细节。

例如,从远程文件缓冲区中,M-x shell RET在远程服务器上打开一个 shell,以及类似的命令M-x rgrep RETM-x find-grep-dired RET在远程服务器上运行 find + grep。我相信这通常适用于调用 shell 命令的函数。

对我来说,使用 Tramp 的理由绰绰有余(除非在远程服务器上安装 Emacs 并使用本地显示器是一种选择,在这种情况下,为了长期使用,我会考虑这样做)。

(*) 使用 Windows 时,我曾经在本地托管 Linux VM 并在其中运行 Emacs(Cygwin 提供 X 显示),唯一的原因是使用 ControlMaster for Tramp ( https://stackoverflow.com/a/3049375/324105)。

于 2012-05-19T00:52:14.993 回答
3

您是否知道 gnu.org 上的 tramp 文档中提到使用 rsync 的部分?它部分说:

5.3 外部传输方式

外部传输方法通过多个通道运行,使用远程外壳连接进行许多操作,同时将文件传输委托给外部传输实用程序。

这节省了使用内联方法通过一个连接进行多路传输的编码和解码开销。

...

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.
于 2008-09-29T13:49:24.767 回答
0

由于您之前说过您在特定服务器上遇到问题,因此请检查问题机器上的 sshd 配置文件。它可能类似于 /etc/ssh/sshd_config。

查找名为“UseDNS”的配置选项。将其设置为“否”。

看看这是否不会为您加快速度。如果是这样,那么 ssh 可能会在等待您可能不关心的反向 dns 查找时超时。

于 2010-02-17T23:09:42.307 回答
0

最近我开始接受 sshfs,以便远程文件可以在本地编辑。适用于 Linux、Mac 和 Unix 系统,并将 ssh 部分放在一个命令中,而不是每次访问。并且完全存在于用户空间中。

于 2010-02-18T11:56:29.833 回答
0

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

于 2012-05-18T23:56:02.557 回答