LINUX.ORG.RU

История изменений

Исправление kirk_johnson, (текущая версия) :

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

Уверен? У kmalloc'а (если более точно, у SLAB/SLUB аллокатора) нет проблем с отдачей тебе второй половины страницы. Память не обязательно будет выровнена по началу страницы.

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

Это если исходить из того, что все аллокации происходят в том же порядке и с тем же результатом (SLAB/SLUB отдает объекты в том же порядке, в чем лично я не уверен).

P.S. Куда интереснее другое:

KSM only operates on those areas of address space which an application has advised to be likely candidates for merging, by using the madvise(2) system call: int madvise(addr, length, MADV_MERGEABLE).

The app may call int madvise(addr, length, MADV_UNMERGEABLE) to cancel that advice and restore unshared pages: whereupon KSM unmerges whatever it merged in that range. Note: this unmerging call may suddenly require more memory than is available - possibly failing with EAGAIN, but more probably arousing the Out-Of-Memory killer.

Исходная версия kirk_johnson, :

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

Уверен? У kmalloc'а (если более точно, у SLAB/SLUB аллокатора) нет проблем с отдачей тебе второй половины страницы. Память не обязательно будет выровнена по началу страницы.

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

Это если исходить из того, что все аллокации происходят в том же порядке и с тем же результатом (SLAB/SLUB отдает объекты в том же порядке, в чем лично я не уверен).