sonyps4.ru

Что такое кэш-память? Что такое кэш для "Андроид". Кэширование

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

История [ | ]

Впервые слово «cache» в компьютерном контексте было использовано в 1967 году во время подготовки статьи для публикации в журнале «». Статья касалась усовершенствования памяти в разрабатываемой модели 85 из серии IBM System/360 . Редактор журнала Лайл Джонсон попросил придумать более описательный термин, нежели «высокоскоростной буфер», но из-за отсутствия идей сам предложил слово «cache». Статья была опубликована в начале 1968 года, авторы были премированы IBM , их работа получила распространение и впоследствии была улучшена, а слово «кэш» вскоре стало использоваться в компьютерной литературе как общепринятый термин .

Функционирование [ | ]

Кэш - это память с большей скоростью доступа, предназначенная для ускорения обращения к данным, содержащимся постоянно в памяти с меньшей скоростью доступа (далее «основная память»). Кэширование применяется ЦПУ , жёсткими дисками , браузерами , веб-серверами , службами DNS и WINS .

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

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

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

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

При модификации элементов данных в кэше выполняется их обновление в основной памяти. Задержка во времени между модификацией данных в кэше и обновлением основной памяти управляется так называемой политикой записи .

В кэше с немедленной записью каждое изменение вызывает синхронное обновление данных в основной памяти.

В кэше с отложенной записью (или обратной записью ) обновление происходит в случае вытеснения элемента данных, периодически или по запросу клиента. Для отслеживания модифицированных элементов данных записи кэша хранят признак модификации (изменённый или «грязный» ). Промах в кэше с отложенной записью может потребовать два обращения к основной памяти: первое для записи заменяемых данных из кэша, второе для чтения необходимого элемента данных.

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

Аппаратная реализация [ | ]

Кэш центрального процессора [ | ]

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

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

В неэксклюзивной кэши могут вести себя как угодно.

Уровни кэша [ | ]

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

  • Вторым по быстродействию является кэш второго уровня - L2 cache, который обычно, как и L1, расположен на одном кристалле с процессором. В ранних версиях процессоров L2 реализован в виде отдельного набора микросхем памяти на материнской плате. Объём L2 от 128 кбайт до 1−12 Мбайт. В современных многоядерных процессорах кэш второго уровня, находясь на том же кристалле, является памятью раздельного пользования - при общем объёме кэша в n Мбайт на каждое ядро приходится по n/c Мбайта, где c - количество ядер процессора.
  • Кэш третьего уровня наименее быстродействующий, но он может быть очень большим - более 24 Мбайт. L3 медленнее предыдущих кэшей, но всё равно значительно быстрее, чем оперативная память. В многопроцессорных системах находится в общем пользовании и предназначен для синхронизации данных различных L2.

Ассоциативность кэша [ | ]

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

При одинаковом объёме кэша схема с большей ассоциативностью будет наименее быстрой, но наиболее эффективной (после четырёхпотоковой реализации прирост «удельной эффективности» на один поток растет мало).

Кэширование внешних накопителей [ | ]

Многие периферийные устройства хранения данных используют внутренний кэш для ускорения работы, в частности, жёсткие диски используют кэш-память от 1 до 256 Мбайт (модели с поддержкой NCQ /TCQ используют её для хранения и обработки запросов), устройства чтения CD/DVD/BD-дисков также кэшируют прочитанную информацию для ускорения повторного обращения.

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

Применение кэширования внешних накопителей обусловлено следующими факторами:

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

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

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

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

Программная реализация [ | ]

Политика записи при кэшировании [ | ]

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

Существуют две основные политики записи кэш-памяти - сквозная запись (write-through) и отложенная запись (write-back):

Алгоритм работы кэша с отложенной записью [ | ]

Изначально все заголовки буферов помещаются в список свободных буферов. Если процесс намеревается прочитать или модифицировать блок, то он выполняет следующий алгоритм:

Процесс читает данные в полученный буфер и освобождает его. В случае модификации процесс перед освобождением помечает буфер как «грязный». При освобождении буфер помещается в голову списка свободных буферов.

Таким образом:

  1. если процесс прочитал некоторый блок в буфер, то велика вероятность, что другой процесс при чтении этого блока найдёт буфер в оперативной памяти;
  2. запись данных во внешнюю память выполняется только тогда, когда не хватает «чистых» буферов, либо по запросу.

Алгоритм вытеснения [ | ]

Если список свободных буферов пуст, то выполняется алгоритм вытеснения буфера. Алгоритм вытеснения существенно влияет на производительность кэша. Существуют следующие алгоритмы:

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

Кэширование, выполняемое операционной системой [ | ]

Кэш оперативной памяти состоит из следующих элементов:

Кэширование интернет-страниц [ | ]

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

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

Кэширование результатов работы [ | ]

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

См. также [ | ]

Примечания [ | ]

  1. Кэш // Большой орфографический словарь русского языка / под ред.

Что такое кэш? Можно ли очищать кэш приложений на телефоне андроиде? Да можно. Нужно ли очищать кэш на андроид? Нужно и ненужно.

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

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

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

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

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

Как работает кэш

Кэш память приложений в телефоне андроид является относительно небольшая по сравнению с объемом памяти смартфона или планшета?

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

Она сокращает разрыва между ростом производительности и скоростью доступа к носителям данных.

Использование кэш памяти имеет два преимущества: сокращение времени доступа и более эффективного использования с помощью встроенного алгоритма интеллектуального хранения данных.

Контроллер памяти определяет последовательность часто повторяющихся операций и в ходе выполнения перехватывает их и заменяет данными из кэша.

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

Что случится если удалить кеш

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

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


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

Чтобы понять основную концепцию кэширования, посмотрите на простой пример работы библиотекаря.

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

Позже, клиент возвращается, чтобы вернуть книгу. Библиотекарь берет книгу относит на склад, возвращается к прилавку и ждет другого клиента.

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


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

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

Примерно все так работает и на телефоне андроид. Как видите от объёма и очистки также многое зависит – уменьшается скорость обслуживания, в нашем случае это производительность системы андроида.

Поэтому вывод такой: очищать кэш на андроиде можно, но нужно ли его очищать – решать только вам. Успехов.

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

Понятие кеша

Если говорить на простом языке, который будет понятен абсолютно всем категориям пользователей, то кеш - это буфер, в который помещаются обрабатываемые процессором данные, с целью ускорения доступа к ним кристаллу. Одним из основных преимуществ кеша является быстродействие, поскольку доступ к нему осуществляется значительно быстрее, чем к жесткому диску. Однако он обладает ограниченным объемом, что является одним из его недостатков. Стоит отметить, что технология кэширования применяется не только в CPU, но и в работе винчестера, в работе интернет-браузеров и различных онлайн-сервисов, а также во многих других процессах, происходящих во время работы персонального компьютера. В основу кэширования положено структурирование массивов данных, которые, в свою очередь, выступают всего-лишь копией основной информации, хранящейся на компьютере. Для ускорения доступа к кэшируемым данным, каждому массиву присваивается персональный тэг, выступающий в качестве идентификатора, необходимого для определения качества соответствия с оригиналом.

Процесс использования

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

Обновление данных

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

Политика записи

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

Современные вызовы

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

Взаимная работа кеша различных устройств

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

Уровни кэширования

Современные модели процессоров и других девайсов поддерживают трех- или четырехуровневую кеш-память. Чем большим количеством уровней она обладает, тем больший объем данных может храниться в ней, однако, и тем большее количество времени необходимо для их обработки.
Кеш первого уровня. Является одним из наиболее быстрых, поскольку располагается непосредственно на одном физическом ядре кристалла, благодаря чему необходимо меньшее количество времени для обработки данных, хранящихся в нем. Этот кеш реализован во всех современных моделях CPU и работает он синхронно с процессором на одной частоте.

Кеш второго уровня. В большинстве случаев находится возле кеша первого уровня и используется в качестве памяти раздельного использования. Для определения его величины необходимо объем разделить на количество физических ядер, реализованных в кристалле.
Кеш третьего уровня. Является самым большим по объему, но и самым медленным в работе. Основным предназначением кеша третьего уровня является объединение хранящихся массивов данных, хранящихся в кеше второго уровня.

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

Ассоциативность кеша

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

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

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

Значение элемента данных;

Адрес элемента данных в основной памяти;

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


При каждом обращении к основной памяти по физическому адресу просматривается содержимое кэш-памяти с целью определения требуемых данных. Поиск в кэш-память осуществляется по содержимому – по взятому из запроса значению поля адреса в оперативной памяти. Если данные обнаруживаются в кэш-памяти, произошло кэш-попадание (cache-hit ), то они считываются и результат передается источнику запроса. Если нужные данные отсутствуют, произошел кэш-промах (cache-miss ), то они считываются из основной памяти, передаются источнику запроса и одновременно с этим копируются в кэш-память.

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

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



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

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

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

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

1.Сквозная запись (write through ). При каждом запросе к основной памяти и при записи в нее просматривается кэш. Если данные по запрашиваемому адресу отсутствуют, то запись выполняется только в основную память. Если же данные, к которым выполняется обращение, находятся в кэше, то запись выполняется одновременно в кэш и основную память.

2.Обратная запись (write back ). При возникновении запроса к памяти выполняется просмотр кэша. Если запрашиваемых данных отсутствуют, то запись выполняется только в основную память. В ином случае запись производится только в кэш-память, при этом в описателе данных делается специальная отметка (признак модификации), которая указывает на то, что при вытеснении этих данных из кэша необходимо переписать их в основную память.

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

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

1.Случайное отображение . Элемент оперативной памяти и его адрес размещается в произвольном месте кэш-памяти. Критерием поиска в кэше является адрес оперативной памяти из запроса. Для поиска запрошенных данных используется алгоритм ассоциативного поиска , при котором сравнения с записями кэша выполняются параллельно. Признак (адрес данных в оперативной памяти), по которому выполняется сравнение, называется тегом (tag ). Вытеснение устаревших данных происходит только в случае, полного заполнения кэш-памяти. Выбор данных на выгрузку осуществляется среди всех записей кэша и основывается на приемах, аналогичных алгоритмам замещения страниц. Электронная реализация схемы приводит к удорожанию памяти, поэтому ассоциативная кэш-память используется в случаях, когда для обеспечения высокого процента попадания достаточно небольшого объема памяти.

2.Детерминированное отображение . Элемент основной памяти всегда отображается в одно и то же место кэш-памяти. Кэш-память разделена на строки, каждая из которых имеет свой номер и предназначена для хранения одной записи об одном элементе данных. Между номерами строк кэш-памяти и адресами оперативной памяти устанавливается соответствие «один ко многим»: одному номеру строки соответствует несколько адресов оперативной памяти. Отображение осуществляется при помощи специальных функций, например, путем простого выделения нескольких разрядов из адреса оперативной памяти, которые интерпретируются как номер строки кэш-памяти.

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

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

По номеру группы, полученному из адреса оперативной памяти из запроса;

В пределах группы путем ассоциативного просмотра всех записей в группе на случай совпадения старших частей адресов оперативной памяти.

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

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

Технология кэширования в ExpressionEngine состоит из нескольких независимых систем кэширования данных, и настроек.

Кэширование запросов

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

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

Система кэширования запросов обеспечивает где-то от 30 % до 90%- сокращения общего количества запросов в зависимости от того, как созданы ваши страницы.

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

Кэширование тегов

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

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

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

Cache="yes" refresh="10"

Примечание: refresh указывает время, в минутах, между обновлениями кэша.

Например, для кэширования тега в течение 30 минут, вы должны сделать следующее:

{exp:weblog:entries cache="yes" refresh="30"}

Кэширование шаблонов

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

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

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

Примечание: Кэширование шаблонов заменяет кэширование тегов. Нет никакой дополнительной выгоды от использования кэширования тегов и шаблонов одновременно. Если включено кэширование страниц, то не действуют никакие другие виды кэширования. Поэтому, если вы хотите кэшировать отдельные теги, выключите кэширование страниц.

Кэширование динамических запросов раздела

Эта настройка находится на странице Admin > Глобальные настройки разделов. Эта функция увеличит скорость обработки тега {exp:weblog:entries} , кэшируя запросы, которые обычно выполняются динамически. Эта опция, однако, подходит не для всех людей.

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

Отключение запросов

Параметр disable= доступен в теге {exp:weblog:entries} . Он позволяет вам отключать функции тега, которые вы не используете, для повышения производительности. Тег weblog entries разработан так, что по умолчанию производится выборка большого количества информации: Категории, заказные поля, данные пользователя, и т.д. В зависимости от того, как вы используете тег, некоторые из этих данных могут быть не нужны. С помощью параметра "disable" вы можете отключить эти функции тега, чтобы сделать его более "легким".

Синтаксис для параметра disable следующий: disable="ЭЛЕМЕНТ, КОТОРЫЙ ВЫ ХОТИТЕ ОТКЛЮЧИТЬ" . Существует пять элементов, которые могут быть выключены:

  • categories
  • category_fields
  • custom_fields
  • member_data
  • pagination
  • trackbacks

Вы можете отключить несколько элементов, разделяя их, как показано ниже:

Disable="categories|member_data|trackbacks"

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

Например, если вы используете тег weblog entries для отображения заголовков 10 последних записей:

{exp:weblog:entries orderby="date" sort="desc" limit="10"}
{title}

{/exp:weblog:entries}

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

{exp:weblog:entries orderby="date" sort="desc" limit="10" disable="categories|custom_fields|member_data|pagination|trackbacks"}
{title}

{/exp:weblog:entries}

Примечание : Вы так же можете использовать параметр disable="category_fields" в тегах



Загрузка...