Использование emacs tramp vs. rsync для удаленной разработки - PullRequest
12 голосов
/ 29 сентября 2008

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

Ответы [ 8 ]

12 голосов
/ 29 сентября 2008

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

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

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

ControlMaster auto

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

6 голосов
/ 19 мая 2012

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

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

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

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

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

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

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

(*) При использовании Windows я использовал для локального размещения виртуальной машины Linux и запуска Emacs внутри нее (с Cygwin, предоставляющим дисплей X) для единственной причины использования ControlMaster for Tramp (https://stackoverflow.com/a/3049375/324105).

6 голосов
/ 29 сентября 2008

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

3 голосов
/ 29 сентября 2008

Вам известен раздел документации по 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.
1 голос
/ 20 октября 2010

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

0 голосов
/ 19 мая 2012

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

0 голосов
/ 18 февраля 2010

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

0 голосов
/ 18 февраля 2010

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

Найдите параметр конфигурации с именем «UseDNS». Установите это в «Нет»

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

...