2016-09-05 43 views
8

Niedawno dowiedziałem się o ataku row hammer. Aby wykonać ten atak, programista musi przepłukać pełną hierarchię pamięci podręcznej procesora dla określonej liczby adresów.Dlaczego CLFLUSH istnieje w x86?

Moje pytanie brzmi: dlaczego w X86 potrzebne jest CLFLUSH? Jakie są powody, dla których kiedykolwiek korzystasz z tej instrukcji, jeśli wszystkie pamięci podręczne L * działają w sposób przezroczysty (tzn. Nie jest wymagane jawne unieważnianie pamięci podręcznej)? Poza tym: czy procesor nie może swobodnie spekulować wzorcami dostępu do pamięci, a tym samym całkowicie zignorować instrukcję?

Odpowiedz

6

Przeważnie dla dziwnych rzeczy, takich jak regiony MMIO, które można buforować, myślę.

Skylake wprowadziła słabo uporządkowaną, wyższą wydajność CLFLUSHOPT, ponieważ jest przydatna w przypadku nieulotnej pamięci podłączonej bezpośrednio do hierarchii pamięci. Opróżnianie pamięci podręcznej zapewnia, że ​​dane są zapisywane w rzeczywistej pamięci, a nie są nadal zabrudzone w procesorze.

Potencjalnie ma to również znaczenie w przypadku urządzeń DMA, które nie współpracują z pamięcią podręczną, jeśli cokolwiek jeszcze może to zrobić w x86. (Prawdopodobnie nie, myślę, że teraz wszystkie DMA są teraz spójne z pamięci podręcznej).

Nie jestem ekspertem w tej dziedzinie i nie jest to kompletna odpowiedź obejmująca wszystkie przypadki użycia.