Виртуальная память: что это такое?

Здесь будет рассказано о разных типах памяти, в разных ОС, при использовании разных диагностических утилит.

FreeBSD

— Active: Память которая используется в данный момент
— Inactive: Память, которая была освобождена, но до сих пор в кэше, так как он может быть использована снова. Если требуется больше свободной памяти, эта память может быть очищена и перейти во Free. Эта память не очищается до того, пока не нужно, чтобы сохранить старые данные на случай, если это понадобится снова.
— Wired: Память, которую использует ядро. Эта память не может быть выгружена в Swap
— Cache: Память, которая использовалась под кеш и может быть освобождена в любой момент
— Buffers: Память отдана под дисковый кеш
— Free: Память которая полностью свободна и готова к использованию.Inactive, Cache и Buffers могут стать частью свободной после полного освобождения
— Res: Чистая оперативная память, которую потребляет процесс
— Size: Res + shared-библиотеки (*.so) + стек + shared-memory + swap, которую потребляет процесс
— Shared: часть память, которая может использоваться одновременно несколькими процессами
— Laundry: содержит грязные страницы памяти, прошедшие один раз через неактивную очередь (или память в очереди на «освобождения от грязи»)

Linux

— Virt: тоже самое, что и Size во FreeBSD
— SHR: тоже самое, что и Shared во FreeBSD
— RES: тоже самое, что и Res во FreeBSD
— SwapCache: память, которая когда-то была выгружена в своп, но потом загружена обратно и все еще находится в файле подкачки. Если будет необходимость в выделении памяти, то эту память не нужно будет выгружать повторно, так как она уже находится в свопе. Это экономит операции ввода-вывода.
— Cached: память в кэше страниц за вычетом SwapCache.
— Inact_dirty: «грязная» означает, что «необходима запись на диск или в своп». Для ее освобождения требуется больше работы. Здесь могут быть файлы, которые еще не записаны на диск. Операции записи на диск происходят не сразу, чтобы не снижать производительность ввода-вывода. Например, если вы пишете логи, то, возможно, лучше подождать, пока у вас будет готова полная запись лога, прежде чем отправлять ее на диск.
— Inact_clean: память, которую можно легко освободить. Ядро пытается сохранить немного чистых страниц, чтобы было проще «дышать».
— Inact_target: целевая метрика, которую ядро использует, чтобы убедиться, в достаточном количестве неактивных страниц. При превышении этого значения ядро не будет перемещать страницы из активного состояния в неактивное. Страница может стать неактивной разными способами. Например, если вы выполняете длительный последовательный ввод-вывод, то ядро предполагает, что вы не собираетесь использовать эту память, и делает ее неактивной превентивно. Таким образом, вы можете получить больше неактивных страниц, чем целевое значение, потому что ядро помечает некоторый кэш как «скорее всего, никогда не будет использоваться» и позволяет обмануть порядок «использовался последним».

Solaris

— SIZE: тоже самое, что и Size во FreeBSD
— RSS: тоже самое, что и Res во FreeBSD

# echo ::memstat | mdb -k
Page Summary                 Pages             Bytes  %Tot
----------------- ----------------  ----------------  ----
Kernel                     8477914             32.3G   13%
Defdump prealloc            736681              2.8G    1%
ZFS Metadata               3143194             11.9G    5%
ZFS File Data              2108118              8.0G    3%
Anon                      13729696             52.3G   20%
Exec and libs                26340            102.8M    0%
Page cache                   79235            309.5M    0%
Free (cachelist)            943735              3.5G    1%
Free (freelist)           37821240            144.2G   56%
Total                     67106361            255.9G

— Kernel: память, потребляемая ядром
— Defdump prealloc: память необходимая для сохранения core dump, в системах, которые поддерживают отложенный дамп.
— ZFS Metadata и ZFS File Data: кеш соответственно под метаданные и непосредственно сами файлы. Ранее оно называлось одним общим — ZFS File Data
— Anon: Anonymous memory refers to pages that are not directly associated with a vnode. Such pages are used for a process’s heap space, its stack, and copy-in-write pages. Stack, heap, COW (copy-on-write) and shared memory pages are anonymous (Anon) pages
—  The page: the page cache is used for caching of file data for file systems other than the ZFS file system. The file system page cache grows on demand to consume available physical memory as a file cache and caches file data in page-size chunks. Pages are consumed from the free list as files are read into memory. The pages then reside in one of three places: the segmap cache, a process’s address space to which they are mapped, or on the cache list.
— Exec and libs: indicates executable/shared library paging.
— Freelist and the cache list hold pages that are not mapped into any address space that have been freed by page_free(). Though pages in the cache list are not really free, they still contain a valid vnode, offset pair and are a valid cache of pages from files. But pages in the free list are not associated with any vnode, offset pair. Pages are put on a free list when a process using those pages exit. Free (cachelist) + Free (freelist) = freemem(value for column “free” when “vmstat” is issued

PS. Больше информации о том, что такое swap в Solaris можно прочитать здесь (только для подписчиков oracle.com), а так же здесь

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *