UNIX: top и ps — VIRT, RES, SHR и SWAP память

Автор: | 05/12/2014
 

unix-logoVIRT (Virtual memory) — отображает общий объём памяти, который может использоваться процессом в данный момент. Включает в себя реально используемую память, другую память (например — память видеокарты), файлы на диске, загруженные в память (например — файлы библиотек), и память, совместно используемую с другими процессами (SHR или Shared memory). Она же отображается как VSZ в результатах ps (Process status).

RES (Resident memory size) — отображает, сколько физической памяти занято процессом (используется для отображения в колонке %MEM в top-е). Она же отображается как RSS в результатах ps (Process status).

SHR (Shared Memory size) — отображает объём VIRT памяти, который используется процессом совместно с другими процессами, например — файлы библиотек.

SWAP (Swapped size) — память, которая в данный момент не используется (не-RES), но доступна процессу, при этом она «выгружена» в swap-раздел диска.

Из man 1 top:

o: VIRT — Virtual Image (kb)
The total amount of virtual memory used by the task. It includes all code, data and shared libraries plus pages that have been swapped out. (Note: you can define the STATSIZE=1 environment variable and
the VIRT will be calculated from the /proc/#/state VmSize field.)

p: SWAP — Swapped size (kb)
Per-process swap values are now taken from /proc/#/status VmSwap field.

q: RES — Resident size (kb)
The non-swapped physical memory a task has used.

RES = CODE + DATA.

VSZ  (VSS) — Virtual Size in Kbytes (alias vsize) или Virtual memory — особый уровень абстракции «над» архитектурой физической памяти. 

Каждый процесс получает в использование виртуальное адресное пространство, и при обращении к адресу в нём — адрес сначала конвертируется в адрес физической памяти (main memoryMM, она же RAM) при помощи Memory Management Unit (MMU). Данные в виртуальном адресном пространстве могут располагаться в основной памяти, на диске (в swap-файле), сразу в обоих местах или на какой-то внешней памяти (например — памяти видеокарты).  Однако, как только процесс запрашивает какие-то данные, которые в настоящий момент не находятся в основной памяти системы — они туда загружаются. Таким образом, процесс не считывает данные напрямую с диска (memory mapping), но некоторые или все его ресурсы могут находится на «внешней памяти» в любое время, а его страницы памяти могут быть выгружены в swap, что бы освободить память для других процессов.

RSSResident Set Size — количество выеделенной процессу физической (MM) памяти в настоящий момент. Это физическая память, которая используется для рамзмещения страниц виртуальной памяти (virtual memory pages), которая используется процессом постоянно. RSS всегда будет менее или равна памяти VSZ.

Вообще это очень большая тема, потому — несколько ссылок:

http://www.darkcoding.net

http://lwn.net

http://ru.wikipedia.org

http://www.tldp.org

http://markelov.blogspot.com