2008-09-29 4 views
11

나는 emacs tramp를 사용하여 원격 개발을 수행해 왔으며 매우 느린 것으로 나타났습니다. 파일을 저장할 때마다 저장을 완료하는 데 약 10 초가 걸립니다. 그래서, 지금 원격으로 파일을 전송하기 위해 rsync를 사용하고 있으며, 훨씬 빨라졌습니다. 약 2 초 정도 걸립니다. 이맥스의 로컬 저장은 즉시 가능합니다. tramp 내에 rsync가 명령 줄에서하는 것처럼 빨리 실행되도록하는 구성 옵션이 있습니까? rsync 대신 tramp를 사용하면 성능이 좋지 않더라도 어떤 장점이 있습니까?원격 개발을 위해 emacs tramp와 rsync 사용하기

답변

5

ssh/scp 기능에 tramp를 사용하는 경우 영구 SSH 연결을 열면 tramp 작업이 훨씬 빨라집니다. 매번 새로운 연결을 생성하지 않고 기존 연결을 재사용합니다. 보안에 영향을 미치지 않으면 서 많은 암호화 오버 헤드를 줄일 수 있습니다. SSH ControlMaster 기능에 대한이 기사를 참조하십시오.

+0

여전히 10 초 정도 걸리지 만 다른 서버에 즉시 연결할 수 있습니다. 서버 문제 일 수 있는지 궁금합니다. –

+0

여전히 10 초가 걸리면 지연을 유발하는 원격 시스템의 .bashrc/.bash_profile 일 수 있습니다. –

3

gnu.org의 tramp 문서에서 rsync를 사용하는 것에 대해 알고 있습니까? 그것은 부분적으로 말한다 :

5.3 외부 전송 방법

외부 전송 방법

외부 전송 유틸리티로 파일을 전송을 위임하면서 많은 작업의 원격 셸 연결을 사용하여, 여러 채널을 통해 작동합니다.

이것은 하나의 연결을 통해 전송을 다중화하는 인코딩 및 디코딩 오버 헤드를 인라인 메서드와 함께 절약합니다.

...

Rsync를 - SSH와 rsync를 원격 컴퓨터와 파일을 전송하는 명령 rsync에 안전하게 연결하기 위해 SSH 명령 사용은 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. 
11

, 난 당신이 원격 서버에 연결하기 위해 SSH를 사용하는 가정합니다.

나는 작업을 완료하는 데 걸리는 시간은 대부분 연결 설정과 인증에서 비롯된 것이라고 생각합니다. 새로운 OpenSSH 버전을 사용하고 있다면이 기능은 연결 공유 기능을 사용하면 도움이됩니다. ssh_config (5)의 ControlMaster를 참조하십시오.

난 당신이

ControlMaster auto

을 시도하고 그 상황을 개선되는지 확인하는 것이 좋습니다.

0

이전에 특정 서버에 문제가 있다고 말했기 때문에 문제가 발생한 컴퓨터에서 sshd 구성 파일을 확인하십시오. 아마도/etc/ssh/sshd_config와 같은 것일 것입니다.

"UseDNS"라는 구성 옵션을 찾으십시오. "아니오"로 설정하십시오.

속도가 향상되지 않는지 확인해보십시오. 그렇다면 ssh는 아마도 당신이 신경 쓰지 않는 역방향 DNS 조회를 기다리는 시간이 될 것입니다.

0

최근 원격 파일을 로컬에서 편집 할 수 있도록 sshfs를 채택했습니다.Linux, Mac 및 Unix 시스템에서 잘 작동하며 모든 액세스가 아니라 하나의 명령으로 ssh 부품을 배치합니다. 그리고 전적으로 사용자 공간에 존재합니다.

1

나를 위해 속도가 빨라졌습니다! 이제 부랑불 사용은 정말 즐겁습니다. 나는 또한 sshfs를 통해 이맥스 내에서 컴파일하고 tramp가 나를 위해 원격 컴파일을 수행하고 나를 위해 컴파일러의 오류 메시지를 해석하기 때문에 선호한다. :)

0

ssh 메소드를 사용하는 경우 대신 sftp 메소드를 사용해 볼 수있다. , 나는 (나는 믿는다) 원격 ssh 서버에 지속적인 sftp 연결을 연다. 또한 GNOME을 사용하는 경우 sftptramp-gvfs-methods에 추가하여 TRAMP가 GNOME의 GVFS를 사용하여 sftp 서버에 연결되도록 할 수 있습니다.이 속도는 더 빠르거나 더 편리 할 수도 있습니다.

5

답변의 부부 (비싼 연결 설정/손 흔들림 그렇지 않으면 ssh를 통해 각각의 부정 기선 작업에 필요한을 피할 수있는) 열린 지속 ssh 연결을 유지하기 위해 ControlMaster을 가능하게 언급,하지만 당신은 돈 한 ' 이것을 사용하기 위해 Emacs 밖에서 아무것도 구성 할 필요가 없다 - tramp-methods 변수를 보면 ControlMaster를 가능하게하는 기존의 방법이 있다는 것을 알 수있다.

특히, rsynccscpc 방법.

연결의 양면은 물론 ControlMaster를 지원해야합니다 (예 : Cygwin에서 그렇게 할 수는 없지만 Windows 사용자의 경우 부끄럽습니다 *). 그 중 하나를 tramp-default-method으로 설정하는 것이 좋습니다.

지속적인 연결이 없다면 확장 된 Tramp 사용법이 꽤 고통스럽지 만, 하나의 기능을 사용하면 매우 유용합니다. (합리적으로 빠른 연결이 주어지면 일어나는 일을 거의 잊을 수 있습니다.)

질문의 마지막 부분에 대한 대답으로, 예, 수동으로 파일을 동기화하는 대신 Tramp를 사용해야하는 매우 좋은 이유가 있습니다. 주요한 것은 셸 명령이 원격 서버에서 직접 실행될 수 있으며 Emacs가 세부 사항을 처리하므로 사용자가 생각하지 않아도된다는 것입니다. 원격 파일 버퍼에서 예를 들어

, MXshellRET가 원격 서버에서 쉘을 열고, 및 MX는find-grep-diredRET가 실행됩니다 RETrgrepMX 같은 명령 원격 서버에서 + grep을 찾습니다. 나는 이것이 일반적으로 쉘 명령을 호출하는 함수에 적용된다고 생각한다.

저에게는 Tramp를 사용하는 데 충분한 이유가 있습니다 (원격 서버에 Emacs를 설치하지 않고 로컬 디스플레이를 사용하는 것이 옵션 인 경우 장기간 사용하기 위해 대신 사용하는 것이 좋습니다). Windows를 사용하는 경우

(*) 나는 부정 기선 (https://stackoverflow.com/a/3049375/324105)에 대한 ControlMaster를 사용하는 유일한 이유 (Cygwin에서의 X 표시를 제공하여) 그 내부 이맥스 로컬 리눅스 VM을 호스팅하고 실행하는 데 사용.

+0

내 이맥스 25.3.2는'tramp-methods'에'scpc' 나'rsyncc'를 가지고 있지 않지만,'tramp-ssh-controlmaster-options' 변수가'% c'에 삽입되어 있고, 일반적인'ssh' 메쏘드는' % c' – unhammer