Изменение сразу отражается. По пути нет никакого кэширования. Когда Вы читаете /proc/
, Вы на самом деле инициировали обход таблицы страниц того процесса. Информация об отображениях накоплена по пути, затем отображена без любого кэширования.
Код позади /proc/
файл находится в fs/proc/task_mmu.c
, конкретно show_smap
функция.
Та функция делает a walk_page_range
с smaps_pte_range
как обратный вызов PTE. smaps_pte_range
самостоятельно накапливает информацию в a struct mem_size_stats
.
Часть того кода, ответственного за PSS
делает:
mapcount = page_mapcount(page);
if (mapcount >= 2) {
if (pte_dirty(ptent) || PageDirty(page))
mss->shared_dirty += ptent_size;
else
mss->shared_clean += ptent_size;
mss->pss += (ptent_size << PSS_SHIFT) / mapcount;
} else {
if (pte_dirty(ptent) || PageDirty(page))
mss->private_dirty += ptent_size;
else
mss->private_clean += ptent_size;
mss->pss += (ptent_size << PSS_SHIFT);
}
(Вы видите здесь, что страницы могут только считаться в Shared
часть, если это на самом деле отображается несколько раз - это считается как частное иначе.)
page_mapcount
определяется встроенный в linux/mm.h
и просто доступы a struct page
:
static inline int page_mapcount(struct page *page)
{
return atomic_read(&(page)->_mapcount) + 1;
}
Таким образом, PSS "всегда актуален".
Уже существует внешняя команда для этого. Нет ничего нового, которое должно быть записано. Команда xdg-open
. Это откроет файл на основе своей ассоциации типа MIME. Вот пример:
xdg-open file.png