В чем разница между буферной и кеш-памятью в Linux?

Мне непонятно, какая разница между концепцией памяти Linux: buffer и cache. Я прочитал этот пост, и мне кажется, что разница между ними - это политика истечения срока действия:

  • Буферная политика является первой, первой из
  • Политика кэширования используется в последнее время.

Я прав?

В частности, я рассматриваю две команды: free и vmstat

[email protected]:~$ 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
[email protected]:~$ free -m
             total       used       free     shared    buffers     cached
Mem:          2007       1834        172          0         67        914
-/+ buffers/cache:        853       1153
Swap:         2859          0       2859

Ответ 2

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

ссылка ссылки

Ответ 3

Указанный ответ (для справки):

Короткий ответ: Cached - это размер кеша страницы. Буферы - это размер буферов ввода-вывода в памяти. Кэшированные вопросы; Буферы в значительной степени неактуальны.

Длинный ответ: кеш-кеш - это размер кеша страницы Linux, за вычетом памяти в кэше подкачки, который представлен SwapCached (таким образом, общий размер кеша страницы - Cached + SwapCached). Linux выполняет все операции ввода-вывода файлов через кеш страницы. Записи выполняются как простое маркирование как загрязнение соответствующих страниц в кеше страницы; потоки flusher затем периодически записывают обратно на диск любые грязные страницы. Считывание выполняется путем возврата данных из кэша страниц; если данные еще не находятся в кеше, он сначала заполняется. В современной Linux-системе Cached может легко быть несколько гигабайт. Он будет уменьшаться только в ответ на давление памяти. Система очистит кеш страниц вместе с заменой данных на диск, чтобы сделать доступной больше памяти по мере необходимости.

Буферы представляют собой буферы ввода-вывода в памяти. Они относительно недолговечны. До ядра Linux версии 2.4 у Linux были отдельные кэши страниц и буферов. Начиная с версии 2.4, кеш-страница и буферный кеш являются унифицированными, а буферы - это необработанные блоки диска, которые не представлены в кеше страницы, а не в файлах. Таким образом, метрика буферов имеет минимальное значение. В большинстве систем буферы часто составляют всего десятки мегабайт.

Ответ 4

Это не так просто, но это может помочь понять:

Буфер предназначен для хранения метаданных файлов (разрешений, местоположений и т.д.). Каждая страница памяти отслеживается здесь.

Кэш предназначен для хранения фактического содержимого файла.

Ответ 5

буфер и кеш.

Буфер - это то, что еще не "записано" на диск.

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

Ответ 6

Я думаю, что эта страница поможет глубже понять разницу между буфером и кешем. http://www.tldp.org/LDP/sag/html/buffer-cache.html

Чтение с диска происходит очень медленно по сравнению с доступной (реальной) памятью. Кроме того, часто приходится считывать одну и ту же часть диска несколько раз в течение относительно коротких периодов времени. Например, сначала можно прочитать сообщение электронной почты, затем прочитать письмо в редакторе при ответе на него, а затем перепрограммировать его снова при копировании в папку. Или подумайте, как часто команда ls может запускаться в системе со многими пользователями. Читая информацию с диска только один раз, а затем сохраняя ее в памяти до тех пор, пока она больше не понадобится, можно ускорить все, кроме первого чтения. Это называется дисковой буферизацией, а память, используемая для этой цели, называется буферным кэшем.

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

Буферизация диска также работает для записи. С одной стороны, данные, которые записываются, часто скоро читаются снова (например, файл исходного кода сохраняется в файле, а затем считывается компилятором), поэтому хорошая идея заключается в том, чтобы помещать данные в кеш. С другой стороны, только помещая данные в кеш, не записывая их на диск сразу, программа, которая пишет, работает быстрее. Затем записи могут выполняться в фоновом режиме, не замедляя работу других программ.

Ответ 7

Объяснение RedHat:

Страницы кэша:

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

Ядро Linux построено таким образом, что оно будет использовать как можно больше ОЗУ, чтобы кэшировать информацию из ваших локальных и удаленных файловых систем и дисков. По мере того как время проходит через различные чтения и записи, выполняемые в системе, ядро ​​пытается сохранить данные, хранящиеся в памяти, для различных процессов, которые выполняются в системе, или данных соответствующих процессов, которые будут использоваться в ближайшем будущем. Кэш не восстанавливается в то время, когда процесс получает stop/exit, однако, когда другим процессам требуется больше памяти, тогда свободная доступная память, ядро ​​запускает эвристику для восстановления памяти путем хранения данных кэша и выделения этой памяти для нового процесса.

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

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

Сегменты разделяемой памяти SysV также учитываются как кеш, хотя они не представляют никаких данных на дисках. Можно проверить размер разделяемых сегментов памяти с помощью команды ipcs -m и проверить столбец байтов.

Буферы:

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

Ответ 8

Сет Робертсон Link 2 сказал: "Для полного понимания этих терминов обратитесь к книге ядра Linux, например," Развитие ядра ядра Linux "Робертом М. Лав".

Я нашел некоторое содержание о "буфере" во втором издании книги.

Хотя само физическое устройство адресуется на уровне сектора, ядро ​​выполняет все операции с дисками в терминах блоков.

Когда блок хранится в памяти (например, после чтения или ожидания записи), он сохраняется в "буфере". Каждый "буфер" связан с одним блоком. "Буфер" служит объектом, который представляет собой блок диска в памяти.

"Буфер" - это представление внутри одного блока физического диска в памяти.

Операции блокировки ввода-вывода управляют одним блоком диска за раз. Общая операция ввода-вывода блока - чтение и запись inodes. Ядро предоставляет функцию bread() для выполнения низкоуровневого чтения одного блока с диска. Через "буферы" блоки дисков сопоставляются со связанными на них страницами памяти. "

Ответ 9

Буфер содержит метаданные, которые помогают улучшить производительность записи

Кэш содержит содержимое самого файла (иногда еще для записи на диск), что повышает производительность чтения

Ответ 10

Буфер - это область памяти, используемая для временного хранения данных, когда она перемещается из одного места в другое в пределах компьютера. В то время как кэш представляет собой область временного хранения, где часто доступные данные могут быть сохранены для быстрого доступа. После того, как данные будут сохранены в кеше, в будущем их можно использовать, обратившись к кешированной копии, вместо того, чтобы повторно извлекать исходные данные, чтобы среднее время доступа было короче.

Ответ 11

Цитата из книги: Введение в поиск информации

кэш

Мы хотим хранить как можно больше данных в памяти, особенно те данные, к которым нам нужно часто обращаться. Мы называем технику хранения часто используемых данных на диске в кешировании основной памяти.

буфер

Операционные системы обычно читают и пишут целые блоки. Таким образом, чтение одного байта с диска может занять столько же времени, сколько и чтение всего блока. Размеры блоков 8, 16, 32 и 64 килобайта (КБ) являются общими. Мы называем часть основной памяти, где читаемый или записываемый блок хранится как буфер.