Об этом уже спрашивали ранее, но я не хочу снова обновлять ту же тему, так как это была старая тема.
Хочу уточнить по столбцам «буферы» и «кеш» из вывода команды 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
Итак, мое первоначальное утверждение о том, что «Буфер» — это данные ОЗУ, которые еще предстоит сбросить на диск, кажется правильным.
Пожалуйста, направь меня, иду ли я в правильном направлении.