2015-11-11 3 views
1

Моя группа (проект Isis2) экспериментирует с RDMA. Мы озадачены отсутствием документации по гарантиям на атомарность односторонних считываний RDMA. Я потратил полтора часа на охоту за какой-либо информацией вообще на этом безрезультатно. Это включает в себя тесное чтение блога на rdmamojo.com, известное тем, что у вас есть ответы на каждый вопрос RDMA ...Являются ли односторонние RDMA атомами для одиночных строк кеша?

В случае, когда мы сосредоточены, мы хотим, чтобы авторы делали атомарную запись для объектов, которые всегда будут вписываться в одна строка кеша. Скажем, это происходит на машине A. Тогда мы планируем иметь односторонний атомный RDMA-ридер на машине B, который мог бы считывать фрагменты памяти из A, охватывая многие из этих объектов (но опять же, ни один объект никогда не был бы написан неатомно , и все будет вписываться в одну строку кеша). Таким образом, B считывает X, Y и Z, и каждый из этих объектов живет в одной строке кэша на A и записывается с помощью атомной записи.

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

Наши односторонние читают «семантически эквивалентные» атомные локальные чтения, несмотря на то, что они инициируются на удаленной машине? (Я подозреваю, что: в противном случае односторонние чтения RDMA будут бесполезны для данных, которые когда-либо были изменены ...). И где зафиксированы «правила»?

+0

В лучшем случае, похоже, это реализация [специфическая] (http://stackoverflow.com/a/28804076/3288910). – Jason

ответ

0

Хорошо, между тем, похоже, я нашел правильный ответ, и я считаю, что ответ Роланда не совсем прав - отчасти прав, но не полностью.

В http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf, который является руководством по архитектуре Intel (мне нужно еще раз проверить для AMD ...) Я нашел это: Атомная память в архитектуре Intel 64 и IA-32 гарантируется только для подмножества операнд памяти Размеры и сценарии выравнивания. Список гарантированных атомных операций описан в Разделе 8.1.1 IA-32 Руководство разработчика программного обеспечения Intel® Architecture, том 3A.

В этом разделе, озаглавленном «УПРАВЛЕНИЕ МНОЖЕСТВЕННЫМ ПРОЦЕССОМ», можно найти много информации об гарантированных атомных операциях (стр. 2210). В частности, Intel гарантирует, что подсистемы памяти будут атомарными для собственных типов (бит, байт, целые числа разных размеров, float). Эти объекты должны быть выровнены так, чтобы они соответствовали строке кеша (64 байта на текущих платформах Intel), а не пересекали границу строки кэша. Но тогда Intel гарантирует, что независимо от того, какое устройство использует шину памяти, магазины и выборки будут атомарными.

Для более сложных объектов требуется блокировка, если вы хотите быть уверены, что получите безопасное выполнение. Кроме того, если вы выполняете многоядерные операции, вы должны использовать блокированные (атомные) варианты инструкций Intel, чтобы быть уверенными в согласованности для одновременной записи. Вы получаете это автоматически для переменных, отмеченных volatile в C++ или C# (Java тоже?).

Это связано с тем, что локальная запись на родные типы может быть сопряжена с дистанционно инициированным RDMA безопасным чтением.

Но обратите внимание, что строки, массивы байтов - они не будут атомарными, потому что они могут легко пересечь линию кеша. Кроме того, операции над сложными объектами с несколькими полями данных могут быть не атомарными - для таких вещей вам понадобится более сложный подход, например, в документе FaRM (Fast Remote Memory) от MSR. Моя собственная потребность более простая и не требует разработки схемы нумерации версий. FaRM реализует ...

0

Я не знаю никакой такой гарантии атомарности. Конечно, чтение RDMA выполняется удаленным адаптером, а размер кешлин - это концепция ЦП. Я не считаю, что что-то гарантирует, что гранулярность чтения, используемая удаленным адаптером RDMA, соответствует размеру записи, выполняемой удаленным ЦП.

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

0

Протокол когерентности кеша, реализованный в контроллере PCIe, должен гарантировать атомарность для чтения в режиме одиночной кэш-линии RDMA. Контроллер PCIe должен отследить кэши центральных ядер и взять на себя ответственность за линию кэша (RFO), прежде чем возвращать данные в адаптер RDMA. Поэтому он должен увидеть некоторый снимок строки кэша.

Смежные вопросы