Где хранится кэш Linux

Обновлено: 29.06.2024

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

Как работает кэш файловой системы Linux

Ядро резервирует определенный объем системной памяти для кэширования обращений к диску файловой системы, чтобы повысить общую производительность. Кэш в Linux называется Page Cache. Размер кэша страниц настраивается с большими значениями по умолчанию, позволяющими кэшировать большие объемы дисковых блоков. Максимальный размер кеша и политика удаления данных из кеша настраиваются с помощью параметров ядра. Подход к кэшированию в Linux называется кэшем с обратной записью. Это означает, что если данные записываются на диск, они записываются в память в кеш и помечаются как грязные в кеше до тех пор, пока они не будут синхронизированы с диском. Ядро поддерживает внутренние структуры данных, чтобы оптимизировать данные, которые необходимо удалить из кеша, когда в кеше требуется больше места.

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

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

Использование команды Free для просмотра использования кэша

Мы можем использовать команду free из командной строки, чтобы проанализировать системную память и объем памяти, выделенный для кэширования. См. команду ниже:


Из приведенной выше команды free мы видим, что в этой системе имеется 7,5 ГБ ОЗУ. Из них используется только 209 МБ и 6,5 МБ свободно. 667 МБ используется в буферном кеше. Теперь давайте попробуем увеличить это число, выполнив команду для создания файла размером 1 гигабайт и прочитав файл. Приведенная ниже команда сгенерирует примерно 100 МБ случайных данных, а затем добавит 10 копий файла в один large_file.


Теперь мы обязательно прочитаем этот 1-гигабайтный файл, а затем снова проверим команду free:


Мы видим, что использование буферного кэша увеличилось с 667 до 1735 МБ, что примерно на 1 ГБ больше, чем использование буферного кэша.

Команда удаления кэшей виртуальной машины Proc Sys

Ядро Linux предоставляет интерфейс для сброса кеша. Давайте попробуем эти команды и посмотрим, как они повлияют на бесплатную настройку.


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

Экспериментальная проверка работы отбрасываемых кешей

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


Чтение файла заняло 8,4 секунды. Давайте еще раз прочитаем, что файл должен находиться в кеше файловой системы, и посмотрим, сколько времени это займет.


Бум! Для чтения потребовалось всего 0,2 секунды по сравнению с 8,4 секунды, когда файл не был кэширован. Для проверки давайте повторим это еще раз, сначала очистив кеш, а затем прочитав файл 2 раза.


Все сработало, как и ожидалось. 8,5 секунд для чтения без кэширования и 0,2 секунды для чтения из кэша.

Заключение

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

Об авторе

Линукс Вольфман

Linux Wolfman интересуется операционными системами, файловыми системами, базами данных и аналитикой и всегда следит за новыми технологиями и тенденциями. Напишите мне в Твиттере @linuxhint и попросите Человека-волка.

/var/cache предназначен для кеширования данных из приложений. Такие данные генерируются локально в результате трудоемких операций ввода-вывода или вычислений. Приложение должно иметь возможность регенерировать или восстанавливать данные. В отличие от /var/spool кэшированные файлы можно удалить без потери данных. Данные должны оставаться действительными между вызовами приложения и перезагрузкой системы.

Срок действия файлов, расположенных в каталоге /var/cache, может быть истёк в зависимости от приложения, системного администратора или и того, и другого. Приложение всегда должно иметь возможность восстановиться после ручного удаления этих файлов (обычно из-за нехватки места на диске). Никаких других требований к формату данных каталогов кэша не предъявляется.

Обоснование

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

5.5.2. Особые параметры

5.5.3. /var/cache/fonts : локально сгенерированные шрифты (необязательно)

5.5.3.1. Цель

Каталог /var/cache/fonts следует использовать для хранения любых динамически создаваемых шрифтов. В частности, все шрифты, которые автоматически генерируются mktexpk, должны быть расположены в подкаталогах с соответствующими именами /var/cache/fonts. [38]

5.5.3.2. Особые параметры

Другие динамически созданные шрифты также могут быть размещены в этом дереве в подкаталогах с соответствующими именами /var/cache/fonts .

5.5.4. /var/cache/man : справочные страницы в локальном формате (необязательно)

5.5.4.1. Цель

Этот каталог представляет собой стандартное расположение для сайтов, которые предоставляют доступный только для чтения раздел /usr, но хотят разрешить кэширование справочных страниц в локальном формате. Сайты, которые монтируют /usr как доступные для записи (например, однопользовательские установки), могут не использовать /var/cache/man и могут напрямую записывать отформатированные справочные страницы в каталоги cat в /usr/share/man. Вместо этого мы рекомендуем большинству сайтов использовать один из следующих вариантов:

Отформатируйте все страницы руководств вместе с неформатированными версиями.

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

Разрешить локальное кэширование отформатированных справочных страниц в /var/cache/man .

Структура /var/cache/man должна отражать как наличие нескольких иерархий справочных страниц, так и возможность поддержки нескольких языков.

Учитывая неформатированную страницу руководства, которая обычно отображается в

/man/ /man , каталог для размещения отформатированных справочных страниц - /var/cache/man/ / /cat , откуда берется

путем удаления всех ведущих компонентов пути usr и/или конечного общего ресурса. (Обратите внимание, что компонент может отсутствовать.) [39]

Справочные страницы, записанные в /var/cache/man, могут в конечном итоге быть перенесены в соответствующие предварительно отформатированные каталоги в исходной иерархии man или устареть; аналогичным образом отформатированные справочные страницы в исходной иерархии справочных документов могут устареть, если к ним не обращались в течение определенного периода времени.

Если предварительно отформатированные страницы руководства поставляются с системой на носителе только для чтения (например, на компакт-диске), они должны быть установлены в исходной иерархии man (например, /usr/share/man/cat ). /var/cache/man зарезервирован как перезаписываемый кеш для отформатированных справочных страниц.

Обоснование

В выпуске 1.2 этого стандарта для этой иерархии указан /var/catman. Путь был перемещен в /var/cache, чтобы лучше отражать динамическую природу отформатированных справочных страниц. Имя каталога было изменено на man, чтобы можно было расширить иерархию, включив в нее форматы постобработки, отличные от "cat", такие как PostScript, HTML или DVI.

[39] Например, /usr/share/man/man1/ls.1 форматируется в /var/cache/man/cat1/ls.1 и /usr/X11R6/man/ /man3/XtClass. 3x в /var/cache/man/X11R6/ /cat3/XtClass.3x .

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



2 ответа 2

«Системы на основе Unix» — это слишком общая категория, чтобы можно было сделать какое-либо общеприменимое определение, применимое ко всем системам на основе Unix.Проблема в том, что структура файловой системы (и «правильное» / «обычное» место для размещения вещей) настолько сильно различается между разными разновидностями «Unix» (если вы даже можете это назвать), что вам в значительной степени приходится с этим справляться. в индивидуальном порядке.

  • В Ubuntu 64-разрядные библиотеки помещаются в /usr/lib или /usr/lib/x86_64-linux/, а 32-разрядные библиотеки помещаются в /usr/lib32
  • В Fedora 64-битные библиотеки помещаются в /usr/lib64, а 32-битные — в /usr/lib
  • В Fedora больше нет понятия /lib или /bin (это просто символические ссылки на эквивалентные каталоги /usr)
  • Большинство дистрибутивов Linux предпочитают устанавливать программное обеспечение, устанавливаемое пользователем (то есть программное обеспечение, не предоставленное менеджером пакетов) в /usr/local/ (с lib, bin и т. д., var и т. д.). внутри /usr/local/)
  • Многие дистрибутивы Linux используют /var/cache для кеша, хотя, если он "временный" (неважно, если он потеряется), его можно сохранить в /tmp
  • Некоторые приложения типа "приложение в папке" хранят все в подкаталоге /opt (особенно установщики clickwrap)
  • Некоторые приложения просто устанавливаются в подкаталог пользовательского каталога ~ (обычно /home/username)
  • В Solaris я видел, что /srv используется аналогично /opt, а иногда /srv является корневым www

Ответ заключается в том, что каноническое, социально приемлемое, хорошо интегрированное соглашение о том, где хранить что-либо в любой операционной системе, будь то дистрибутив Linux, BSD, Solaris, HP-UX и т. п., зависит от конкретных обстоятельств. . В частности:

  • Как распространяется пакет?
  • Требуется ли пользователю root-доступ для установки?
  • Зависит ли пакет от других пакетов, уже установленных в системе, или напрямую интегрирован с ними, например. плагин или надстройка?
  • Будет ли пакет интегрирован в исходные репозитории дистрибутива, чтобы пользователи могли использовать команду, такую ​​как apt-get или yum, для его установки напрямую, без загрузки установщика с веб-сайта?
  • Будет ли программное обеспечение иметь отдельную конфигурацию для каждого пользователя, управляющего компьютером?
  • Будет ли программное обеспечение иметь глобальные параметры конфигурации, которые может изменять только администратор (root)?
  • Нужно ли программному обеспечению интегрироваться с системой инициализации (например, для запуска при загрузке)?

На этот вопрос нет прямого ответа без учета всех факторов. Однако, в частности, для Ubuntu 12.04, если вы собираете свой пакет в файл .deb для распространения в PPA или для отправки в собственные репозитории пакетов Ubuntu (основной или юниверс), я бы рекомендовал хранить кеш в /var/ кеш . Но это только для Ubuntu, и вы, конечно, не должны полагаться на то, что каждый дистрибутив или ОС на основе Unix сочтет это приемлемым.

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

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

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

Самый простой способ сделать это — создать программу с помощью GNU Autoconf. Autoconf — это система сборки, в которой пользователь может передать аргументы командной строки сценарию сборки, чтобы изменить пути различных «типов каталогов» по ​​умолчанию. Почти в каждом дистрибутиве есть сценарий сборки для каждого пакета Autoconf, который устанавливает подходящие для дистрибутива обычные каталоги для каждого типа. У них даже есть специальный тип каталога для кеша: sharedstatedir.

Прокрутите страницу данных вниз и найдите папку «com. фейсбук. косатка». Нажмите и откройте папку, а затем откройте «кэш» > «fb_temp».

Где хранится кеш?

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

Кэширует ли Linux файлы?

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

Можем ли мы очистить кэш-память в Linux?

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

Как просмотреть кеш на Android?

Просмотр файлов кеша Android

  1. Откройте мои файлы или зарегистрируйте свой телефон.
  2. Перейдите в папку Android и откройте ее.
  3. Вы увидите папку с именем Data.
  4. В папке Data найдите com.
  5. Теперь вы увидите папку кеша.
  6. Откройте эту папку кеша, и после этого вы получите много файлов.

Удаленные сообщения FB исчезли навсегда?

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

Как найти старые кешированные страницы?

В Google нажмите меню с тремя точками рядом с результатом, чтобы открыть всплывающую страницу «Об этом результате». Нажмите кнопку «Кэшировано» во всплывающем окне, чтобы просмотреть кешированную версию веб-сайта. Когда сайт загрузится, Google сообщит вам, что это старая версия, и укажет, когда был сделан снимок.

Безопасна ли очистка кеша?

Безопасно ли очищать кеш приложения? Короче говоря, да. Поскольку в кеше хранятся второстепенные файлы (то есть файлы, которые не на 100% нужны для корректной работы приложения), его удаление не должно отрицательно сказаться на функциональности приложения. … Браузеры, такие как Chrome и Firefox, также любят использовать много кеша.

Что такое хороший объем кэш-памяти?

Сегодня емкость основной памяти составляет от 512 МБ до 4 ГБ, а объем кэш-памяти — от 256 КБ до 8 МБ в зависимости от модели процессора. Тем не менее, даже небольшого кэша 256 КБ или 512 КБ достаточно, чтобы обеспечить существенный прирост производительности, который сегодня большинство из нас считает само собой разумеющимся.

Кэш хранится в оперативной памяти?

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

Читайте также: