Определение / значение сглаживания? (Архитектуры кэша процессора)

#caching #architecture #cpu-architecture #cpu-cache

#кэширование #архитектура #архитектура процессора #cpu-cache

Вопрос:

Меня немного смущает значение «псевдонима» между CPU-cache и физическим адресом. Сначала я нашел это определение в Википедии :

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

но через некоторое время я увидел другое определение в презентации (ppt) DAC’05: «Энергоэффективные физически помеченные кэши для встроенных процессоров с виртуальной памятью»

Псевдонимы кэша и синонимы:

Псевдоним: один и тот же виртуальный адрес из разных контекстов, сопоставленный с разными физическими адресами Синоним: Разные виртуальные адреса, сопоставленные с одним и тем же физическим адресом (совместное использование данных)

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

Редактировать:

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

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

«Y» = набор допустимых строк кэша. (элементы a также «строка»)

Комментарии:

1. какое определение правильное? 1v-> np или nv-> 1p?

Ответ №1:

Сначала вам нужно было бы узнать о виртуальной памяти, но в основном это:

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

  • Несколько виртуальных адресов могут указывать на один и тот же физический адрес.

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


Редактировать:

Пример ссылки:

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


Для тех, кто все еще не убежден:

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

Комментарии:

1. Я вообще не понимаю, как это отвечает на вопрос. OP хочет знать, означает ли псевдонимирование «одни и те же виртуальные адреса (в разных контекстах) отображаются в разные физические местоположения» или «несколько виртуальных адресов отображаются в одно физическое местоположение». Я подозреваю, что ответ «оба», но у меня нет ссылки на него.

2. Можете ли вы объяснить мне, какое из двух приведенных выше определений неверно?

3. @John, @Wu: Я считаю, что Википедия верна. Псевдонимы — это проблема с корректностью одной программы, и объяснение 2 для этого не имеет смысла.

4. Джону: поскольку «Омоним» и «Синоним» не могут быть омонимом и синонимом, я думаю, что правильным может быть только одно.

5. @Wu, @John: Смотрите мой источник. 🙂

Ответ №2:

@Wu да, вам действительно нужно немного разбираться в виртуальной памяти, чтобы понять псевдонимы. Позвольте мне сначала дать вам несколько строк объяснения:

Допустим, у меня есть оперативная память (physical memory) объемом 1 ГБ. Я хочу представить моему программисту представление о том, что у меня есть 4 ГБ памяти, тогда я использую виртуальную память. В виртуальной памяти программист думает, что у него / нее есть 4 ГБ, и пишет свою программу с этой точки зрения. Им не нужно знать, сколько физической памяти существует. Преимущество заключается в том, что программа будет выполняться на компьютерах с разным объемом оперативной памяти. Кроме того, программа может выполняться на компьютере вместе с другими программами (также потребляющими физическую память).

Итак, вот как реализуется виртуальная память. Я приведу простую 1-уровневую систему виртуальной памяти (у Intel 2/3-уровневая система, которая просто усложняет объяснение.

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

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

Возвращаясь к псевдонимам в контексте виртуальной памяти: поскольку существует сопоставление между виртуальными> физическими адресами, можно создать два виртуальных адреса для сопоставления с одним и тем же физическим адресом. это то же самое, что сказать, что если я посмотрю в моей таблице страниц на виртуальные адреса X и Y, я получу один и тот же физический адрес в ОБОИХ случаях.

Ниже я показываю простой пример таблицы на 8 страницах. Допустим, существует 8 реальных адресов и только 3 физических адреса. Таблица страниц выглядит следующим образом:

 0: 1
 1: На диске
 2: 2
 3: 1
 4: На диске
 5: На диске
 6: На диске
 7: 0


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

ПРИМЕЧАНИЕ: Я везде использовал термины «физические» и «виртуальные адреса», чтобы упростить концепцию. В реальной системе сопоставление виртуального с физическим не выполняется для каждого адреса. Вместо этого мы сопоставляем фрагменты виртуального пространства с физическим пространством. Каждый фрагмент называется страницей (вот почему таблица сопоставления называется таблицей страниц), а размер фрагмента является свойством ISA, например, Intel x86 содержит страницы объемом 4 КБ.

Комментарии:

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

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

3. вы утверждаете, что в моем последнем ответе «достаточно позже» имеет то же значение? Сделайте это более понятным, ОС произведет переключение контекста, чтобы корректное обновление кэша было готово к выполнению.