Rozszerzenia synchronizacji transakcyjnej — Transactional Synchronization Extensions

Transactional Synchronization Extensions ( TSX ), zwane również Transactional Synchronization Extensions New Instructions ( TSX-NI ), jest rozszerzeniem architektury zestawu instrukcji x86 (ISA), które dodaje obsługę sprzętowej pamięci transakcyjnej , przyspieszając wykonywanie oprogramowania wielowątkowego poprzez elision blokady . Według różnych testów, TSX/TSX-NI może zapewnić około 40% szybsze wykonywanie aplikacji w określonych obciążeniach i 4–5 razy więcej transakcji bazodanowych na sekundę (TPS).

TSX/TSX-NI został udokumentowany przez firmę Intel w lutym 2012 roku i zadebiutował w czerwcu 2013 roku na wybranych mikroprocesorach Intela opartych na mikroarchitekturze Haswell . Procesory Haswell poniżej 45xx oraz R-series i K-series (z odblokowanym mnożnikiem) SKU nie obsługują TSX/TSX-NI. W sierpniu 2014 r. Intel ogłosił błąd w implementacji TSX/TSX-NI w bieżących krokach procesorów Haswell, Haswell-E, Haswell-EP i wczesnych Broadwell , co spowodowało wyłączenie funkcji TSX/TSX-NI w dotkniętych procesorach za pomocą aktualizacja mikrokodu .

W 2016 r. wykryto atak taktowania kanału bocznego poprzez nadużycie sposobu, w jaki TSX/TSX-NI obsługuje błędy transakcyjne (tj. błędy stron ) w celu złamania randomizacji układu przestrzeni adresowej jądra (KASLR) we wszystkich głównych systemach operacyjnych. W 2021 r. firma Intel wydała aktualizację mikrokodu, która wyłączyła funkcję TSX/TSX-NI w generacjach procesorów od Skylake do Coffee Lake , w celu złagodzenia wykrytych problemów z bezpieczeństwem.

Wsparcie dla emulacji TSX/TSX-NI jest dostarczane jako część emulatora Intel Software Development Emulator. Istnieje również eksperymentalna obsługa emulacji TSX/TSX-NI w widełkach QEMU .

Cechy

TSX/TSX-NI zapewnia dwa interfejsy programowe do wyznaczania regionów kodu do wykonania transakcyjnego. Hardware Lock Elision (HLE) to interfejs oparty na prefiksach instrukcji, zaprojektowany tak, aby był wstecznie kompatybilny z procesorami bez obsługi TSX/TSX-NI. Ograniczona pamięć transakcyjna (RTM) to nowy interfejs zestawu instrukcji, który zapewnia większą elastyczność programistom.

TSX/TSX-NI umożliwia optymistyczną realizację obszarów kodu transakcyjnego. Sprzęt monitoruje wiele wątków pod kątem dostępu do pamięci powodującej konflikt, przerywając i wycofując transakcje, których nie można pomyślnie ukończyć. Dostępne są mechanizmy dla oprogramowania do wykrywania i obsługi nieudanych transakcji.

Innymi słowy, eliminacja blokady poprzez wykonanie transakcyjne wykorzystuje transakcje pamięci jako szybką ścieżkę tam, gdzie to możliwe, podczas gdy ścieżka wolna (zastępcza) jest nadal normalną blokadą.

Blokada sprzętowa Elision

Hardware Lock Elision (HLE) dodaje dwa nowe przedrostki instrukcji XACQUIREi XRELEASE. Te dwa prefiksy ponownie wykorzystują kody istniejących REPNE/ REPEprefiksów ( F2H/ F3H). Na procesorach, które nie obsługują HLE, przedrostki REPNE/ REPEsą ignorowane w instrukcjach, dla których XACQUIRE/ XRELEASEsą ważne, umożliwiając w ten sposób kompatybilność wsteczną.

XACQUIREPodpowiedź prefiks może być używany tylko z następującymi instrukcjami z wyraźnym LOCKprefiksem: ADD, ADC, AND, BTC, BTR, BTS, CMPXCHG, CMPXCHG8B, DEC, INC, NEG, NOT, OR, SBB, SUB, XOR, XADD, i XCHG. XCHGInstrukcja może być używany bez LOCKprefiksu, jak również.

XRELEASEPodpowiedź prefiks może być stosowany zarówno z instrukcjami wymienionych powyżej, a z MOV mem, regi MOV mem, imminstrukcji.

HLE umożliwia optymistyczne wykonanie sekcji krytycznej poprzez pominięcie zapisu do blokady, dzięki czemu blokada wydaje się być wolna dla innych wątków. Nieudana transakcja skutkuje wznowieniem wykonania od XACQUIREinstrukcji z prefiksem, ale traktowaniem instrukcji tak, jakby XACQUIREprefiksu nie było.

Ograniczona pamięć transakcyjna

Ograniczona pamięć transakcyjna (RTM) to alternatywna implementacja HLE, która daje programiście elastyczność w określaniu ścieżki kodu awaryjnego, który jest wykonywany, gdy transakcja nie może zostać pomyślnie wykonana. W przeciwieństwie do HLE, RTM nie jest wstecznie kompatybilny z procesorami, które go nie obsługują. Aby zapewnić kompatybilność wsteczną, programy muszą wykryć obsługę RTM w CPU przed użyciem nowych instrukcji.

RTM dodaje trzy nowe instrukcje: XBEGIN, XENDi XABORT. XBEGINI XENDinstrukcje zaznaczyć początek i koniec transakcji kodem regionu; XABORTinstrukcja wyraźnie przerywa transakcję. Niepowodzenie transakcji przekierowuje procesor do ścieżki kodu awaryjnego określonej przez XBEGINinstrukcję, ze statusem przerwania zwróconym w EAXrejestrze.


Pozycja bitu rejestru EAX
Oznaczający
0 Ustaw, jeśli przerwanie spowodowane XABORTinstrukcją.
1 Jeśli jest ustawiony, transakcja może się powieść przy ponownej próbie. Ten bit jest zawsze zerowany, jeśli ustawiony jest bit 0.
2 Ustaw, jeśli inny procesor logiczny spowodował konflikt z adresem pamięci, który był częścią przerwanej transakcji.
3 Ustaw, jeśli wewnętrzny bufor został przepełniony.
4 Ustaw, czy został trafiony punkt przerwania debugowania.
5 Ustaw, jeśli przerwanie nastąpiło podczas wykonywania zagnieżdżonej transakcji.
23:6 Skryty.
31:24 XABORT argument (poprawny tylko, jeśli ustawiony jest bit 0, w przeciwnym razie zarezerwowany).

XTEST instrukcja

TSX/TSX-NI dostarcza nową XTESTinstrukcję, która zwraca, czy procesor wykonuje region transakcyjny. Ta instrukcja jest obsługiwana przez procesor, jeśli obsługuje on HLE, RTM lub oba.

Zawieszenie śledzenia adresu obciążenia TSX

TSX/TSX-NI Suspend Load Address Tracking (TSXLDTRK) to rozszerzenie zestawu instrukcji, które pozwala tymczasowo wyłączyć śledzenie obciążeń z pamięci w sekcji kodu w regionie transakcyjnym. Ta funkcja rozszerza HLE i RTM, a jej obsługę w procesorze należy wykrywać osobno.

TSXLDTRK wprowadza dwie nowe instrukcje XSUSLDTRKi XRESLDTRK, odpowiednio do zawieszania i wznawiania śledzenia adresu obciążenia. Gdy śledzenie jest zawieszone, żadne ładunki z pamięci nie zostaną dodane do zestawu odczytów transakcji. Oznacza to, że o ile te lokalizacje pamięci nie zostały dodane do zestawów do odczytu lub zapisu transakcji poza regionem zawieszenia, zapisy w tych lokalizacjach przez inne wątki nie spowodują przerwania transakcji. Zawieszenie śledzenia adresu obciążenia dla części kodu w regionie transakcyjnym pozwala zmniejszyć ilość pamięci, która musi być śledzona w przypadku konfliktów odczytu i zapisu, a tym samym zwiększyć prawdopodobieństwo pomyślnego zatwierdzenia transakcji.

Realizacja

Specyfikacja Intela TSX/TSX-NI opisuje, w jaki sposób pamięć transakcyjna jest udostępniana programistom, ale nie zawiera szczegółów dotyczących rzeczywistej implementacji pamięci transakcyjnej. Intel określa w swoich podręcznikach dla programistów i optymalizacji, że Haswell utrzymuje zarówno zestawy do odczytu, jak i do zapisu na poziomie szczegółowości linii pamięci podręcznej, śledząc adresy w pamięci podręcznej danych L1 procesora. Firma Intel twierdzi również, że konflikty danych są wykrywane przez protokół spójności pamięci podręcznej .

Pamięć podręczna danych L1 Haswella ma asocjatywność równą ośmiu. Oznacza to, że w tej implementacji wykonanie transakcyjne, które zapisuje w dziewięciu różnych lokalizacjach mapujących do tego samego zestawu pamięci podręcznej, zostanie przerwane. Jednak ze względu na implementacje mikroarchitektoniczne nie oznacza to, że mniejsza liczba dostępów do tego samego zestawu gwarantuje, że nigdy nie zostanie przerwana. Dodatkowo, w konfiguracjach procesorów z technologią Hyper-Threading , pamięć podręczna L1 jest współdzielona przez dwa wątki na tym samym rdzeniu, więc operacje w siostrzanym procesorze logicznym tego samego rdzenia mogą powodować eksmisje.

Niezależne badania wskazują, że pamięć transakcyjna Haswella jest najprawdopodobniej systemem odroczonej aktualizacji wykorzystującym pamięci podręczne na rdzeń dla danych transakcyjnych i punktów kontrolnych rejestru. Innymi słowy, Haswell częściej korzysta z systemu pamięci transakcyjnej opartego na pamięci podręcznej, ponieważ jest to znacznie mniej ryzykowny wybór implementacji. Z drugiej strony, Skylake firmy Intel lub nowszy może łączyć to podejście oparte na pamięci podręcznej z buforem porządkowania pamięci (MOB) w tym samym celu, prawdopodobnie zapewniając wielowersyjną pamięć transakcyjną, która jest bardziej podatna na spekulacyjne wielowątkowość .

Historia i błędy

W sierpniu 2014 r. Intel ogłosił, że w implementacji TSX/TSX-NI w procesorach Haswell, Haswell-E, Haswell-EP i wczesnych Broadwell występuje błąd, który spowodował wyłączenie funkcji TSX/TSX-NI w dotkniętych procesorach za pomocą mikrokodu aktualizacja. Błąd został naprawiony w krokach F-0 procesora Core M-5Y70 Broadwell z obsługą vPro w listopadzie 2014 roku.

Błąd został znaleziony, a następnie zgłoszony podczas pracy dyplomowej w Szkole Inżynierii Elektrycznej i Komputerowej Narodowego Uniwersytetu Technicznego w Atenach .

W październiku 2018 r. Intel ujawnił problem z kolejnością pamięci TSX/TSX-NI wykryty w procesorach Skylake . W wyniku aktualizacji mikrokodu obsługa HLE została wyłączona w dotkniętych procesorach, a transakcje RTM zawsze przerywały się w trybach działania SGX i SMM . Oprogramowanie systemowe musiałoby zaimplementować obejście problemu z porządkowaniem pamięci RTM. W czerwcu 2021 r. firma Intel opublikowała aktualizację mikrokodu, która dodatkowo wyłącza TSX/TSX-NI w różnych modelach procesorów Xeon i Core od Skylake do Coffee Lake i Whiskey Lake, jako środek łagodzący nierzetelne zachowanie licznika wydajności w jednostce monitorowania wydajności (PMU). . Domyślnie, przy zaktualizowanym mikrokodzie, procesor nadal wskazywałby obsługę RTM, ale zawsze przerywał transakcję. Oprogramowanie systemowe jest w stanie wykryć ten tryb pracy i maskować obsługę TSX/TSX-NI z CPUIDinstrukcji, zapobiegając wykryciu TSX/TSX-NI przez aplikacje. Oprogramowanie systemowe może również włączać „tryb nieobsługiwanego rozwoju oprogramowania”, w którym RTM jest w pełni aktywny, ale w tym przypadku korzystanie z RTM może podlegać problemom opisanym wcześniej, dlatego ten tryb nie powinien być włączany w systemach produkcyjnych.

Zgodnie z instrukcją Intel 64 and IA-32 Architectures Optimization Reference Manual z maja 2020 r., tom 1, rozdział 2.5 Usunięto architekturę i funkcje zestawu instrukcji Intel, HLE został usunięty z produktów firmy Intel wydanych w 2019 r. i później. RTM nie jest udokumentowany jako usunięty. Jednak procesory Intel Comet Lake i Ice Lake 10. generacji , które zostały wydane w 2020 roku, nie obsługują TSX/TSX-NI, w tym zarówno HLE, jak i RTM.

W 41 wersji referencyjnej programu Intel Architecture Instruction Set Extensions Programming Reference z października 2020 r. udokumentowano nowe rozszerzenie zestawu instrukcji TSXLDTRK i zaplanowano jego włączenie do nadchodzących procesorów Sapphire Rapids .

Zobacz też

Bibliografia

Dalsza lektura

  • Afek, Y.; Opłata, A.; Morrison, A. (2014). Materiały z sympozjum ACM 2014 nt. Zasad obliczeń rozproszonych - PODC '14 . Udoskonalona programowo eliminacja blokady sprzętowej, s. 212. doi : 10.1145/2611462.2611482 . Numer ISBN 9781450329446. S2CID  16645370 .. Oparte na oprogramowaniu ulepszenia blokowania sprzętowego w Intel TSX.

Zewnętrzne linki