LINUX.ORG.RU

Из-за чего может тормозить вывод stdout

 


0

1

Привет!
Есть некий бинарник выводящий большое ко-во строк в stdout, бинарник опрашивает некие демоны и строит репорт который и выводит на экран.
Есть сборка как для Win так и для Linux, в Win вывод отрабатывает очень быстро, а в Linux (Centos) вывод происходить очень медленно, строчка за строчкой. В выводе больше 20 000 строк, может быть в bash есть некий буфер , который переполнятеся и из-за этого вывод как-бы “захлебывается”


запусти программ в чистой консоли, а не в иксовом эмуляторе.

Есть другой вариант: запусти программу так: $ prog | less, а потом нажми на кнопку END.

emulek
()

Вывод в фреймбуферную консоль? mtrr:3,yspan используются? В любом случае лучше перейти в иксовую.

x3al ★★★★★
()

Как уже сказали, это сильно зависит от используемого эмулятора терминала, особенно если не установлены драйверы на видеокарту. Тормоза именно с прокруткой при быстром выводе строк в некоторых эмуляторах терминала

Попробуй сравнить xterm, gnome-terminal и urxvt. Последний ЕМНИП быстрее.

Вариант с less тоже хорош. Кроме того, никто не мешает перенаправить вывод в файл.

router ★★★★★
()
Ответ на: комментарий от router

Спасибо, вывод в терминал без исксов. Попробую варианта с less, а также поэкспериментирую с выводом через zsh, csh и дургими оболочками, вдруг дело в этом..

Dr0id
() автор топика
Ответ на: комментарий от Dr0id

а также поэкспериментирую с выводом через zsh, csh и дургими оболочками, вдруг дело в этом..

это вряд-ли.

emulek
()
Ответ на: комментарий от Dr0id

поэкспериментирую с выводом через zsh, csh и дургими оболочками

Не трать время. Ни баш, ни они не имеют никакого отношения к обработке/отображению твоего выхлопа. Всем занимается эмулятор терминала (в vga-режиме, фреймбуфере (нативном, uvesafb и его форках) — родной ядерный, в иксах — зоопарк прочих).

x3al ★★★★★
()
Ответ на: комментарий от Dr0id

Терминал без иксов → нативный (медленный! иксовые быстрее) либо через VGA-режим (если ядро загружается с параметром vga=xxx), либо через фреймбуфер (mtrr:3,yspan используются? Если нет — почему?).

x3al ★★★★★
()
Ответ на: комментарий от x3al

Есть, конечно, *fberm (например, fbterm и jfbterm), которые НАМНОГО быстрее, но ты бы знал, если бы использовал их. Зачастую их используют ради нормальных шрифтов в консоли (нативные режимы умеют максимум 512, а по факту зачастую 256 символов на весь шрифт без возможности выводить разными шрифтами).

x3al ★★★★★
()

Выводи в stderr Или fflush() как вариант

minakov ★★★★★
()
Последнее исправление: minakov (всего исправлений: 1)
Ответ на: комментарий от x3al

Алексей, спасибо!

Терминал без иксов → нативный (медленный! иксовые быстрее) либо через VGA-режим (если ядро загружается с параметром vga=xxx), либо через фреймбуфер (mtrr:3,yspan используются? Если нет — почему?).

Дополнительных параметров к ядру касамо vga -нет. Станадртное «ведро» centos 6.5

[root@web ~]# cat /proc/cmdline
ro root=/dev/mapper/vg_web-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=129M@0M rd_LVM_LV=vg_web/lv_swap  KEYBOARDTYPE=pc KEYTABLE=us rd_LVM_LV=vg_web/lv_root rd_NO_DM rhgb quiet

Добавлю mtrr:3,yspan посмотрю, что изменилось.

есть, конечно, *fberm (например, fbterm и jfbterm), которые НАМНОГО быстрее, но ты бы знал, если бы использовал их.

вероятнее всего rpm пакетов нет, что делает сложным внедрение это терминала в систему, а вернее не дадут на боевом сервере.

Dr0id
() автор топика

Мне сложно представить, зачем может понадобиться вывод в терминал такого большого количества информации. Если эта информация нужна, не лучше ли выводить в файл?

Black_Shadow ★★★★★
()
Ответ на: комментарий от Dr0id

Вообще не факт, что mtrr:3,yspan помогут. Нужно сначала определиться, в каком режиме грузится консоль по умолчанию и изменит ли фреймбуфер что-то.

Эти опции добавляются к параметрам фреймбуфера (примерно так: video=vesafb,mtrr:3,yspan или video=radeonfb,mtrr:3,yspan), требуют, чтобы в ядре или модуле были эти самые vesafb/radeonfb/nouveaufb, зависят от видеокарты (если используется KMS — никакие *fb не нужно дописывать, например). Точнее без телепатии и вывода dmesg я не скажу.

Проще всего сейчас не использовать yspan, а к исходной строке дописать vga=ask и при загрузке выбрать какой-нибудь текстовый режим. Если он будет достаточен — на этом и остановиться.

Ещё может помочь снижение глубины цвета, конечно. Или переход на управление по ssh.

x3al ★★★★★
()

Начни диагностику с простого:

stdbuf -i0 -o0 -e0 твой_бинарник

proud_anon ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.