Что такое «Буферы» и «Кэширование» из команды free

Об этом уже спрашивали ранее, но я не хочу снова обновлять ту же тему, так как это была старая тема.

Хочу уточнить по столбцам «буферы» и «кеш» из вывода команды free.

Вот как я понимаю...

Буфер — это то, где данные находятся в памяти, но еще не сброшены на диск. Данные будут сбрасываться на диск демоном bdflushпериодически, или мы можем сделать это вручную, выполнив команду sync.

Кэш, с другой стороны, представляет собой программу/данные, которые загружаются в память, но сохраняются в ней, так что, если они понадобятся снова, они будут быстро доступны.

Чтобы понять концепцию буферов, я провел следующий эксперимент...

Это чтение команды freeна моем рабочем столе

[zama@localhost ~]$ free -m
             total       used       free     shared    buffers     cached
Mem:          2897        465       2431          0         30        230
-/+ buffers/cache:        204       2692
Swap:         4000          0       4000

[zama@localhost ~]$ sync

[zama@localhost ~]$ free -m
             total       used       free     shared    buffers     cached
Mem:          2897        466       2431          0         30        230
-/+ buffers/cache:        205       2691
Swap:         4000          0       4000

Здесь я не вижу уменьшения буфера после выполнения команды sync.

Затем я попробовал следующее... Попытался записать на диск огромный файл.

[zama@localhost ~]$ dd if=/dev/zero of=test bs=1024k 

Как и ожидалось, кэшированное значение должно увеличиться, и free подтверждает это..

@localhost ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          2897       1466       1430          0         32       1127
-/+ buffers/cache:        306       2590
Swap:         4000          0       4000

Я снова выполнил команду syncи затем проверил с помощью free. Я вижу, что значение буфера уменьшается из вывода команды free. Кэш не уменьшился. Это означает, что грязные страницы в оперативной памяти после выполнения моей команды ddбыли сброшены на диск.

@localhost ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          2897       1466       1430          0         10       1127
-/+ buffers/cache:        306       2590
Swap:         4000          0       4000

Затем я обновил параметр ядра drop_cache, чтобы значение кэша было удалено

[root@localhost ~]# cat /proc/sys/vm/drop_caches 
0

[root@localhost ~]# echo "1" > /proc/sys/vm/drop_caches 

[root@localhost ~]# cat /proc/sys/vm/drop_caches 
1

freeтеперь подтверждает, что значение буфера и кэша удалено.

[root@localhost ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          2897        299       2597          0          1         74
-/+ buffers/cache:        224       2672
Swap:         4000          0       4000

Итак, мое первоначальное утверждение о том, что «Буфер» — это данные ОЗУ, которые еще предстоит сбросить на диск, кажется правильным.

Пожалуйста, направь меня, иду ли я в правильном направлении.

20
задан Vadim Kotov 17 August 2017 в 13:10
поделиться