터미널 에뮬레이터가 TTY 1-6만큼 빠를 수 있습니까?


59

나는 내장 된 gnome-terminal, aterm, xterm, wterm에서 rxvt에 이르기까지 다양한 터미널 에뮬레이터를 최근에 시도했습니다. 내가 한 테스트는 다음 순서로 수행됩니다.

  1. 2 개의 창으로 tmux 창을 엽니 다
  2. 왼쪽 창 등의 자세한 정보 집약적 인 작업을 할 것이다 grep a /et/c -r또는 간단한time seq -f 'blah blah %g' 100000
  3. 오른쪽 분할 창은 구문이 설정된 vim 창으로, 100 줄 이상의 코드가있는 파일을 엽니 다.

왼쪽 창이 많은 출력을 인쇄 할 때 오른쪽 창이 매우 느리고 응답이없는 것 같습니다. vim에서 스크롤을 시도했지만 변경하는 데 1-2 초가 걸립니다. CtrlC왼쪽 창 을 누르면 10 초 이상 기다렸다가 멈 춥니 다.

TTY에서 동일한 작업을 수행하면 ( CTRL+ ALT+ ( F[1-6]) 누름 ) 발생하지 않으며 두 창 모두 매우 반응이 좋습니다.

앤티 앨리어스 글꼴, 색상 표시, 기본 설정 사용 및 xmonad 및 openbox로 변경하는 등 일부 구성을 설정했지만 아무 것도 변경하지 않습니다.

time seq -f 'blah blah %g' 100000이 터미널 의 결과 는 실제로 다르지 않지만 특히 spitted pane tmux (또는 다른 멀티플렉서)를 실행할 때 응답 성이 다릅니다. 참고로, 나는 그들 모두를 최대화 모드로 실행하고 있습니다.

프레임 버퍼 터미널에 대해 읽었지만 어떻게 작동하고 터미널 에뮬레이터의 속도를 높이는 데 사용할 수 있는지 잘 모르겠습니다.

내 질문은 터미널 에뮬레이터를 TTY보다 훨씬 느리게 만드는 것입니다. TTY만큼 빠르게 만들 수 있습니까? 하드웨어 가속 또는 무언가? 내가 아는 한 가지, 최대화 된 터미널 에뮬레이터를 실행할 때 X 서버의 해상도는 1920x1080이며 TTY를 실행할 때 그보다 작지만 성능에 어떤 영향을 줄지 잘 모르겠습니다.


큰 버퍼가 어딘가에처럼 소리
Thorbjørn Ravn 안데르센

2
tty [1-6]이 항상 자연스럽게 빠르지 는 않습니다 . 내가 사용하는 컴퓨터 중 하나에서 xterm이 제대로 수행되는 동안 텍스트 콘솔이 매우 느립니다.
把 友情 留 在 无 盐

답변:


75

GUI 터미널 에뮬레이터가 문자열을 인쇄 할 때 문자열을 글꼴 코드 포인트로 변환하고 코드 포인트를 글꼴 렌더러로 보내고 비트 맵을 다시 가져와 X 서버를 통해 해당 비트 맵을 디스플레이에 블리트 해야합니다.

글꼴 렌더러는 글리프를 검색하고 실행해야합니다 (트루 타입 / 오픈 타입 글꼴은 글꼴 렌더러의 가상 머신 내에서 실행 되는 프로그램 이라는 것을 알고 있습니까?). 각 글리프를 실행하는 과정에서 글꼴 메트릭, 커닝 (모노 스페이스 글꼴 및 커닝이 잘 혼합되지 않음), 유니 코드 준수와 관련하여 미묘한 결정이 내려집니다. 픽셀 어드레싱. 그런 다음 터미널은 글꼴 래스터 라이저에서 생성 한 버퍼를 가져 와서 픽셀 형식 변환, 알파 채널 (하위 픽셀 주소 지정), 스크롤링 ( 더 많은 블리 팅 포함) 등 을 처리하여 올바른 위치로 블리트해야합니다 .

비교, 텍스트 모드에서 (주 : 가상 터미널을 실행에 문자열을 작성 하지 그래픽 콘솔은) 비디오 메모리에 해당 문자열을 작성하는 것을 포함한다. '안녕하세요, 세계!' 13 바이트 쓰기 (컬러를 원하면 16 비트 단어 13 개)가 필요합니다. X 글꼴 래스터 라이저는 아직 스트레칭 연습과 너클 크래킹을 시작하지 않았으며 완료되었습니다. 이것이 바로 텍스트 모드가 수십 년 전부터 매우 중요한 이유입니다. 구현 이 매우 빠릅니다. 스크롤링도 생각보다 쉽습니다. 유용한 Motorola 6845 기반 MDA 및 CGA에서도 단일 8 비트 값을 레지스터에 기록하여 화면을 세로로 스크롤 할 수 있습니다 (16 일 수 있습니다. 너무 길었습니다). 화면 새로 고침 회로나머지는했다. 기본적으로 프레임 버퍼의 시작 주소를 변경했습니다.

동일한 컴퓨터 에서 텍스트 모드 터미널만큼 빠른 그래픽 터미널을 만들 수있는 방법은 없습니다 . 그러나 현대 컴퓨터에서 볼 수있는 가장 느린 그래픽 터미널보다 텍스트 모드가 느린 컴퓨터가 있습니다. 원래의 IBM PC는 꽤 나빴습니다 (DOS는 소프트웨어 스크롤을 한숨 쉬었습니다). 80286에서 첫 번째 Minix 콘솔을 보았을 때 (점프) 스크롤 속도에 놀랐습니다. 진보는 좋습니다.

업데이트 : 터미널을 가속하는 방법

@ poige 는 이미 그의 답변 에서 3을 언급 했지만 여기에 내 자신의 설명이 있습니다.

  • 터미널의 크기를 줄이십시오. 내 자신의 터미널은 화면을 채울 때까지 성장하는 경향이 있으며 그렇게 할 때 속도가 느려집니다. 나는 그래픽 터미널에 화를 내고 짜증을 내고 크기를 조정하면 모든 것이 더 좋아집니다. :)
  • (@poige) 다른 터미널 에뮬레이터를 사용하십시오. 일부 최신 기능을 사용하면 엄청난 속도 향상을 얻을 수 있습니다. xterm그리고 rxvt작품은 정말 잘, 그것은 환상적인 터미널 에뮬레이터가 있습니다. 귀하의 테스트에서 '현대적인'테스트보다 성능이 더 우수한 것으로 나타났습니다.
  • (@poige) 확장 가능한 글꼴을 사용하지 마십시오. 1986 년에 전화를 걸어 터미널을 다시 요청할 수도 있지만 더 빠르다는 것을 부정 할 수는 없습니다. ;)
  • (@poige) 앤티 앨리어싱 / 서브 픽셀 주소 지정 및 힌트를 사용 하여 글꼴 래스터 라이저벙어리십시오 . 대부분 환경 변수에서 재정의를 허용하므로 전역 적으로 수행 할 필요가 없습니다. 참고 : 비트 맵 글꼴을 선택하면 의미가 없습니다.
  • : 이것은 가장 상처를합니다 (여러 창)를 사용하지 않는tmux - 옆에 두 개의 단자를 측면을 실행합니다. tmux두 개의 분할 창을 표시 할 때 커서를 많이 이동하려면 터미널 지시문을 사용해야합니다. 최신 터미널 라이브러리는 매우 빠르고 최적화가 우수하지만 여전히 원시 터미널 대역폭에서 바이트를 훔치고 있습니다. DEC VT 호환 터미널에서 커서를 임의의 행으로 이동하려면을 보내십시오 ESC [ row ; col H. 6–10 바이트입니다. 여러 터미널을 사용하면 작업을 분리하고 위치 지정, 최적화, 버퍼링 및 기타 모든 작업을 수행하지 않아도되며 curses여러 CPU 코어를 더 잘 활용할 수 있습니다.

5
+1이지만 tmux는 전송되는 추가 이스케이프 코드보다 훨씬 복잡합니다. 터미널은 절반이 아닌 전체 창을 스크롤하기위한 것입니다. 따라서 tmux가 왼쪽 분할 창의 모든 텍스트를 한 줄 위로 이동해야하는 경우 새 행을 작성하고 터미널을 위로 이동 시키면 전체 분할 창을 다시 그려야합니다.
Patrick

1
맞아! 나는 그것을 잊었다. 거기에 있지만 화면의 일부를 스크롤 할 수있는 단말기되어 (IIRC가 호출 된 화면의 일부를 '보호'-이 형태 등을 위해 사용되었다), 그것은 결코 특히 유연성, 그리고 아마도 현대 터미널 에뮬레이터를 지원하지 않습니다. 오늘날에도 여전히 기괴한 쓸모없는 지시어가 여전히 구현되어 있음을 알 수 있습니다.
Alexios 2016 년

3 년 후에 이것을 회신하지만 누군가가 이것이 유용하다는 것을 희망합니다. vim (예, NERDTree)에서 세로 분할을 할 때만 지연이 발생 하지만 스크롤 중에는 일반 분할이 전혀 문제가되지 않는 것 같습니다.
shriek

17

한편 @Alexios는 모든 이유를 잘 설명했으며, 통증을 상대적으로 완화시키는 몇 가지 사항을 언급 할 수 있습니다.


1
또한 이것은 고통스러운 일이며 터미널의 크기를 줄입니다 (OP는 1920x1200px 창을 사용하고 있습니다). 나는 큰 터미널을 좋아 하고 화면이 커질 때까지 자라는 경향이 있지만 터미널이 커질수록 터미널 속도가 떨어집니다. 조차 konsole(내가 좋아하는).
Alexios

3
konsole게으른 화면 업데이트를 수행합니다. 출력을 즉시 표시하는 대신 업데이트를 "일괄 처리"하기 위해 더 많은 출력을 기다립니다. 그렇기 때문에 OP의 스트레스 테스트에 완전히 반응하는 지점까지 잘 수행됩니다.
ninjalj

2
글꼴 렌더링이 어느 시점에 캐시되는지 확인하십시오. 문자 f를 나타내는 픽셀이 픽스맵에 복사 될 때마다 벡터 정의에서 다시 렌더링되는 것으로 생각하지 않습니다. (새로운 크기 또는 새로운 각도로 렌더링하지 않는 한). 나는 정말 멋진 비트 맵 글꼴이 있다는 사실에 논쟁하지 않을 것입니다. 비트 맵 글꼴은 원하는 크기로 존재하는 경우 외관만으로 가장 좋은 옵션 일 수 있습니다.
Peter Cordes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.