Это старый вопрос, который я видел время от времени. Мое понимание этого довольно ограничено (прочитав о различиях давным-давно, но фактоид (ы), вовлеченные никогда не застрял).
Как я понимаю,
Буферы
Используются программами с активными операциями ввода-вывода, т.е. данными, ожидающими записи на диск
кэш
Является результатом завершенных операций ввода-вывода, то есть буферов, которые были сброшены или данные считаны с диска для удовлетворения запроса.
Могу ли я получить четкое объяснение для потомков?
linux
memory
virtual-memory
Эйвери Пэйн
источник
источник
Ответы:
«Кэшированный» итог также будет включать в себя некоторые другие выделения памяти, такие как любые файловые системы tmpfs. Чтобы увидеть это, попробуйте:
и вы увидите падение значения «кеша» на 100 Мбайт, которые вы скопировали в файловую систему на базе оперативной памяти (при условии, что было достаточно свободной оперативной памяти, вы можете обнаружить, что некоторые из них оказались в состоянии подкачки, если машина уже перегружена в терминах использования памяти). «Sync; echo 3> / proc / sys / vm / drop_caches» перед каждым вызовом free должен записывать что-либо ожидающее во всех буферах записи (sync) и очищать все блоки кэшированных / буферизованных дисков из памяти, так что free будет читать только другие выделения в «кэшированном» значении.
Оперативная память, используемая виртуальными машинами (например, работающими под VMWare), также может учитываться в свободном «кэшированном» значении, как и оперативная память, используемая в настоящее время открытыми отображенными в память файлами (это зависит от используемого вами гипервизора / версии и возможно, между версиями ядра тоже).
Так что это не так просто, как «подсчет буферов в ожидании файловых / сетевых записей и кэширование подсчета недавно прочитанных / записанных блоков, хранящихся в ОЗУ для сохранения будущих физических чтений», хотя для большинства целей подойдет это более простое описание.
источник
Каверзный вопрос. Когда вы вычисляете свободное пространство, вам действительно нужно добавить буфер и кешировать оба. Это то, что я мог найти
Буфер - это то, что еще не «записано» на диск. Кеш - это то, что было «прочитано» с диска и сохранено для последующего использования.
http://visualbasic.ittoolbox.com/documents/difference-between-buffer-and-cache-12135
источник
Я искал более четкое описание о буфере, и я нашел в
"Professional Linux® Kernel Architecture 2008"
источник
Объяснено RedHat :
Страницы кэша:
Кеш - это часть памяти, которая прозрачно хранит данные, чтобы в будущем запросы на эти данные могли обслуживаться быстрее. Эта память используется ядром для кэширования данных на диске и повышения производительности ввода-вывода.
Ядро Linux построено таким образом, что оно будет использовать как можно больше оперативной памяти для кэширования информации из ваших локальных и удаленных файловых систем и дисков. Поскольку время проходит через различные операции чтения и записи, выполняемые в системе, ядро пытается сохранить данные, хранящиеся в памяти, для различных процессов, выполняющихся в системе, или данные соответствующих процессов, которые будут использоваться в ближайшем будущем. Кэш не восстанавливается в тот момент, когда процесс получает останов / выход, однако, когда другим процессам требуется больше памяти, чем свободной доступной памяти, ядро запускает эвристику для восстановления памяти путем хранения данных кэша и выделения этой памяти новому процессу.
Когда запрашивается любой тип файла / данных, тогда ядро будет искать копию той части файла, с которой работает пользователь, и, если такой копии не существует, выделяет одну новую страницу кэш-памяти и заполняет ее соответствующее содержимое считывается с диска.
Данные, которые хранятся в кэше, могут быть значениями, которые были вычислены ранее, или дубликатами исходных значений, которые хранятся в другом месте на диске. Когда запрашиваются некоторые данные, кэш сначала проверяется, чтобы увидеть, содержит ли он эти данные. Данные могут быть извлечены из кеша быстрее, чем из источника.
Сегменты разделяемой памяти SysV также учитываются как кеш, хотя они не представляют никаких данных на дисках. Проверить размер сегментов разделяемой памяти можно с помощью команды ipcs -m и проверки столбца байтов.
Буферы:
Буферы представляют собой блочные представления данных, которые хранятся в кешах страниц. Буферы содержат метаданные файлов / данных, которые находятся в кэше страницы. Пример: когда есть запрос любых данных, которые присутствуют в кэше страницы, сначала ядро проверяет данные в буферах, которые содержат метаданные, которые указывают на фактические файлы / данные, содержащиеся в кэше страницы. Как только из метаданных известен фактический адрес блока файла, он берется ядром для обработки.
источник
Освобождение буфера / кеша
Предупреждение Это объясняет сильный метод, не рекомендуемый на производственном сервере! Так что вы предупреждены, не вините меня, если что-то пойдет не так.
Для понимания, вы могли бы заставить свою систему делегировать как можно больше памяти, чтобы
преамбулаcache
отбросить кэшированный файл:Перед выполнением теста вы можете открыть еще одно окно:
для последующей эволюции свопа в реальном времени.
Примечание: вы должны удалить столько свободного диска в текущем каталоге, у вас есть mem + swap
ДемоNota, хост, на котором я это сделал, сильно используется. Это будет более значительным на действительно тихой машине.
источник