page swapping-а.
на стеке полностью вопрос описал ( язык с, поэтому подумал тут можно задать):
https://stackoverflow.com/questions/76984926/where-is-the-atomic-count-increase-when-swapping-in-page-from-the-swap-area-in-l?noredirect=1#comment135718106_76984926
вкратце не вижу где в коде в функции handle_pte_fault—>do_swap_page инкремент count-а страницы, которую вернули из свап пула при major fault или последующих minor fault (последующих потому что речь идет о допустим 3 процессах которые все держат указатель на один и тот же entry в свапе, поэтому первый фолт будет мажорный, мы сделаем I/O из диска обратно в память, а потом в оставшихся 2 процессах страничка уже в памяти, но их page table еще об этом не знает, поэтому минорные фолты).
но вот увеличение каунтера, которое должно быть ибо в mm.h товарищи разработчики линукса пишут (3 пункт):
/*
* Methods to modify the page usage count.
*
* What counts for a page usage:
* - cache mapping (page->mapping)
* - disk mapping (page->buffers)
* - page mapped in a task's page tables, each mapping
* is counted separately
*
* Also, many kernel routines increase the page count before a critical
* routine so they can be sure the page doesn't go away from under them.
*/
может кто глянуть ?
Баг чтоли ?
несколько раз по коду прошелся, по гипотетическому код флоу в рассматриваемом сценарии, либо повторяю ошибку, либо там баг, хотя фишка достаточно системная, думаю линукс вряд ли бы нормально работал, если этого инкремента не было, но мало ли ...
Обсуждают сегодня