Помаленьку 4.4bsd начинает оживать. Пытаюсь отловить утечку памяти в ядре, и наблюдаю забавный эффект. Есть два системных процесса, отвечающих за память: демон подкачки (swapper) и демон откачки (pagedaemon). Демон откачки старается поддерживать в ядре определенное количество пустых страниц памяти. Когда он не справляется и страниц становится критически мало, он решает откачать один из процессов целиком на диск, в область свопа. Первыми уходят спящие процессы типа init. Если памяти все еще недостаточно, наступает черед активных процессов. В какой-то момент в своп улетает единственный активный процесс - консольный шелл, и система фактически останавливается. Секунд через десять демон подкачки решает, что пора подкачать шелл обратно, и система оживает.
Это не ошибка, а фича, описанная в книжке Кирка Маккузика. Интересно, что в FreeBSD это место поправили, чтобы ядро никогда не выталкивало активные процессы в своп. Вместо этого самый большой и толстый процесс пришибается сигналом. Я склоняюсь к тому, что для встроенных систем это решение подходит лучше.
Это не ошибка, а фича, описанная в книжке Кирка Маккузика. Интересно, что в FreeBSD это место поправили, чтобы ядро никогда не выталкивало активные процессы в своп. Вместо этого самый большой и толстый процесс пришибается сигналом. Я склоняюсь к тому, что для встроенных систем это решение подходит лучше.

no subject
Date: 2014-11-14 10:03 (UTC)Я склоняюсь к тому, что поддерживать в ядре определенное количество пустых страниц ценой активных процессов - порочная идея.
no subject
Date: 2014-11-14 10:04 (UTC)no subject
Date: 2014-11-14 10:22 (UTC)no subject
Date: 2014-11-14 10:50 (UTC)Это же гарантированый износ Flash storage
no subject
Date: 2014-11-14 12:14 (UTC)no subject
Date: 2014-11-14 13:55 (UTC)no subject
Date: 2014-11-14 15:25 (UTC)no subject
Date: 2014-11-14 15:57 (UTC)Imho, не стоит переоценивать стимуляцию программистов. Мы живём в мире, где средний программист уверен, что может обновлять свой софт 24x7 через Интернет.
no subject
Date: 2014-11-14 18:08 (UTC)К слову, года три назад я по параллельной нужде проглядел текст VMS-ного swapper'a и был поражён утончённостью и продуманностью алгоритмики. Главное впечатление было: "такого теперь уже не делают" -- и понятно конечно почему не делают: если система тормозит по нехватки памяти, то правильное решение в новых исторических условиях состоит в том, что нужно добавить памяти столько, чтобы никакого пейджинга не было. Но если для экзотических случаев вроде тех, с которыми ты возишься, то вот.
no subject
Date: 2014-11-14 18:43 (UTC)no subject
Date: 2014-11-14 18:45 (UTC)no subject
Date: 2014-11-14 18:50 (UTC)Или это какие-то переходные процессы оттого, что выгрузка идет медленнее, чем период опроса демоном? Тогда очевидно, что выгружающий демон просто не должен лишнего суетиться, а должен подождать пока помеченные им страницы высвопленных процассов закончат выгрузку.
no subject
Date: 2014-11-14 19:05 (UTC)no subject
Date: 2014-11-14 19:09 (UTC)no subject
Date: 2014-11-14 19:10 (UTC)no subject
Date: 2014-11-14 19:18 (UTC)BSD создавалась как система для университета, чтобы 40 студентов могли запустить каждый по редактору vi и по счётной задаче, одновременно. Подумаешь, уснёт процесс на 10 секунд, пусть студент пока подумает о смысле жизни. Зато никакие процессы не убиваются, сеанс редактирования не теряется, красота. Но для встроенной системы как-то оно не комильфо.
no subject
Date: 2014-11-14 19:24 (UTC)no subject
Date: 2014-11-14 19:25 (UTC)no subject
Date: 2014-11-14 19:28 (UTC)no subject
Date: 2014-11-14 19:33 (UTC)4.3BSD тоже отлично работала на высоких нагрузках, но в 4.4 они решили переделать всю виртуальную память с нуля, то есть от Mach. Кое-что не успели отшлифовать к выпуску релиза, а потом и всю лабораторию CSRG расформировали.
no subject
Date: 2014-11-14 19:39 (UTC)no subject
Date: 2014-11-14 20:05 (UTC)no subject
Date: 2014-11-14 20:18 (UTC)no subject
Date: 2014-11-14 20:18 (UTC)no subject
Date: 2014-11-14 20:51 (UTC)no subject
Date: 2014-11-14 20:55 (UTC)no subject
Date: 2014-11-14 21:25 (UTC)no subject
Date: 2014-11-14 21:30 (UTC)no subject
Date: 2014-11-14 22:08 (UTC)no subject
Date: 2014-11-14 22:15 (UTC)no subject
Date: 2014-11-14 22:34 (UTC)no subject
Date: 2014-11-14 22:39 (UTC)no subject
Date: 2014-11-14 23:17 (UTC)no subject
Date: 2014-11-15 00:33 (UTC)no subject
Date: 2014-11-15 01:40 (UTC)no subject
Date: 2014-12-05 07:30 (UTC)Понятие working set есть, и в 4.2bsd оно работало примерно как в VMS, отслеживая каждый процесс отдельно. Но в 4.4bsd это дело решили упростить. Как в Линуксе - не знаю, не исследовал.
no subject
Date: 2015-01-08 16:20 (UTC)