LINUX.ORG.RU
ФорумTalks

[wayland mode] линупс - кривое тормозное поделие


0

3

Пока all обсуждают что лучше - wayland или legacy под названием иксы, я бы предложил поднять другую гораздо более интересную тему: ведро линупса есть окаменевший кал мамонта. Его надо перепилить

И вот почему:

1)Возьмем отображение физических страниц памяти в виртуальные адреса. Все что там в ведре нагорожено, очень наверно хорошо - но только для случая абсолютно абстрактной программы, которая хаотически дергает сисколлы с рандомными значениями. Только на реальных программах то, работает линупс ортогонально тому, как удобно работать для современных процов.

В реальной жизни не нужно уметь mapнуть любой адрес в любой адрес. Нужно мапать сразу блобы, и в 99% случаев некритично, сколько адресного пространства потеряется из-за выравнивания. У вас много на десктопе программ, у которых по данным top виртуальной памяти по 2гига и более? А гиг? А 512 метров? я окромя ожиревших иксов и фурфокса не упомню, и то - у последнего память занимает heap, которому тоже некритично где лежать, главное лежать. а иксы... :) ну да, иксы. зачем они, когда есть wayland И современные процы позволяют это сделать. Пусть процесс содержит таблицы страниц для верхнего уровня(или среднего для x86-64) , а блобы в памяти содержат нижний уровень. Да, тогда их мапить получится лишь по адресам, кратным 4мб или 2мб. Зато форк и mmap будет мгновенным - не надо создавать на форке кучу структурок, нужных для того, чтоб следить, а кто это юзает физическую страницу, которую мы выгоняем на диск.

Мапнуть блоб к себе? Не вопрос,

memcpy(mytables+offset, blob->phys_addr_tables, sizeof(pagedescr)*((size_of_blob+big_page_size-1)/big_page_size)

Надоела страница? Не вопрос,

pagedescr * tmp=pages[index].where_is_it->phys_addr_tables;
tmp[pages[index].offset]=0;

И все действия такой же сложности примерно. Хелловордовой.

Далее, большинство библиотек и, ширше говоря, тулкитов, идет «паровозом». То есть Qt = {libQtCore + libQtGui + libQtXml + libQtNetwork + blablabla} Вот что мешает возложить на линкер боевую задачу - знать из конфига, какие либлиотеки меж собой дружат, и для каждой такой группы держать один блоб to rule them all? Сколько там стартует типовое кедоприложение из-за динамической линковки? 7500 времени? Причем тормозит из-за того, что по мнению ld-linux.so.2 все либлиотеки «разные», он их каждый раз как в первый раз видит, и заново создает .got для них. ну слинкуй ты их намертво в блоб и держи 1 .got на всех, тем более что он меньше будет, чем раздельный. А поскольку без запроса блоб в память не подкачивается, не потребуется городить какую-то модульность. Не нравится libFoo5 из libFoo[1-100]? Не обращайся, делов-то.

Реализация плевая, соотвествующий код сокращается до предела, но ведь мы же не можем ничего менять потомучтосовместимость. Поэтому проще заменить линупс.

2)Терминалы - зачем это в ведре? От ведра требуется лишь «передать строку» и послать сигнал. Мне казалось, ведро уже умеет это делать. Вот честно, скажите, какая повседневная программа из консоли требует себе в stdin/stdout терминал? НЯП все нормально шуруют через пайп. От пайпа терминал отличается разве что очень полезными ioctlами, без которых жизни красноглазому нет: это установить сколько бит в байте, установить скорость в битах/секунду, и прочая лабуда. Из нового есть только костыль включить/выключить утф8. Я еще понимаю, когда речь о com-портах идет. Ну оставьте эту байду в драйвере ком-порта, зачем это в tty тащить, да еще в ведро? Вынести все в libtty.so и не держать в ведре страшное legacy. Правильно Alan Cox ушел, сколько можно подпирать костылями кучу дерьма, созданную для эмуляции ламповых печатных машинок? Размер «окна», управляющие символы - все это должно делаться в userspace. Один хрен никто в чистом терминале с моргающим курсором давно не сидит. Везде xterm, gnome-terminal, konsole и т.д. и т.п. В винде под цигвином вся эта консольная лабуда работает, хотя там в ведре никаких юниксовых терминалов нет.

3)Планировщик - вот скажите мне пожалуйста, как через nice сделать так, чтоб фоновое приложение икс и его потомки в сумме жрали не меньше 18.2% процессора, но не вытесняли остальных? Задача элементарнейшая - скажите студенту: сделай мне алгоритм, который будет делать кольцевой список задач, у которых может быть такой же список подзадач, и % минимального использования проца в секунду или min((1-reserved_time)/nprocs) если не указано, получишь зачет. Студент сделает. И этот алгоритм будет работать потому что он тупой как хелловорд. Без всяких там cfs/bfs и 12309. Почему у линупса до сих пор такой сраный планировщик, что его можно разбомбить форк-бомбой и на нем под нагрузкой звук хрюкает?

☆☆☆

запили, и отдай патч линусу. чтоб он его не принял )

ass ★★★★
()

>Да, тогда их мапить получится лишь по адресам, кратным 4мб или 2мб. Зато
Расстрелять.

Deleted
()

Не вижу кросспост в LKML.

Deleted
()

чтоб фоновое приложение икс и его потомки в сумме жрали не меньше 18.2% процессора, но не вытесняли остальных?

/0

tailgunner ★★★★★
()

<======= Стена там

Лезвие для вдоль там ========>

Насчет адекватности пункта 1 - хз, пункты 2 и 3 - неадекватны.

Deleted
()

Отсыпь, чувааак!

Deleted
()

А теперь напиши это в lkml.

AiFiLTr0 ★★★★★
()

Дело говорите, ео Linux изначально не задумывался как микроядро, от этого там столько приблуд.

deterok ★★★★★
()

Перепилить несомненно надо. Только работы дофига. Я бы для начала порекомендовал выделить ядро в два пакета - базовое ядро и модули к нему с драйверами всяких железяк. Затем надо вести одновременно две версии API в одном ядре - longterm и самое новейшее. Приоритет в написании актуальных драйверов отдавать новейшему, но если железяка будет работать сравнительно долго - делать бэкпорты и архивы драйверов для longterm API. И обновлять longterm API не ранее, чем через 3 года.

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

что адекватного в терминалах в ведре? поддержка телетайпов во всех полях? мне не нужно, у меня ПК. и у моих друзей ПК. и на работе везде ПК. и в магазинах тоже ПК. и везде в байте 8 бит, и юникод. почему мои программы должны притворяться телетайпами в 21первом веке?

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

а где я дрова брать буду? не reactos чай, спасибо что хоть gallium к ведру намертво не прибили гвоздями

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

ckotinko> что адекватного в терминалах в ведре? поддержка телетайпов во всех полях?

Не - ну можно сделать как в Plan9, вместо телетайпов консольное устройство делать.

ckotinko> мне не нужно, у меня ПК. и у моих друзей ПК. и на работе везде ПК. и в магазинах тоже ПК. и везде в байте 8 бит, и юникод. почему мои программы должны притворяться телетайпами в 21первом веке?

Что такое формализм, напоминать надо?

Quasar ★★★★★
()

1 и 3 - хз ибо не в теме.

А вот насчет 2 - это наглое 4.2

Везде xterm, gnome-terminal, konsole и т.д. и т.п.

Ага,ага - а запустика все эти итдитп без терминала - слабо?

aleks13
()
Ответ на: комментарий от ckotinko

ckotinko> а где я дрова брать буду?

Ты о чём вообще?

Quasar ★★★★★
()

Терминалы - зачем это в ведре? От ведра требуется лишь «передать строку» и послать сигнал. Мне казалось, ведро уже умеет это делать. Вот честно, скажите, какая повседневная программа из консоли требует себе в stdin/stdout терминал?

Леннарт, перелогинься.

Quasar ★★★★★
()

сделать так, чтоб фоновое приложение икс и его потомки в сумме жрали не меньше 18.2% процессора, но не вытесняли остальных?

cgroups.

Deleted
()

Далее, большинство библиотек и, ширше говоря, тулкитов, идет «паровозом». То есть Qt = {libQtCore + libQtGui + libQtXml + libQtNetwork + blablabla} Вот что мешает возложить на линкер боевую задачу - знать из конфига, какие либлиотеки меж собой дружат, и для каждой такой группы держать один блоб to rule them all?

По этому поводу no-dashi писал нечто, делающее этим библиотекам mmap и mlock. Костыль, но красивый, потому что встраивается в любую систему (с поддержкой PIC, ЕМНИП) и ничего не портит на диске.

Ну оставьте эту байду в драйвере ком-порта, зачем это в tty тащить, да еще в ведро?

Чувак, ты фейл. Драйвер ком-порта где, по-твоему, находится, если не в ведре? А tty, по-твоему, это только RS232?

shimon ★★★★★
()

Все что там в ведре нагорожено, очень наверно хорошо - но только для случая абсолютно абстрактной программы

В реальной жизни не нужно уметь mapнуть любой адрес в любой адрес

Лучше иметь такую возможность, чем городить костыли потом, когда такая программа объявится.

buddhist ★★★★★
()

сделать так чтоб фоновое приложение икс и его потомки в сумме жрали не меньше 18.2% процессора, но не вытесняли остальных?

man cpulimit

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

Это к сожалению не катит, т.к например Java от него вешается, да и скрипты тоже.
И любой тяжелый софт наверняка тоже умрет смерью храбрых.

Т.к cpulimit не прозрачно лимитирует ресурсы процесса и он думая что может сожрать свое ядро просто падает получив «ложкой» от cpulimit.

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

Тоже не понял наезд на терминалы.

Описания находятся во внешнем termcap. Описание Xterm там же находится.

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

А чо пункт 2? Вон в венде есть COM, та еще трава. Зато, если я правильно понял ТСа, позволяет как раз то, что он хочет..

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

а при чем тут микроядро? речь о том, чтоб сделать нормально 1)маппинг памяти 2)планировщик 3)убрать говно.

я хочу чтоб mуsqld работал, но когда я играю в контру, то пусть он будет добр, не более 20% и по первому требованию с проца нафиг. и пока это не реализуемо нормально.

чтоб набор c++ библиотек загружалась не как каждый раз как впервые ее видим, а один раз как блоб и не целиком. Оно уже сейчас не требует загрузки всего и сразу в теории, все дело в волшебных структурках в ядре, по 1 на (колво страниц)*(колво процессов куда попала)+N*vm_area

Не - ну можно сделать как в Plan9, вместо телетайпов консольное устройство делать.

можно сделать просто несколько pipe, и через tgkill раздавать сигналы. это уже есть в ведре, оно работает и нет смысла дублировать этот функционал. Ну кроме совсем кривой экзотики вроде pppd никто даже не заметит

Что такое формализм, напоминать надо?

это способ запудрить мозги заказчику мудреными фразами, подчерпнутыми из протухших древних талмудов

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

А зачем тяжёлый софт ограничивать? Ему логично наоборот отдать почти всё что есть. Я cpulimit обычно для ffmpeg и mlt использовал, чтобы тихо себе кодировали и не мешали.

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

для «такой программы» можно дать возможность управлять своим блобом вручную. например gc в жабе мог бы указывать ведру, какие страницы в блобе можно «грохнуть».

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

тогда зачем в ведре есть код, который относится к tty?

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

приведу аналогию: давным давно в мэйнфреймах были перфокарты. и там было 80 символов на строку. так до сих пор в спецсофте сохраняются всякие «red zone»(за 80м символом), «yellow zone»(за 72м символом) и прочие ограничения на длину строки в программе. потому что вдруг там какой код из 60х взбрыкнет и скажет «а не буду».

ckotinko ☆☆☆
() автор топика

Сделай форк, и всего делов.

deb
()
Ответ на: комментарий от firestarter

Ну софт бывает тяжелым не только по необходимости, но и из за кривоты.
А ещё есть софт который просто должен работать в фоне не потребляя более N% процессора.
И тут cpulimit увы не справляется.

Т.е он очень хорошо спасает на серваке от зависания кривых скриптов или софта (который может повесить весь сервер).
Но на должность ограничителя ресурсов он не очень подходит.

Ява очень часто хочет сожрать 2-3 ядра и её сложно ограничивать в этом желании.
I2P/Freenet или торрент-клиенты со всякими кривыми демонами...

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

Ладно. Устройствами в /dev рулит ядро. Как ты предлагаешь выпилить терминалы из ядра и запилить в юзерспейс, не сломав совместимость с приложениями или хотя бы с POSIX?

Дальше: если мы вынесем терминалы в юзерспейс, то в ядро придется запилить костыль, позволяющий задействовать для терминала режим 80x25, предусмотренный любым BIOS-ом.

Deleted
()

ckotinko

Размер «окна», управляющие символы - все это должно делаться в userspace. Один хрен никто в чистом терминале с моргающим курсором давно не сидит.

ну вот навернуться у вас иксы, и будете вы плакать. Ибо зайти в этот ваш Terminal уже не получится. Как и в венде. Но в венде для этого имеется костыль, «безопасный режим». Его придётся реализовывать. А это, ИМХО, куда как сложнее, чем тёплый, ламповый tty.

ckotinko

Студент сделает.

может вы сами для начала попробуете? Что сразу «студента» напрягать?

ckotinko

И этот алгоритм будет работать потому что он тупой как хелловорд. Без всяких там cfs/bfs и 12309.

с чего-бы это там не будет 12309? Ну поставьте себе ядро 2.4.х, там как раз 12309 нет. И планировщик простой сравнительно. Вот только работает оно медленнее.

ckotinko

Почему у линупса до сих пор такой сраный планировщик, что его можно разбомбить форк-бомбой и на нем под нагрузкой звук хрюкает?

хрюкает у вас алса. Это совсем другое. Ядро тут не причём.

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

+ в ядро же включен патч (вокруг него еще огромное бурление на ЛОРе было), который разносит программы по cgroups-ам в зависимости от терминалов. Правда, для его задействования, ЕМНИП, нужно echo 1 > /proc/sys/kernel/sched_autogroup_enabled

Deleted
()
Ответ на: комментарий от ckotinko

ckotinko

приведу аналогию: давным давно в мэйнфреймах были перфокарты. и там было 80 символов на строку.

не так. Разрешение 80х25 символов монитора много лет было стандартным. Оно и сейчас такое, если у вас всё навернулось. Сами-же будете мучится во время ремонта! Или у вас есть ремонтник?

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

Нет, ограничение 80 символов происходит от режима 80x25. Сейчас оно актуально по другой причине: мне, например, удобно разбить emacs на две части по вертикали: в одной - код, а в другой - Outline, man, коммандная строка и т.д. И вот как раз в окно с кодом влезает около 80 символов по ширине.

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

Текстовую консоль в отдельный модуль запихать. Всё равно эта штука нужна только если по каким-то причинам не запустились иксы.

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

Устройствами в /dev рулит ядро

на самом деле udevd. и я вот так сразу не упомню, какие приложения, кроме самих терминалопрог и pppd заметят отсутствие наличия терминала. терминалам можно выдать бублиотеку, через которую они будут общаться с дочерними процессами. 2хпрофит, не будет велосипедов.

костыль, позволяющий задействовать для терминала режим 80x25

KMS?

ckotinko ☆☆☆
() автор топика

вас много на десктопе программ, у которых по данным top виртуальной памяти по 2гига и более?

I2P, Freenet.

Терминалы - зачем это в ведре?

Более того, зачем эмулировать такой музейный экспонат, как ARS 33? Зачем вообще эмулировать юниксы?

Один хрен никто в чистом терминале с моргающим курсором давно не сидит.

Я сижу.
И вообще, ты хочешь сделать ещё один Plan 9.

quantum-troll ★★★★★
()
Ответ на: комментарий от ckotinko

и я вот так сразу не упомню, какие приложения, кроме самих терминалопрог и pppd заметят отсутствие наличия терминала.

Да всё, что связано с pppd, minicom, kermit и прочими :) А еще ssh и всё остальное, использующее псевдотерминалы. API терминалов входит в POSIX, избавиться от него по этой причине нельзя. Подсунуть библиотеку, эмулирующую тот же API - тут мы столкнемся с невозможностью эмулировать ioctl. А отсутствие девайсов в /dev поломает getty и всё остальное, что опирается на них. Ну и нельзя сбрасывать со счетов старый API для псевдотерминалов, основанный на поиске доступных псевдотерминалов в /dev или /dev/pts.

костыль, позволяющий задействовать для терминала режим 80x25

KMS?

Как KMS (вместе с FB) относится к обычному терминалу 80x25?

Deleted
()

Планировщик

Единственное, что сказал по существо. Остальное какой-то нелепытй толстый брос, настолько толстый, что не пролазит через монитор.

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

Какие ещё диагностические сообщения? У меня при загрузке на экране эмблема Ubuntu, и кружочки маленькие мигают по очереди.

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

А у меня по дефолту список запускаемых сервисов, а если выбрать в гробе вторую опцию, то весь лог ядра (и эта опция очень полезна в случае железячных неприятностей).

Deleted
()

// толстый режим торсионных полей
А ещё эфирные ветра :)

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