|
|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Slawa Olhovchenkov 2:5030/500 15 Sep 2005 20:05:16 To : Vadim Goncharov Subject : malloc() overcommit bug --------------------------------------------------------------------------------
15 Sep 05, Vadim Goncharov writes to Slawa Olhovchenkov:
VG>>>>>>> Прочитал, да. Hо воз и ныне там. И все-таки я не понял, почему
VG>>>>>>> так сложно сделать хотя бы уменьшение вероятности возникновения
VG>>>>>>> такой ситации (пусть даже по типу как в линуксе), надо-то чтобы
VG>>>>>>> malloc() всего лишь вернул NULL, если столько свободной памяти
VG>>>>>>> нет?
SO>>>>>> Потому что память может исчезнуть в процессе.
VG>>>>> Подкрутить счетчик отданной процессам памяти, и не отдавать, если
VG>>>>> просит больше, чем осталось.
SO>>>> Ты кажется не слушал объяснений.
VG>>> Мы кажется говорим (и объяснения были) о несколько разных вещах.
SO>> Hет. Память-то общая.
VG> Ты не выпендривайся, ты пальцем покажи (с)
Пишем програмку алоцирующую мегабайт памяти.
Пускаем ее на машине с полугигом оперативки и без свопа.
Програма в свой мегабайт пишет единицы.
Все зашибись, да?
Теперь програма делает 1000 fork().
Это законно, поскольку дальше она может сделать exec() на что-то совсем совсем
маленькое или вообще быстро завершиться.
Более того, мы не можем ничего запустить паралельно не сделав перед этим fork().
Hо вместо этого каждая копия начинает писать случайные данные в свой мегабайт.
В некоторый момент механизм copy-on-write обломается и копии начнут слетать с
SEGFAULT.
... Hикогда не пытайтесь повторить удачный эксперимент
--- GoldED+/BSD 1.1.5
* Origin: (2:5030/500)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/222143299d16.html, оценка из 5, голосов 10
|