2012-10-30 17 views
6

Pracuję z podwójnym systemem Cortex-A9 i próbowałem dokładnie zrozumieć, dlaczego funkcje spinlock muszą używać DMB. Wydaje się, że dopóki bufor łączący się zostanie przepłukany, wartość blokady powinna trafić do L1 na rdzeniu odblokowującym, a SCU powinien unieważnić lub zaktualizować wartość w L1 drugiego rdzenia. To wystarczy, aby zachować spójność i bezpieczne blokowanie w prawo? I czy STREX nie pomija tak czy inaczej bufora magazynu łączącego, co oznacza, że ​​nie potrzebujemy nawet takiego koloru, aby ?Czy spinlocki naprawdę potrzebują DMB?

DMB wydaje się być czymś tępym młotkiem, zwłaszcza, że ​​ domyślnie do domeny systemu, który prawdopodobnie oznacza napisać całą drogę do pamięci głównej, które mogą być kosztowne.

Czy DMB są w blokadach jako obejście dla sterowników, które nie używają smp_mb poprawnie?

Obecnie widzę, na podstawie liczników wydajności, około 5% z moich cykli systemowych znikających w straganach spowodowanych przez DMB.

+1

To może być całkowicie błędny komentarz, ponieważ nie mam dużego doświadczenia w tak niskim poziomie działania, ale z pewnością blokada jest używana do ochrony innych lokalizacji pamięci przed dostępem wielokrotnym (te, które mogą nie być w tym samym strona pamięci podręcznej), więc mimo że sama spinlock może być spójna, nadal potrzebujesz barierę pamięci, aby upewnić się, że dostęp do innych pamięci jest spójny między pamięciami podręcznymi. – Mike

+0

OK Rozumiem, co masz na myśli, ale czy ta logika dotyczy funkcji blokady, a także odblokowania? Blokada nie musi czekać na zakończenie dostępu do sekcji krytycznych. –

+2

W odblokowaniu oczekuję pełnej bariery pamięci przed odblokowaniem, aby wszelkie zmiany, które nastąpiły w sekcji krytycznej, zostały usunięte przed zaktualizowaniem flagi blokady, a wszelkie operacje odczytu, które wystąpiły podczas sekcji krytycznej, zostały zakończone przed flaga blokady jest zaktualizowana.Nawet poza problemami z buforowaniem, myślę, że bariery pamięci są ważne, aby powiedzieć procesorowi, jaki rodzaj porządkowania instrukcji jest dozwolony w przeszłości w różnych punktach programu. – Mike

Odpowiedz

2

znalazłem te artykuły mogą odpowiedzieć na pytanie:

w szczególności:

Będziesz Uwaga dane pamięci bariery (DMB) pouczenie wydawane po nabyciu zamka. DMB gwarantuje, że cała pamięć uzyskuje dostęp zanim bariera pamięci zostanie zauważona przez wszystkie inne procesory w systemie, zanim wszystkie dostępy do pamięci zostaną wykonane po zaporze pamięci. Ma to większy sens, jeśli uznasz, że po uzyskaniu blokady program uzyska dostęp do struktur danych zablokowanych przez blokadę. DMB w powyższej funkcji blokowania zapewnia, że ​​dostęp do zablokowanej struktury danych jest przestrzegany po uzyskaniu dostępu do zamka.

2

DMB jest potrzebny w przypadku SMP, ponieważ inny procesor może zobaczyć, że dostęp do pamięci odbywa się w innej kolejności bez niego, tzn. Dostęp z wnętrza sekcji krytycznej może się zdarzyć, zanim blokada zostanie podjęta z punktu widzenia drugiego rdzenia.

Tak więc drugi rdzeń może widzieć, że trzyma zamek, a także widzieć aktualizacje z wewnątrz sekcji kości krzyżowej biegnącej na drugim rdzeniu, łamiąc konsystencję.

+0

Wynika to głównie z nieczynnej realizacji zamówienia, prawda? – TerrenceSun

Powiązane problemy