LINUX.ORG.RU

Ядро Linux получает автоматическое тестирование : KernelCI

 , , ,

Ядро Linux получает автоматическое тестирование : KernelCI

2

2

У ядра Linux есть одно слабое место: плохое тестирование. Одним из главных признаков того, что нас ждут перемены, является то, что KernelCI, среда автоматического тестирования ядра Linux, становится частью проекта Linux Foundation.

На недавней встрече Linux Kernel Plumbers в Лиссабоне, Португалия, одной из самых горячих тем было то, как улучшить и автоматизировать тестирование ядра Linux. Ведущие разработчики Linux объединили свои усилия в рамках одной среды тестирования: KernelCI. Теперь, на Open Source Summit Europe в Лионе (Франция), KernelCI стал проектом Linux Foundation.

>>> Подробности

★★★

Проверено: unfo ()
Последнее исправление: unfo (всего исправлений: 2)
Ответ на: комментарий от anonymous

Если процесс не нужен, не нужно его и запускать. А если нужен, то его убийство в общем случае может стать фатальным.

И как ты собрался определять приоритеты, да еще в ядре, где по определению информации от юзерспейса должно быть минимум?

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

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

не нужен

Плеер или вкладка в браузере менее важна, чем иксы или pppd.

по определению информации от юзерспейса должно быть минимум

OOM score там как раз уже есть, но он не особо работает.

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

Плеер или вкладка в браузере менее важна, чем иксы или pppd.

Трудно сказать. И плейер и вкладка в браузере может быть смыслом работы всего компьютера. В ней может идти процесс, ради которого весь этот комп купили и запустили. А pppd может и вовсе не нужен.

Простой пример. У меня телефон 8 ядер, 4 гига оперативы и все такое. Запускаю песню. При переходе с портрета на ландшафт и обратно звук хрипит и заикается. А должно хрипеть все остальное, кроме звука! А оно наоборот, прекрасно работает, хотя мне нужен только звук, который как раз хрипит из за того,что все остальное летает...

OOM score там как раз уже есть, но он не особо работает.

Поэтому и не работает, что информации для его вычисления на этом уровне нет и быть не может.

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

Трудно сказать.

Лучше делать хоть что-то, чем вешать всю систему.

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

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

Если процесс не нужен, не нужно его и запускать.

Он может стать ненужен, потому что стал течь, если все процессы из-за него встали колом, о какой дальнейшей работе, пусть даже, изначально нужных процессов, может идти речь?

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

Трудно сказать. И плейер и вкладка в браузере
может быть смыслом работы всего компьютера.

А при переполнении какой смысл от этой псевдоработы, если ничего толком не работает, пусть даже и твой нужный процесс всё повесил, его не осталвлять надо, а прибить и разбираться, что это было такое!

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

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

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

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

Вы не поверите - /proc/<PID>/oom_score_adj В ненавистном systemd - из коробки.

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

nice, ionice, cgroups, oom_score_adj ...? Андроид научился на базе всего этого хозяйства вести себя прилично, но десктоп и сервера это другое. Не готов к плотной дискуссии на эту тему, но на вскидку есть ощущение, что нужны дополнительные механизмы. Но таки да, запрос должны формировать юзерспейсные девелоперы, а они не делают даже того, что делает тот же андроид. Ну а на нет и ничего нет. Все что было нужно тому же андроиду в ядро вошло, так что если даже чего-то сейчас не хватает это вопрос преодолимый, как показывает практика.

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

Но таки да, запрос должны формировать юзерспейсные девелоперы, а они не делают даже того, что делает тот же андроид.

А что делает андроид, если не секрет?

юзерспейсные девелоперы, а они не делают даже того, что делает тот же андроид

На демо https://youtu.be/PLVWgNrVNlc мы пытаемся повесить систему бесконечным открытием вкладок браузера, но ничего не выходит. Что еще должны делать девелоперы?

нужны дополнительные механизмы

Есть PSI и /proc/meminfo, этого полностью достаточно для успешного киллинга жиробасов вовремя.

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

А что делает андроид, если не секрет?

https://developer.android.com/guide/components/processes-and-threads.html

Что еще должны делать девелоперы?

Ну например. Я, как десктоп юзер, хотел бы иметь возможность «закрепить» наиболее важные для меня процессы ( браузер целиком, страницы браузера, IDE, етц). И\или хотел бы получать предложение закрыть какие-то программы из списка в случае приближения ООМ апокалипсиса. Хотел бы иметь возможность вручную регулировать IO приоритеты. Назначать предустановленные приоритеты различному ПО, до запуска. И прочая и прочая. Да, чисто технически я могу и сейчас гаечки подкрутить. Если на то пошло я могу и хтмл глазами парсить. Но что-то не хочется.

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

Зачем? Он то работает. И пусть работает.

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

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

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

походи по базару, поторгуйся (с)

андроид хоть как-то себя ведет. В сравнении с тем же десктопом, который ведет себя никак, это космос.

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

Я, как десктоп юзер, хотел бы иметь возможность «закрепить» наиболее важные для меня процессы ( браузер целиком, страницы браузера, IDE, етц).

Закрепить в смысле запретить убийство ООМ киллером? В nohang это уже реализовано - можно скорректировать badness процесса по его имени, exe realpath, cmdline, cgroup и прочим параметрам.

И\или хотел бы получать предложение закрыть какие-то программы из списка в случае приближения ООМ апокалипсиса

Уведомления о нехватке памяти реализованы, можете что-то закрыть самостоятельно, если успеете, см демо выше.

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

В сравнении с десктопом андроид себя ведет ужасно. Жрущее говно, а не система. Даже страшно себе представить такого наркомана, который поставит андроид на десктоп...

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

Процесс, который запущен и течет, по определению нужен!

Потому что раз он течет, а его запускают и запускают

while true; do tail /dev/zero; done

- самый нужный процесс по версии ALV2. Он будет течь со скоростью гигабайты св секунду, убиваться ООМ киллером, снова запускаться, и так бесконечно.

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

Закрепить в смысле запретить убийство ООМ киллером? можно скорректировать badness процесса по его имени, exe realpath, cmdline, cgroup и прочим параметрам.

закрепить - это кнопочку «пин» на окошечке нажать. Еще раз - в кишочках поковыряться и гайки покрутить я могу и прямо сейчас. Где вся эта радость на уровне юзер интерфейса? Уже что только не вкрячили в эти всевозможные wm, каких только свистоперделок там нет, а за всем, что дает система, как таковая - добро пожаловать пердолиться в консоль. Я люблю консоль, но и там все можно делать по-человечески, а можно как зубы у проктолога лечить. Чтобы понять что и как нужно делать нужно смотреть сверху, от юзера, а не снизу, от ядра.

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

В сравнении с десктопом андроид себя ведет ужасно. Жрущее говно, а не система.

Если знаешь из каких говна и палок он слеплен, то на результат начинаешь смотреть, как на идеал.

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

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

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

Потому, что я среднестатистический хомяк, накатил дефолтную убунту/$дистрибутив_нейм и не доустанавливл ничего из реп, кроме приложений для работы.

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

Как пример того, что прилично реализовано поверх xen для десктопа - Qubes OS. Да, я могу xen хоть где поднять, но обеспечить такой уровень интеграции это надо будет убить туеву хучу времени, с непредсказуемым результатом. Любой и каждый системный чих должен быть представлен в интерфейсе, иначе его нет. Для подавляющего большинства - нет. Пока нет софта, которые решает проблемы контейнеризации - нет никаких контейнеров, и выхлопа от системных фич, которые были до того, как появились какие-нибудь там докеры, кубернетисы, флатпаки иже с ними - тоже нет. Те полтора землекопа, которые в курсе на какие кнопки нажимать если чо - не в счет.

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

Логика на уровне той, что про динозавров.

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

Браузеры текут, без них нельзя обойтись,
но убивать вкладки - можно.

Да пофиг на вкладки

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

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

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

Я тоже хомяк и тоже недоумеваю, я бы поставил что надо, более того, я бы даже один раз в конфигах поковырялся, если бы система, по итогу, когда остаётся последних метров 50 памяти, грохала самый толстый процесс! У меня это полюбому браузер или какая-то юзерспейсная некритичная для работы системы шняга, лучше чтобы здохла она, нежели я как залипшую наглухо, в хреновые времена, винду, буду резетить и запускать всё тоже самое, но ещё и с нуля. А так я запущу снова только то, что грохнулось.

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

У меня не зависает. Никогда.

Хотя нет, пару раз было. Аш через ssh приходилось заходить, чтобы прибить процессы.

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

Везёт, а мне даже 1000 в oom_score_adj на процессах браузера не помогает (ну вернее один раз киллер таки сработал, но обычно висит). Помогает только запуск браузера в ограниченной cgroup-пе.

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

даже 1000 в oom_score_adj на процессах браузера не помогает (ну вернее один раз киллер таки сработал, но обычно висит)

adj влияет на выбор процесса (если киллер пришел), но не заставляет киллера приходить раньше

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

И системдэ тут при том, что...?

... очень удобно без скриптования задать score ajust в юнит-файле любимого демона.

OOMScoreAdjust=
           Sets the adjustment level for the Out-Of-Memory killer for executed processes. Takes an integer between -1000 (to
           disable OOM killing for this process) and 1000 (to make killing of this process under memory pressure very
           likely). See proc.txt[2] for details.
MumiyTroll ★★★
()
Ответ на: комментарий от olelookoe

я правильно понимаю, что без системдэ тоже самое не делается никак?

Неправильно. Без системдэ надо вручную писать искомое значение в /proc/<PID>/oom_score_adj

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

а с системдэ оно в юниты чем пишется, ногами?

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

А памяти добавить не судьба?

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

Своп добавить. Чтобы даже когда протек, машина отвечала.

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

в смысле написать ... в скриптик это прям беда-беда?

Конечно же нет, пишите. Вы же требовали user-level интерфейс к управлению OOM-киллером.

Вот это же Ваше?

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

Вам показали что он есть, этот интерфейс, а systemd несколько упрощает этот процесс.

Что Вам теперь-то не нравится?

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

systemd несколько упрощает этот процесс

OOMScoreAdjust=1000

vs

echo 1000 > /proc/self/oom_score_adj
это прям радикально меняет дело, да. Было из-за чего огород городить.

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

Системдэ не запускает приложения юзера (пока, во всяком случае). Юзер сам их запускает при помощи шелла или нажатием кнопочки. И вот для того, чтобы (пред)определять приоритеты IO, шедулинга, потребления памяти - никаких вменяемых оберток нет. Также напрочь отсутствуют простые способы обрезать аппетиты потомков, до того, как они порождены, потому что потомков без всякого спроса форкает родитель. Нет никакого вменяемого способа сказать родителю, что вот эту хрень, которую ты породишь, нужно обрезать по таким-то правилам. Нужно глазками искать порожденный процесс по каким-то признакам вычленяя его из себе подобных, ручками регулировать его аппетиты по PID. Ядро ничего не знает об «исполняемых файлах» до тех пор, пока исполняемый файл не станет процессом. Нет никакого способа заранее наложить на процесс нужные ограничения. Можно выкрутиться за счет оберточек\прокладочек, но некоторые из них ( в случае, если не мы сами управляем созданием потока\процесса) превратятся в адский костылинг.

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

Также напрочь отсутствуют простые способы обрезать аппетиты потомков, до того, как они порождены

systemd-run --user --no-block -p MemoryMax=1G tail /dev/zero

Можно обрезать по множеству параметров. По числу процессов, по свопу и др.

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

да йомайо )

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

Не бегать с выпученными глазками за каждым PIDом в надежде его усмирить, а получать предопределенное поведение.

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

приоритеты IO, шедулинга, потребления памяти - никаких вменяемых оберток нет

nice, ionice, systemd-run - почему они невменяемы? Как должны выглядеть вменяемые?

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

Аппетиты потомков наследуются, а не определяются

Аппетиты потомков ограничены контрольной группой. cgroups - это вам не limits.conf

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

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

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

А я хочу ограничить аппетит отдельно взятой странички

Это уже вопрос к браузерам. Браузеры не предоставляют отличительных признаков для страниц разных сайтов.

Например, cmdline процесса хрома:

/usr/lib/chromium/chromium --type=renderer --field-trial-handle=17267941305356783109,15009856322865307400,131072 --service-pipe-token=9288020542725421415 --lang=ru --enable-offline-auto-reload --enable-offline-auto-reload-visible-only --num-raster-threads=4 --enable-main-frame-before-activation --service-request-channel-token=9288020542725421415 --renderer-client-id=53 --no-v8-untrusted-code-mitigations --shared-files=v8_context_snapshot_data:100,v8_natives_data:101

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

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

индивидуально настрой какой-нибудь там порождаемый процесс

Возможно чем-то подобным занималась ulatancy, динамически на лету перекладывая процессы в соответствии с правилами конфига.

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

можно было б динамически перекладывать соответствующие процессы в ограниченные группы.

Управлять созданными процессами это не то же самое, что предопределять ограничения, накладываемые на процесс. Префорк параметры можно наложить на cgroups. Порожденный процесс (или группу процессов) можно переместить в cgroups. Но нет никакого способа накладывать индивидуальные (не наследуемые) префорк ограничения на процессы, которые порождаем не мы руками, а какой-то уже запущенный процесс.

Даже воспользоваться теми возможностями, что уже есть - это нетривиальная заморочка. Во всех известных мне wm отсутствует возможность подкрутить параметры процесса, привязанного к окошку. Хотя получить PID несложно

xprop _NET_WM_PID | sed 's/_NET_WM_PID(CARDINAL) = //' | ps `cat`
потом консоль - маны - руки - профит! И так каждый раз.

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

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

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

Ну так это к файрфоксу вопрос. На уровне системы ничего, кроме пид нет.

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

Для этого достаточно обычного (preempt full?) ядра.

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