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