Для меня не ясно, в чем разница между двумя концепциями памяти Linux: buffer
и cache
. Я прочитал этот пост, и мне кажется, что разница между ними заключается в политике истечения срока действия:
- политика буфера является первым вошел первым
- Политика кеша - Наименее недавно использованная.
Я прав?
В частности, я смотрю на две команды: free
иvmstat
james@utopia:~$ vmstat -S M
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
5 0 0 173 67 912 0 0 19 59 75 1087 24 4 71 1
james@utopia:~$ free -m
total used free shared buffers cached
Mem: 2007 1834 172 0 67 914
-/+ buffers/cache: 853 1153
Swap: 2859 0 2859
free
вывод команды?Ответы:
«Буферы» показывают, какая часть оперативной памяти выделена для блоков кеша. «Cached» похож на «Buffers», только на этот раз он кэширует страницы из файла.
цитата из:
источник
cache
заполняется как сообщаетсяfree -w -h
, а неbuffers
столбец. Я думаю, чтоcache
столбец учитывает как записи на диск, так и чтения на диск иbuffers
используется для чего-то еще.ссылка на цитату
источник
Цитируемый ответ (для справки):
источник
Это не так просто, но может помочь понять:
Буфер предназначен для хранения метаданных файла (разрешения, местоположение и т. Д.). Каждая страница памяти отслеживается здесь.
Кэш предназначен для хранения фактического содержимого файла.
источник
Объяснено RedHat :
Страницы кэша:
Кеш - это часть памяти, которая прозрачно хранит данные, чтобы в будущем запросы на эти данные могли обслуживаться быстрее. Эта память используется ядром для кэширования данных на диске и повышения производительности ввода-вывода.
Ядро Linux построено таким образом, что оно использует как можно больше оперативной памяти для кэширования информации из ваших локальных и удаленных файловых систем и дисков. Поскольку время проходит через различные операции чтения и записи, выполняемые в системе, ядро пытается сохранить данные, хранящиеся в памяти, для различных процессов, выполняющихся в системе, или данные соответствующих процессов, которые будут использоваться в ближайшем будущем. Кэш не восстанавливается в тот момент, когда процесс получает останов / выход, однако, когда другим процессам требуется больше памяти, чем свободной доступной памяти, ядро запускает эвристику для восстановления памяти путем хранения данных кэша и выделения этой памяти новому процессу.
Когда запрашивается любой тип файла / данных, тогда ядро будет искать копию той части файла, с которой работает пользователь, и, если такой копии не существует, выделяет одну новую страницу кэш-памяти и заполняет ее соответствующее содержимое считывается с диска.
Данные, которые хранятся в кэше, могут быть значениями, которые были вычислены ранее, или дубликатами исходных значений, которые хранятся в другом месте на диске. Когда запрашиваются некоторые данные, кэш сначала проверяется, чтобы увидеть, содержит ли он эти данные. Данные могут быть извлечены из кеша быстрее, чем из источника.
Сегменты разделяемой памяти SysV также учитываются как кеш, хотя они не представляют никаких данных на дисках. Проверить размер сегментов разделяемой памяти можно с помощью команды ipcs -m и проверки столбца байтов.
Буферы:
Буферы представляют собой блочные представления данных, которые хранятся в кешах страниц. Буферы содержат метаданные файлов / данных, которые находятся в кэше страницы. Пример: когда есть запрос любых данных, которые присутствуют в кэше страницы, сначала ядро проверяет данные в буферах, которые содержат метаданные, которые указывают на фактические файлы / данные, содержащиеся в кэше страницы. Как только из метаданных известен фактический адрес блока файла, он берется ядром для обработки.
источник
буфер и кеш.
Буфер - это то, что еще не «записано» на диск.
Кеш - это то, что было «прочитано» с диска и сохранено для последующего использования.
источник
Я думаю, что эта страница поможет глубоко понять разницу между буфером и кешем. http://www.tldp.org/LDP/sag/html/buffer-cache.html
Чтение с диска очень медленное по сравнению с доступом к (реальной) памяти. Кроме того, обычно считывают одну и ту же часть диска несколько раз в течение относительно коротких периодов времени. Например, можно сначала прочитать сообщение электронной почты, затем прочитать письмо в редакторе при ответе на него, а затем заставить почтовую программу снова прочитать его при копировании в папку. Или подумайте, как часто команда
ls
может выполняться в системе с большим количеством пользователей. Считывая информацию с диска только один раз, а затем сохраняя ее в памяти до тех пор, пока она больше не понадобится, можно ускорить все, кроме первого чтения. Это называется дисковой буферизацией, а используемая для этой цели память называется буферным кешем.Поскольку память, к сожалению, является ограниченным, нет, дефицитным ресурсом, буферный кэш обычно не может быть достаточно большим (он не может содержать все данные, которые кто-либо когда-либо хочет использовать). Когда кэш заполняется, данные, которые не использовались дольше всего, отбрасываются, а освобожденная память используется для новых данных.
Буферизация диска работает и для записи. С одной стороны, записываемые данные часто вскоре читаются снова (например, файл исходного кода сохраняется в файл, а затем читается компилятором), поэтому размещение данных, записываемых в кэш, является хорошей идеей. С другой стороны, если только поместить данные в кэш, а не записать их на диск сразу, программа, которая пишет, запускается быстрее. Затем запись может выполняться в фоновом режиме, не замедляя работу других программ.
источник
В «Ссылке 2» Сета Робертсона сказано: «Для полного понимания этих терминов обратитесь к книге о ядре Linux, например,« Разработка ядра Linux »Роберта М. Лава».
Я нашел некоторое содержание о «буфере» во 2-м издании книги.
источник
Буфер содержит метаданные, которые помогают улучшить производительность записи
Кэш содержит содержимое самого файла (иногда еще для записи на диск), что повышает производительность чтения
источник
Цитата из книги: Введение в поиск информации
кэш
буфер
источник
Буфер - это область памяти, используемая для временного хранения данных, когда он перемещается из одного места в другое на компьютере. В то время как кэш - это временная область хранения, в которой часто используемые данные могут храниться для быстрого доступа. После того, как данные сохранены в кэше, в будущем можно будет использовать доступ к кэшированной копии, а не повторно извлекать исходные данные, так что среднее время доступа будет короче.
источник