LINUX.ORG.RU

Барьеры памяти - пытаюсь разобраться

 ,


0

1

Делаю тут перевод про паттерн Дисраптор на Java и натолкнулся на понятие барьеров памяти:

...

In addition, processors have “store buffers” to offload writes to these caches, and “invalidate queues” so that the cache coherency protocols can acknowledge invalidation messages quickly for efficiency when a write is about to happen.

...

A read memory barrier orders load instructions on the CPU that executes it by marking a point in the invalidate queue for changes coming into its cache.  This gives it a consistent view of the world for write operations ordered before the read barrier.

A write barrier orders store instructions on the CPU that executes it by marking a point in the store buffer, thus flushing writes out via its cache.  This barrier gives an ordered view to the world of what store operations happen before the write barrier.

A full memory barrier orders both loads and stores but only on the CPU that executes it.

Дословно конечно можно перевести, но хочется понимание вопроса. На сколько я понял «invalidate queues» говорит ядру, какие данные в его кеше обновились в кешах других ядер, т.е. какие его данные в кеше устарели.

В свою очередь, что хранит «store buffers»? Это просто накопительный буфер, посредник между кешем ядра и внешним миром (другими кешами)? Т.е. в нем просто осуществляется накопление данных, которые затем флушатся в кеш ядра, с обновление старых данных и добавлением новых в кеш линии текущего ядра?

Соответсвенно читающий барьер обновляет устаревшие значения в кеше (смотрит в «store buffers» и делает выборку из него только тех значений, которые нужно обновить в текущем кеше, без добавление новых данных). А пишущий барьер просто сбрасывает весь «store buffers»?

★★★★★

Последнее исправление: foror (всего исправлений: 8)

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

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

anonymous
()

Алсо, цитату ты оформил отвратительно; утруждать себя скроллом, чтобы читать это — никто не будет.

Manhunt ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.