Использование emacs tramp vs. rsync для удаленной разработки

Я занимаюсь удаленным развитием с помощью emacs tramp и обнаружил, что он довольно медленный. Каждый раз, когда я сохраняю файл, для завершения сохранения требуется около 10 секунд. Итак, теперь я использую rsync для передачи файлов удаленно, и он работает намного быстрее, это занимает около секунды плюс локальные сохранения emacs мгновенно. Есть ли какие-либо параметры конфигурации в tramp, чтобы заставить его работать так же быстро, как rsync в командной строке? Существуют ли какие-либо преимущества использования tramp вместо rsync, хотя я вижу такую ​​низкую производительность?

Ответ 1

В то время как tramp может быть настроен на использование большого количества методов транспорта, я полагаю, вы используете ssh для подключения к удаленному серверу.

Я полагаю, что большую часть времени, которое требуется для завершения операции, происходит от настройки соединения и аутентификации. Если вы используете новую версию OpenSSH, это может помочь, используя функцию совместного использования соединений, см. ControlMaster в ssh_config (5).

Я предлагаю вам попробовать

ControlMaster auto

и посмотрите, улучшит ли это ситуацию.

Ответ 2

Если вы используете функцию tramp для функций ssh ​​/scp, вы обнаружите, что открытие постоянного SSH-соединения сделает операции бродяг намного быстрее: они будут повторно использовать существующее соединение, а не создавать новый каждый раз, вырезать много криптографических накладных расходов, не влияя на безопасность. См. Эту статью о функциональности SSH ControlMaster.

Ответ 3

Несколько ответов упомянули включение ControlMaster, чтобы поддерживать постоянное ssh-соединение открытым (что позволяет избежать дорогостоящей настройки соединения/ручного тряски в противном случае для каждой операции Tramp по ssh), но вы не нужно настраивать что-либо за пределами Emacs, чтобы использовать это - если вы посмотрите на переменную tramp-methods, вы увидите, что существуют существующие методы, которые позволяют ControlMaster.

В частности, методы rsyncc и scpc.

Конечно, обе стороны подключения должны поддерживать ControlMaster (например, Cygwin не может этого сделать, что является позором для пользователей Windows *), но я бы предложил установить один из них как ваш tramp-default-method.

Отсутствие постоянного соединения делает расширенное использование Tramp довольно болезненным, но при этом он невероятно полезен (до такой степени, что, учитывая достаточно быстрое соединение, вы можете почти забыть, что это происходит).

В ответ на заключительную часть вашего вопроса, да, есть очень веские причины использовать Tramp вместо rsyncing файлов вручную. Первичным является то, что команды оболочки могут выполняться непосредственно на удаленном сервере, и вам даже не нужно об этом думать, поскольку Emacs заботится о деталях.

Например, из буфера удаленных файлов M-x shell RET открывается оболочка на удаленном сервере и команды типа M-x rgrep RET и M-x find-grep-dired RET запустит find + grep на удаленном сервере. Я считаю, что это в целом относится к функциям, которые вызывают команды оболочки.

Для меня более чем достаточно оснований для использования Tramp (если только установка Emacs на удаленном сервере и использование вашего локального экрана не было вариантом, в этом случае для долгосрочного использования я бы подумал об этом).

p >

(*) При использовании Windows я использовал локальную виртуальную машину Linux и запускал Emacs внутри нее (с Cygwin, обеспечивающим отображение X) только по причине использования ControlMaster for Tramp (fooobar.com/questions/65950/...).

Ответ 4

Знаете ли вы об этом разделе в документации по tramp на gnu.org, где упоминается использование 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.

Ответ 5

Для меня скорость была значительной! Теперь использование tramp действительно приятно. Я также предпочитаю его поверх sshfs, так как я также компилирую из emacs, и tramp делает удаленную компиляцию для меня и интерпретирует сообщения об ошибках компилятора для меня:)

Ответ 6

Поскольку вы сказали ранее, что у вас есть проблема на конкретном сервере, проверьте конфигурационный файл sshd на проблемной машине. Вероятно, это что-то вроде /etc/ssh/sshd _config.

Найдите параметр конфигурации с именем "UseDNS". Установите значение "Нет".

Посмотрите, не ускорит ли это для вас. Если это так, то ssh, вероятно, ждет время ожидания обратного поиска DNS, что вам, вероятно, не важно.

Ответ 7

Недавно я пришел к объявлению sshfs, чтобы удаленные файлы были локально редактируемыми. Хорошо работает для систем Linux, Mac и Unix и ставит части ssh в одну команду, а не каждый доступ. И существует полностью в пользовательском пространстве.

Ответ 8

Если вы используете метод ssh, вы можете попробовать использовать метод sftp, который (я считаю) открывает постоянное sftp-соединение с удаленным ssh-сервером. Кроме того, если вы используете GNOME, вы можете добавить sftp в tramp-gvfs-methods, чтобы TRAMP подключался к sftp-серверам с помощью GNOME GVFS, что может быть или не быть быстрее/удобнее.