Сверхоперативная (кэш) память
Сверхоперативная (кэш) память – высокоскоростная память сравнительно большой емкости, являющаяся буфером между оперативной памятью и процессором и позволяющая увеличить скорость выполнения операций. Доступ к данным в кэш-памяти выполняется быстрее, чем выборка из оперативной и, тем более, внешней памяти. Благодаря этому уменьшается время доступа к данным и тем самым увеличивается производительность компьютера. Кэширование данных выполняется процессором, жесткими дисками, браузерами, веб-серверами, службами DNS и WINS. Регистры кэш-памяти недоступны для пользователя, отчего и происходит ее название (в переводе означает «тайник»).
Кэш-память состоит из набора записей (кэш-линий), каждая из которых ассоциирована с блоком данных и является копией данных из оперативной памяти (рис. 3.5).
Рис. 3.5. Соответствие данных в оперативной и кэш-памяти
Каждая кэш-линия имеет порядковый номер (индекс) и идентификатор (тег), который является адресом данных из этой кэш-линии в оперативной памяти.
Пример 3.4. Веб-браузер проверяет кэш-память жесткого диска на наличие локальной копии веб-страницы, соответствующей запрошенному URL. В этом случае URL является тегом, а содержимое веб-страницы – данными.
При обращении процессора к памяти проводится проверка, не хранятся ли запрашиваемые данные в кэш-памяти. Для этого выполняется сравнение адреса запрашиваемых данных со значениями тегов всех-кэш-линий. Случай совпадения с тегом какой-либо кэш-линии называется попаданием в кэш, обратный случай – промахом кэш. Попадание в кэш позволяет процессору немедленно выполнить чтение или запись данных. В случае же промаха в кэш-памяти появляется новая кэш-линия, тегу которой присваивается адрес текущего запроса, а в поле данных записывается информация из оперативной памяти после ее считывания или информация для записи в оперативную память. Промахи по чтению задерживают исполнение программы, поскольку они требуют считывания данных из более медленной оперативной памяти. Промахи по записи задержки не вызывают, так как записываемые данные могут быть сохранены в кэш-памяти сразу, а запись их в оперативную память можно провести позже в фоновом режиме.
При добавлении данных в кэш-память после промаха может потребоваться удаление из нее ранее записанных данных. Для выбора кэш-линии, из которой будет удалена информация, используются специальные эвристические алгоритмы кэширования.
Использовать кэш-память процессора целесообразно при тактовой частоте не менее 40 МГц, поэтому она впервые стала применяться совместно с процессором Intel 80386 (1985 г.). Современные процессоры имеют не менее трех независимых видов кэш-памяти (рис. 3.6):
1) кэш инструкций для ускорения загрузки машинного кода;
2) кэш данных для ускорения чтения и записи данных;
3) буфер ассоциативной трансляции (TLB) для ускорения преобразования виртуальных адресов в физические как для инструкций, так и для данных.
Рис. 3.6. Структура кэш-памяти процессора AMD K8 (2003 г.)
Описанный выше принцип функционирования кэш-памяти характерен для КЭШа данных.
Кэш-память реализуется в виде нескольких уровней:
1) кэш-память первого уровня (L1) интегрирована с процессором и является наиболее быстродействующей – ее латентность (время задержки выполнения команды процессором) равна 2 – 4 тактам; в современных процессорах разделена на кэш инструкций и кэш-данных (см. рис. 3.6); емкость не превышает 128 Кб;
2) кэш-память второго уровня (L2) имеет латентность 8 – 20 тактов; емкость находится в пределах от 128 Кб до 12 Мб, причем в многопроцессорных системах она равномерно разделена между всеми процессорами (память раздельного пользования);
3) кэш-память третьего уровня (L3) является наименее быстродействующей, на самой емкой (емкость может быть более 24 Мб); является памятью общего пользования и применяется для синхронизации кэш-памяти второго уровня для различных процессоров;
4) кэш-память четвертого уровня (L4), в отличие от предыдущих, не интегрирована с процессором, а размещена в отдельной микросхеме; используется только в высокопроизводительных серверах и больших ЭВМ.
При чтении данных кэш-память однозначно дает увеличение производительности компьютера. При записи же данных производительность увеличивается не всегда. Поэтому в различных приложениях может использоваться одна из двух технологий записи результатов в кэш-память:
1) обратная (отложенная) запись, когда запись результатов выполнения операций осуществляется сначала в кэш-память, а запись в оперативную память проводится позже путем группировки нескольких операций записи в соседние ячейки в одну операцию; при использовании обратной записи в многопроцессорной системе кэш-памяти различных процессоров должны быть согласованы или нужно применять одну и ту же кэш-память;
2) сквозная запись, когда результаты выполнения операций одновременно записываются и в оперативную, и в кэш-память, т. е. запись не кэшируется.