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



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

  1. политика буфера-первый вход, первый выход
  2. политика кэша используется меньше всего в последнее время.

Я прав?

в частности, я смотрю на две команды: 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
128   10  

10 ответов:

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

цитата:

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

цитата ссылка

привел ответ (Для справки):

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

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

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

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

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

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

буфера и кэша.

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

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

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

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

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

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

пояснил RedHat:

Кэширует Страницы:

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

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

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

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

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

буфера :

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

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

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

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

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

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

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

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

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

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

    Ничего не найдено.

Добавить ответ:
Отменить.