Debian-9. Что не так?

Оказалось не всё получилось так гладко, как хотелось бы. В Debian-9 есть одна довольно-таки забавная вещица. Её наверняка уже заметили те, у кого на компе с оперативной памятью не очень.

— Да-да-да! Аппетиты к у Debian-9 памяти просто зверские!

Пару лет назад я не мог не радоваться тому факту, что Debian-8 после небольшого тюнинга напильником занимал в оперативе около 100 МБ и даже меньше.

Но применительно к Debian-9 примерно тот же тюнинг (отказ от загрузки тех компонент, апплетов и программ, которые мне не нужны) приводит к цифре чуть более 300 МБ.

— Что? Почти в три раза??? Фига-се-е!…

Меня этот вопрос меня сильно напряг. В настольном компе у меня только недавно стало 2 ГБ. А вот в нотиках — совсем плохо: 512 МБ и 1 ГБ.

— И как?
— А-а, никак!

Причем, проблема принципиальная — теперь никакой напильник уже не поможет.

Ниже два скриншота — обратите внимание как сильно изменились требования к памяти у процессов.

Было:

Стало:

— Ну что, стало страшно, не?

На самом деле это всё ничего не значит. Почему?

Да потому, процесс может запросить у ядра хоть сколько памяти (Ну, в пределах разумного, конечно!) Допустим, каждый процесс запросил у ядра по 2 ГБ, то есть суммарно получается для 25-и процессов нужно ни много, ни мало — 50 ГБ оперативы.

— Ну, не слабо!

И тем не менее, ядро не задумываясь выделит каждому процессу ровно столько, сколько тот запросил — то есть каждый процесс получит по 2 ГБ.

— Но как же так!!!
— А вот, так!

Дело в том, что это виртуальная память, а не физическая. Это всего лишь записи о том, что у процесса имеется адресное пространство от 0 до 2 ГБ, и он может обратиться к любому байту в этом адресном пространстве.

— Теоретически, у меня есть 2000 га земли. Но физически я сажу картошку только на 2 сотках. Эти гектары — они как бы есть на бумаге (вот документ — «Право собственности»!), но физически мне столько не окучить и не съесть!

Так и с памятью — одно дело запросить, и другое дело воспользоваться. Фишка в том, что ядро «выдаёт» физическую память процессу только тогда, когда процесс обращается по какому-то адресу. Только тогда ядро берёт из общего пула памяти свободный кусок физической памяти и подставляет его на адрес, по которому обратился процесс.

Поскольку большинству процессов для конкретной работы нужно памяти всяко не 2 ГБ, как я писал выше, а значительно меньше, то какая разница, сколько он (процесс) запрашивает у ядра? Ядро честно говорит процессу:

— Ты просил два ГБ памяти? Хорошо. Вот тебе адресное пространство. Юзай на здоровье.

Процесс верит, что ему дали не просто 2 ГБ адресного пространства, а 2 ГБ физической памяти. А на самом деле ему дали 0 байт физической памяти. Но как только процесс попытается проверить — а не надули ли его — попытается писать или читать по какому-нибудь адресу в этом адресном пространстве, ядро тут же подставит в это место физическую память.

— Хитро!
— Главное — чтобы все процессы не пытались максимально обратиться к памяти. Иначе говоря, суммарный объем физической памяти должен быть больше того объема адресного пространства, которое все процессы суммарно «окучивают».

Если вы заметили, то большинство процессов в Debian-9 увеличили свои аппетиты примерно раз в 10. Зачем так сделали разработчики, я не знаю. Конечно, я догадываюсь — зачем, но полной уверенности у меня нет.

Будет работать такая «разжиревшая» система? Будет! Работает же — я не заметил каких-либо существенных тормозов в Debiab-9 по отношению к Debian-8.

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s