1. Введение в дело
Давайте возьмем пример, давайте посмотрим на свободный вывод, бесплатный источник данных приобретения: /proc/meminfo файл, для этого файла, будет проходить через эту серию.
root@szdc-calic-2-6:~# free
total used free shared buff/cache available
Mem: 32895096 1698396 8197904 307688 22998796 30343448
Swap: 31250428 114992 31135436
Что мы можем получить из приведенного выше вывода? Достаточно ли текущей системной памяти? Что такое буфер, что такое кеш и сколько памяти выделено в данный момент? Имея в виду эти вопросы, давайте двигаться дальше.
Во-вторых, кеш и буфер
2.1 cache
2.1.1 Определения
Прежде всего, понятно, что в управлении памятью кеш относится к: кэшу страниц. Кэш страницы — это кеш страницы, который нацелен на файловую систему и хранит файловые данные файла (файл делится на метаданные и файловые данные).
2.1.2 Какие кэши нельзя восстановить
Мы выполняем команду reclaim cache
[root@k8s-dbg-master-1 ~]# echo 3 > /proc/sys/vm/drop_caches
[root@k8s-dbg-master-1 ~]# free -m
total used free shared buff/cache available
Mem: 32117 8622 720 16056 22773 949
Swap: 16383 216 16167
Из вышеизложенного мы знаем, что даже если мы выполним команду очистки кеша, все еще есть некоторые кеши, которые нельзя восстановить, в том числе: tmpfs, разделяемая память и mmap для применения к памяти с состоянием флага MAP_SHARED. Эта часть не объяснена подробно, если вам интересно, вы можете попробовать это сами.
2.2, буфер
2.2.1 Определения
(1) В управлении памятью буфер относится к буферному кешу. Буферный кеш — это буфер чтения и записи блочного устройства. Продолжаем добавлять знания.Операционная система оперирует диском в терминах блоков.Блок будет содержать один или несколько секторов, но не будет превышать размер страницы.
(2) Буферы в основном используются для кэширования информации метаданных (dentries, inodes) в файловой системе и других блоков, которые не являются файловыми данными, таких как метаданные и ввод-вывод необработанных блоков, поэтому буферный кеш необходимо использовать отдельно для кэширования. .
2.3 Отношения между ними
После ядра 2.6 две структуры унифицированы, обе являются кешем страниц, а страница содержит одну за другой буферные структуры, поэтому наша команда free также объединяет их. Эти два используются вместе.Когда мы записываем файл, содержимое кеша страницы будет изменено, а кеш-буфер может пометить страницу с помощью разных буферов (буферов) и записать, какой блок был изменен.Таким образом, когда грязные данные записывается обратно, нет необходимости записывать всю страницу, а только измененный блок.
В-третьих, анализ дела
3.1 Тематическое исследование
Мы проанализируем кэш непосредственно на примере, чтобы увидеть, как он будет использоваться в операционной системе. Заранее подготовьте большой файл и выполните операцию чтения большого файла.
(1) Очистить кеш вручную
[root@k8s-dbg-master-1 ~]# echo 3 > /proc/sys/vm/drop_caches
[root@k8s-dbg-master-1 ~]# cat /proc/meminfo
MemTotal: 32887860 kB
MemFree: 15764108 kB
MemAvailable: 17081976 kB
Buffers: 1792 kB
Cached: 1191456 kB
(2) Выполнить команду и результат
[root@k8s-dbg-master-1 ~]# cp hyperkube /tmp/hyperkube
[root@k8s-dbg-master-1 ~]# cat /proc/meminfo
MemTotal: 32887860 kB
MemFree: 15240656 kB
MemAvailable: 17092320 kB
Buffers: 18016 kB
Cached: 1708088 kB
Как видите, и кеш, и буфер увеличились.
В-четвертых, проблема
1. Теперь попытайтесь ответить на поставленный в начале вопрос: какова текущая ситуация с системной памятью?