Аппаратно программные платформы корпоративных информационных систем

Что происходит во время записи?



4. Что происходит во время записи?

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

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

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

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

  • сквозная запись (write through, store through) - информация записывается в два места: в блок кэш-памяти и в блок более низкого уровня памяти.
  • запись с обратным копированием (write back, copy back, store in) - информация записывается только в блок кэш-памяти.
    Модифицированный блок кэш-памяти записывается в основную память только когда он замещается. Для сокращения частоты копирования блоков при замещении обычно с каждым блоком кэш-памяти связывается так называемый бит модификации (dirty bit). Этот бит состояния показывает был ли модифицирован блок, находящийся в кэш-памяти. Если он не модифицировался, то обратное копирование отменяется, поскольку более низкий уровень содержит ту же самую информацию, что и кэш-память.


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

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



    Метод Доля

    промахов
    Потери

    при

    промахе
    Время обращения при попадании Сложность аппаратуры Примечания

    Увеличение размера блока + -

    0

    Повышение степени ассоциативности +

    - 1

    Кэш-память с вспомогательным кэшем +



    2

    Псевдоассоциативные кэши +



    2

    Аппаратная предварительная выборка команд и данных +



    2 Предварительная выборка данных затруднена
    Предварительная выборка под управлением компилятора +



    3 Требует также неблокируемой кэш-памяти
    Специальные методы для уменьшения промахов +



    0 Вопрос ПО
    Установка приоритетов промахов по чтению над записями

    +

    1 Просто для однопроцессорных систем
    Использование подблоков

    + + 1 Сквозная запись + подблок на 1 слово помогают записям
    Пересылка требуемого слова первым

    +

    2

    Неблокируемые кэши

    +

    3

    Кэши второго уровня

    +

    2 Достаточно дорогое оборудование
    Простые кэши малого размера -

    + 0

    Обход преобразования адресов во время индексации кэш-памяти



    + 2

    Конвейеризация операций записи для быстрого попадания при записи



    + 1


    Содержание раздела