Чи може термінальний емулятор бути таким же швидким, як TTY 1-6?


59

Останнім часом я пробую різні емулятори терміналів, від вбудованого gnome-terminal, aterm, xterm, wterm, до rxvt. Тест, який я робив, знаходиться в такому порядку:

  1. Відкрийте вікно 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])), цього не відбувається, і обидві панелі дуже чуйні.

Я перетворив деякі конфігурації, такі як antialias шрифти, повороти розмальовки, використовую параметри за замовчуванням і переходжу на xmonad та openbox, але це нічого не змінює.

Результат time seq -f 'blah blah %g' 100000насправді не відрізняється між цими терміналами, але реагування насправді відрізняється, особливо, коли я запускаю плюнуту панель tmux (або інші мультиплексори). FYI, я запускаю їх у максимальному режимі.

Я читав про буферні термінали, але не знаю, як це працює і як це можна використовувати для прискорення емулятора терміналу.

Отже, моє запитання полягає в тому, що робить емулятор терміналу набагато повільніше, ніж TTY? Чи є можливість зробити так швидко, як TTY? Можливо апаратне прискорення чи щось ?. Одне, що я знаю, моя роздільна здатність на сервері X при запуску максимального емулятора терміналу - 1920x1080, і коли я запускаю TTY, це менше, але я не впевнений, як це вплине на продуктивність.


звучить так, що десь є великий буфер
Thorbjørn Ravn Andersen

2
Помітьте, що [1-6] не завжди практично швидко. На одній із машин, якими я користуюсь, текстова консоль дуже повільна, тоді як xterm працює пристойно.
把 友情 留 在 无

Відповіді:


75

Коли емулятор терміналу GUI роздруковує рядок, він повинен перетворити рядок у кодові точки шрифту, надіслати кодові точки рендерингу шрифту, повернути біт-карту та перенести цю растрову карту на дисплей через X-сервер.

Візуалізатор шрифту повинен отримати гліфи та запустити їх (чи знали ви, що шрифти Truetype / Opentype - це програми, що працюють у віртуальній машині в рендері шрифту?). Під час виконання кожного гліфа приймається шалена кількість рішень щодо метрики шрифту, кернінгу (хоча шрифти монопростіру та кернінгу не добре змішуються), відповідність Unicode, і це ще до того, як ми навіть дістанемося до растеризатора, який, ймовірно, використовує під -піксельна адресація. Потім термінал повинен взяти буфер, створений растровим шрифтом, і перекрити його в потрібне місце, піклуючись про перетворення формату пікселів, альфа-канали (для адресації пікселів), прокрутку (що передбачає більш блискуче) та ін.

Для порівняння, запис рядка у віртуальний термінал, що працює в текстовому режимі (зауважте: не графічна консоль), передбачає запис цього рядка у відеопам'ять. 'Привіт Світ!' передбачає написання 13 байт (13 16-бітних слів, якщо ви хочете і кольорів). Растеризатор шрифтів X ще не почав своїх вправ на розтяжку та розтріскування суглобів, і ми закінчили. Ось чому текстовий режим був настільки неймовірно важливим у минулі десятиліття. Це дуже швидко здійснити. Навіть прокручування простіше, ніж ви думаєте: навіть на поважних Motorola 6845 на базі MDA та CGA ви можете прокручувати екран вертикально, записавши в реєстр одне 8-бітове значення (може бути 16 ... це було занадто довго). Оновлення екрану схемизробили все інше. Ви по суті змінювали стартову адресу буфера кадру.

Ви нічого не можете зробити, щоб зробити графічний термінал таким же швидким, як термінал текстового режиму на одному комп’ютері. Але будьте серцем: там були комп’ютери із повільнішими текстовими режимами, ніж найповільніший графічний термінал, який ви коли-небудь бачите на сучасному комп’ютері. Оригінальний комп'ютер IBM був дуже поганий (DOS робив прокрутку програмного забезпечення, зітхання). Коли я побачив свою першу консоль Minix на 80286, я був вражений швидкістю (стрибка) прокрутки. Прогрес хороший.

Оновлення: як прискорити термінал

@ poige вже вказав три у своїй відповіді , але ось я взяв їх на себе:

  • Зменшити розмір терміналу. Мої власні термінали мають тенденцію до зростання, поки вони не заповнюють екрани, і вони стають повільними, коли це роблять. Я переживаю роздратування, дратуюся в графічних терміналах, потім змінюю їх розмір і все краще. :)
  • (@poige) Використовуйте інший емулятор терміналу. Ви можете отримати величезний приріст швидкості ціною деяких сучасних функцій. xtermі rxvtпрацює дуже добре, він має фантастичний емулятор терміналу. Я підозрюю, що ваші тести, можливо, показали, що вони працюють краще, ніж «сучасні».
  • (@poige) Не використовуйте масштабовані шрифти. 1986 може зателефонувати і попросити його термінали назад, але ви не можете заперечити, що вони швидші. ;)
  • (@poige) Вимкніть розповсюджувач шрифтів , вимкнувши адресацію та підказку проти згладжування / підпікселів. Більшість з них допускають переопрацювання змінних оточуючих середовищ, тому вам не доведеться робити це глобально. Примітка: безглуздо, якщо ви вибрали шрифт растрових зображень.
  • Це найбільше зашкодить: не використовуйте (кілька панелей)tmux - запустіть два окремих термінали поряд. Коли tmuxвідображаються дві області, він повинен використовувати термінальні директиви для переміщення курсору навколо багато. Незважаючи на те, що сучасні бібліотеки терміналів дуже швидкі та хороші в оптимізації, вони все одно крадуть байти з вашої необмеженої пропускної здатності терміналу. Щоб перемістити курсор до довільного рядка на терміналі, сумісному з DEC VT, ви відправляєте ESC [ row ; col H. Це 6–10 байт. За допомогою декількох терміналів ви відокремлюєте роботу, усуваючи потребу в позиціонуванні, оптимізації, буферизації та всі інші речі curses, а також краще використовуєте декілька ядер процесора.

5
+1, але річ tmux є ще складнішою, ніж просто надсилаються додаткові коди евакуації. Термінали призначені для прокрутки всього вікна, а не половини його. Отже, коли tmux повинен перемістити весь текст на лівій панелі вгору по рядку, він не може просто створити новий рядок і дозволити терміналу перемістити його вгору, він повинен перемалювати всю область.
Патрік

1
Абсолютно вірно! Я про це забув. Хоча вже були термінали , які можуть прокручувати частина екрану (IIRC його називали «захист» частина екрану - він був використаний для форм і т.д.), він ніколи не був особливо гнучким, і , ймовірно , не підтримуються сучасними емуляторами терміналу. Навіть незважаючи на те, що ви знайдете деякі справді химерні застарілі директиви, які існують і сьогодні.
Олексій

Відповідаючи на це через 3 роки, але сподіваюся, що хтось вважає це корисним. Я помічаю відставання лише тоді, коли роблю вертикальний розкол у своєму vim (так, навіть NERDTree), але звичайний розкол взагалі не виникає під час прокрутки.
крик

17

Тим часом @Alexios досить добре описав усі причини, можу згадати кілька речей, які відносно полегшують біль:


1
Крім того, і це болісно, ​​зменшіть розмір терміналу (ОП використовує вікно 1920x1200px). Я люблю великі термінали, і мій, як правило, зростає, поки вони не стануть майже такими ж великими, як екран, але термінальна швидкість падає з ростом терміналу. Навіть konsole(що я віддаю перевагу).
Олексій

3
konsoleробить ліниві оновлення екрана: замість негайного відображення виводу, він чекає трохи часу для отримання більшого виводу, щоб "пакетно" оновити. Ось чому вона працює настільки добре, що повністю реагує на стрес-тест ОП.
ninjalj

2
Досить впевнений, що візуалізація шрифту зберігається в певний момент. Я не думаю, що пікселі, що представляють букву f, відновлюються з векторного визначення кожного разу, коли вона копіюється в піксельну карту. (за винятком випадків, коли він повинен бути відображений під новим розміром або під новим кутом). Я не заперечую про те, що є кілька справді гарних растрових шрифтів, які можуть бути найкращим варіантом лише для появи, якщо вони трапляються потрібного вам розміру.
Пітер Кордес
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.