Об этом было задано ранее, но вы не хотите обновлять тот же поток снова, поскольку это был старый поток.
Хотите пояснить себя в столбцах "буферы" и "кеш" из вывода команды free
.
Вот что я понимаю...
Буфер - это то, где данные хранятся в памяти, но все же должны быть сброшены на диск.
Данные будут периодически удаляться на диск с помощью bdflush
daemon, или мы можем сделать это вручную, выполнив команду sync
.
С другой стороны, кэш-память - это программа/данные, которые загружаются в память, но сохраняются в памяти, так что если это необходимо снова, она будет быстро доступна.
Чтобы понять концепцию буферов, я попробовал следующий эксперимент...
Это чтение команды free
на моем рабочем столе
[[email protected] ~]$ free -m total used free shared buffers cached Mem: 2897 465 2431 0 30 230 -/+ buffers/cache: 204 2692 Swap: 4000 0 4000 [[email protected] ~]$ sync [[email protected] ~]$ free -m total used free shared buffers cached Mem: 2897 466 2431 0 30 230 -/+ buffers/cache: 205 2691 Swap: 4000 0 4000
Здесь я не вижу уменьшения буфера после выполнения команды sync
.
Далее я попробовал следующее... Пытался написать огромный файл на диск.
[[email protected] ~]$ dd if=/dev/zero of=test bs=1024k
Как и ожидалось, кешированное значение должно увеличиваться, и освобождение подтверждает это.
@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
, чтобы сбросить значение кэша
[[email protected] ~]# cat /proc/sys/vm/drop_caches 0 [[email protected] ~]# echo "1" > /proc/sys/vm/drop_caches [[email protected] ~]# cat /proc/sys/vm/drop_caches 1
free
теперь подтверждает, что значение как буфера, так и кеша.
[[email protected] ~]# free -m total used free shared buffers cached Mem: 2897 299 2597 0 1 74 -/+ buffers/cache: 224 2672 Swap: 4000 0 4000
Итак, моя первоначальная инструкция о том, что "Буфер" - это данные ОЗУ, которые еще предстоит сбросить на диск, выглядит правильно.
Прошу вас проинформировать меня, правильно ли я.