Usando emacs tramp vs. rsync para desarrollo remoto
(8)
He estado haciendo un desarrollo remoto usando emacs vagabundo y descubrí que era bastante lento. Cada vez que guardo un archivo, toma aproximadamente 10 segundos completar el guardado. Entonces, ahora estoy usando rsync para transferir los archivos de forma remota y funciona mucho más rápido; demora alrededor de un segundo, además de que las grabaciones locales de emacs son instantáneas. ¿Hay alguna opción de configuración dentro de vagabundo para que se ejecute tan rápido como lo hace rsync en la línea de comando? ¿Hay alguna ventaja de usar vagabundo en lugar de rsync a pesar de que estoy viendo un rendimiento tan bajo?
Mientras que tramp puede configurarse para usar una gran cantidad de métodos de transporte, supongo que está usando ssh para conectarse al servidor remoto.
Creo que la mayor parte del tiempo que toma completar la operación proviene de configurar una conexión y autenticarse. Si está utilizando una versión lo suficientemente nueva de OpenSSH, esto puede ser ayudado mediante el uso de la función de uso compartido de la conexión, consulte ControlMaster en ssh_config (5).
Te sugiero que pruebes
ControlMaster auto
y ver si eso mejora la situación.
Si usa vagabundo para la funcionalidad ssh / scp, descubrirá que la apertura de una conexión SSH persistente hará que las operaciones vagabundas sean mucho más rápidas: reutilizarán la conexión existente en lugar de crear una nueva cada vez, eliminando un gran problema de sobrecarga de cifrado sin afectar la seguridad. Vea este artículo sobre la funcionalidad de SSH ControlMaster .
Como dijo anteriormente que tiene un problema en un servidor en particular, verifique el archivo de configuración sshd en la máquina problema. Probablemente sea algo como / etc / ssh / sshd_config.
Busque una opción de configuración llamada "UseDNS". Ponlo en "No"
Vea si eso no acelera las cosas para usted. Si es así, entonces ssh probablemente esté agotando el tiempo de espera en una búsqueda DNS inversa que probablemente no le interese.
Recientemente he llegado a adoptar sshfs para que los archivos remotos sean editables localmente. Funciona bien para sistemas Linux, Mac y Unix y pone las partes ssh en un solo comando en lugar de cada acceso. Y existe completamente en el espacio de usuario.
¡Para mí la aceleración fue significativa! Ahora usar vagabundo es realmente agradable. También lo prefiero sobre sshfs ya que también compilo desde dentro de emacs y vagabundo hace la compilación remota para mí e interpreta los mensajes de error del compilador para mí :)
Si está utilizando el método ssh, puede probar el método sftp, que (creo) abre una conexión sftp persistente al servidor remoto ssh. Además, si usa GNOME, puede agregar sftp
a tramp-gvfs-methods
para que TRAMP se conecte a los servidores sftp utilizando GVFS de GNOME, que puede o no ser más rápido / más conveniente.
Un par de respuestas han mencionado que permite a ControlMaster mantener abierta una conexión ssh persistente (que evita la costosa configuración de conexión / agitación de mano que de otro modo se necesitaría para cada operación de Tramp en ssh), pero no es necesario configurar nada fuera de Emacs. para usar esto: si tramp-methods
variable de tramp-methods
seguimiento, verás que hay métodos existentes que habilitan ControlMaster.
Específicamente, los métodos rsyncc
y scpc
.
Ambos lados de la conexión necesitan ser compatibles con ControlMaster, por supuesto (por ejemplo, Cygwin no puede hacerlo, lo cual es una pena para los usuarios de Windows *), pero sugiero que configure uno de esos como su tramp-default-method
.
Al no tener una conexión permanente hace que el uso prolongado de Tramp sea bastante doloroso, pero con uno es increíblemente útil (hasta el punto de que, dada una conexión razonablemente rápida, casi se puede olvidar que está sucediendo).
En respuesta a la parte final de su pregunta, sí, existen muy buenas razones para usar Tramp en lugar de sincronizar los archivos manualmente. El principal es que los comandos de shell se pueden ejecutar directamente en el servidor remoto, y ni siquiera tiene que pensar en ello, ya que Emacs se ocupa de los detalles.
Por ejemplo, desde un búfer de archivos remotos, Mx shell
RET abre un shell en el servidor remoto, y comandos como Mx rgrep
RET y Mx find-grep-dired
RET ejecutarán find + grep en el servidor remoto. Creo que esto se aplica en general a las funciones que invocan comandos de shell.
Para mí, esa es más que suficiente razón para usar Tramp (a menos que instale Emacs en el servidor remoto y usar su pantalla local era una opción en cuyo caso, para el uso a largo plazo, consideraría hacerlo en su lugar).
(*) Cuando uso Windows solía alojar una máquina virtual Linux localmente y ejecutar Emacs dentro de esa (con Cygwin proporcionando la pantalla X) por la única razón de usar ControlMaster for Tramp ( https://.com/a/3049375/324105 )
¿Conoce la sección en la documentación de vagabundo en gnu.org que menciona el uso de rsync? Dice, en parte:
5.3 Métodos de transferencia externa
Los métodos de transferencia externa operan a través de múltiples canales, utilizando la conexión de shell remota para muchas acciones mientras se delegan transferencias de archivos a una utilidad de transferencia externa.
Esto ahorra la sobrecarga de codificación y descodificación que la multiplexación de la transferencia a través de la conexión tiene con los métodos en línea.
...
rsync - ssh y rsync El uso del comando ssh para conectarse de forma segura a la máquina remota y el comando rsync para transferir archivos es casi idéntico al método 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.