Команда chmem

Команда chmem позволяет вызывать одноименную утилиту, осуществляющую управление состоянием блоков физической оперативной памяти, установленной в ПК. Утилита позволяет активировать или деактивировать блоки оперативной памяти в процессе работы операционной системы. Разумеется, утилита не сможет деактивировать блок оперативной памяти, который используется ядром операционной системы. Для получения информации о доступных блоках оперативной памяти, установленной в системе, следует использовать утилиту lsmem. Утилита принимает в качестве входных параметров диапазоны адресов блоков оперативной памяти или диапазоны номеров этих блоков. Вообще, данная утилита едва ли понадобится обычным пользователям ПК, поэтому изложенная ниже информация пригодится скорее для расширения их кругозора.

Базовый синтаксис команды выглядит следующим образом:

$ lsmem [параметры] [диапазон адресов или номеров блоков памяти]

Наиболее важными параметрами являются параметр -d, позволяющий деактивировать указанные блоки оперативной памяти, параметр -e, позволяющий активировать указанные блоки оперативной памяти, а также параметр -b, позволяющий указать номера блоков вместо их адресов.

Примеры использования

Деактивация и активация блоков оперативной памяти

Команда lsmem может использоваться для получения информации о доступных блоках оперативной памяти:

$ lsmem
RANGE                                 SIZE  STATE REMOVABLE BLOCK
0x0000000000000000-0x00000000bfffffff   3G online        да  0-23
0x0000000100000000-0x000000023fffffff   5G online        да 32-71

Memory block size:  128M
Total online memory:  8G
Total offline memory: 0B

Из вывода ясно, что в компьютере установлено 8 ГБ оперативной памяти, причем ядро разделяет ее на 72 блока (5 ГБ нижней памяти в 40 блоках (32 - 71) по 128 МБ и 3 ГБ верхней памяти в 24 блоках (0 - 23) также по 128 МБ). Все блоки активированы (STATE: online) и могут деактивироваться (REMOVABLE: да).

Для деактивации блоков достаточно воспользоваться утилитой chmem с параметром -d и диапазоном их адресов:

# chmem -d 0x0000000100000000-0x000000023fffffff
chmem: Memory Block 32 (0x0000000100000000-0x0000000107ffffff) disable failed: Устройство или ресурс занято
chmem: Memory Block 33 (0x0000000108000000-0x000000010fffffff) disable failed: Устройство или ресурс занято
chmem: Memory Block 41 (0x0000000148000000-0x000000014fffffff) disable failed: Устройство или ресурс занято
chmem: Memory Block 42 (0x0000000150000000-0x0000000157ffffff) disable failed: Устройство или ресурс занято
chmem: Memory Block 43 (0x0000000158000000-0x000000015fffffff) disable failed: Устройство или ресурс занято
chmem: Memory Block 44 (0x0000000160000000-0x0000000167ffffff) disable failed: Устройство или ресурс занято
chmem: Memory Block 45 (0x0000000168000000-0x000000016fffffff) disable failed: Устройство или ресурс занято
chmem: Memory Block 48 (0x0000000180000000-0x0000000187ffffff) disable failed: Устройство или ресурс занято
chmem: Memory Block 49 (0x0000000188000000-0x000000018fffffff) disable failed: Устройство или ресурс занято
chmem: Memory Block 50 (0x0000000190000000-0x0000000197ffffff) disable failed: Устройство или ресурс занято
chmem: Memory Block 53 (0x00000001a8000000-0x00000001afffffff) disable failed: Устройство или ресурс занято
chmem: Memory Block 54 (0x00000001b0000000-0x00000001b7ffffff) disable failed: Устройство или ресурс занято
chmem: Memory Block 56 (0x00000001c0000000-0x00000001c7ffffff) disable failed: Устройство или ресурс занято
chmem: Memory Block 57 (0x00000001c8000000-0x00000001cfffffff) disable failed: Устройство или ресурс занято
chmem: Memory Block 58 (0x00000001d0000000-0x00000001d7ffffff) disable failed: Устройство или ресурс занято
chmem: Memory Block 60 (0x00000001e0000000-0x00000001e7ffffff) disable failed: Устройство или ресурс занято
chmem: Memory Block 61 (0x00000001e8000000-0x00000001efffffff) disable failed: Устройство или ресурс занято
chmem: Memory Block 62 (0x00000001f0000000-0x00000001f7ffffff) disable failed: Устройство или ресурс занято
chmem: Memory Block 63 (0x00000001f8000000-0x00000001ffffffff) disable failed: Устройство или ресурс занято
chmem: Memory Block 65 (0x0000000208000000-0x000000020fffffff) disable failed: Устройство или ресурс занято
chmem: Memory Block 66 (0x0000000210000000-0x0000000217ffffff) disable failed: Устройство или ресурс занято
chmem: Memory Block 68 (0x0000000220000000-0x0000000227ffffff) disable failed: Устройство или ресурс занято
chmem: Memory Block 69 (0x0000000228000000-0x000000022fffffff) disable failed: Устройство или ресурс занято
chmem: Memory Block 70 (0x0000000230000000-0x0000000237ffffff) disable failed: Устройство или ресурс занято
chmem: Memory Block 71 (0x0000000238000000-0x000000023fffffff) disable failed: Устройство или ресурс занято

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

Для проверки состояния оперативной памяти достаточно снова использовать утилиту lsmem:

$ lsmem
RANGE                                 SIZE   STATE REMOVABLE BLOCK
0x0000000000000000-0x00000000bfffffff   3G  online        да  0-23
0x0000000100000000-0x000000010fffffff 256M  online        да 32-33
0x0000000110000000-0x0000000147ffffff 896M offline           34-40
0x0000000148000000-0x000000016fffffff 640M  online        да 41-45
0x0000000170000000-0x000000017fffffff 256M offline           46-47
0x0000000180000000-0x0000000197ffffff 384M  online        да 48-50
0x0000000198000000-0x00000001a7ffffff 256M offline           51-52
0x00000001a8000000-0x00000001b7ffffff 256M  online        да 53-54
0x00000001b8000000-0x00000001bfffffff 128M offline              55
0x00000001c0000000-0x00000001d7ffffff 384M  online        да 56-58
0x00000001d8000000-0x00000001dfffffff 128M offline              59
0x00000001e0000000-0x00000001ffffffff 512M  online        да 60-63
0x0000000200000000-0x0000000207ffffff 128M offline              64
0x0000000208000000-0x0000000217ffffff 256M  online        да 65-66
0x0000000218000000-0x000000021fffffff 128M offline              67
0x0000000220000000-0x000000023fffffff 512M  online        да 68-71

Memory block size:    128M
Total online memory:  6,1G
Total offline memory: 1,9G

Из вывода видно, что 1.9 ГБ оперативной памяти находится в деактивированном состоянии и не может использоваться для хранения данных.

Для повторной активации соответствующих блоков оперативной памяти достаточно воспользоваться утилитой chmem с параметром -e и диапазоном их адресов:

# chmem -e 0x0000000100000000-0x000000023fffffff

В этот раз никаких сообщений об ошибках не будет выведено, хотя в диапазон попадают и активные блоки.

Для того, чтобы убедиться в переходе оперативной памяти в изначальное состояние, следует снова использовать утилиту lsmem:

$ lsmem
RANGE                                 SIZE  STATE REMOVABLE BLOCK
0x0000000000000000-0x00000000bfffffff   3G online        да  0-23
0x0000000100000000-0x000000023fffffff   5G online        да 32-71

Memory block size:  128M
Total online memory:  8G
Total offline memory: 0B

Вся установленная оперативная памяти снова доступна ядру ОС.