Как процессор использует «mfence» для защиты последовательной согласованности? - PullRequest
0 голосов
/ 22 мая 2018

Я хочу знать, как процессор использует 'mfence' для защиты последовательной согласованности, кто мне скажет?

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

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

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

На практике mfence не может быть идеальным выбором для обеспечения последовательной согласованности даже для простых целей хранения, поскольку егопроизводительность кажется хуже, чем заблокированная операция, поэтому вместо нее можно использовать, например, lock xchg.

0 голосов
/ 22 мая 2018

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

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

Относительно того, как они делают это в кремнии ... не знаю.

...