Transaktionsminne: Vad det är och integration via Intel TSX

Transaktionellt minne

En bra del av kraften i våra datorer är baserad på arbetsfördelningen, där flera delar delar exekveringen av en del av koden för att arbeta med den. Men ibland finns det konflikter i tillgången till data och instruktioner som blir ett prestandaproblem. Ett sätt att fixa det är transaktionsminne.

Ett av de största problemen med multicore CPU system som våra datorer använder är att de bygger på Von Neumann-modellen, det vill säga att det bara finns ett delat minne. När antalet exekveringsenheter, kärnor, trådar och andra element som fungerar parallellt i en CPU ökar. Fler och fler konflikter skapas mellan dem. Inte bara för åtkomst till data utan också för informationen i de olika minnesadresserna och därmed värdet på de variabler som används av programmen. Det finns många metoder för att undvika dessa konflikter, en av dem är transaktionsminne, som vi kommer att beskriva i den här artikeln.

En introduktion till problemet

Cerrojos

När du skriver ett program kodas det i en serie instruktioner som uppenbarligen körs i följd. Men redan med parallelliteten mellan instruktioner med en enda kärna mitt i körningen kan olika exekveringsenheter komma in. Till detta måste vi ta hänsyn till att exekveringen i ordning tillför den komplexitet att tillgång till minne och data vid körning sker på ett oroligt sätt.

När det finns ett stort antal förfrågningar, slutar det med att skapa en strid om att få åtkomst till samma minne. Detta gör att förfrågningar fördröjs längre och längre, vilket ökar minnets latens med CPU på vissa instruktioner och påverkar bandbredd. För detta finns det mekanismer som undviker dessa konflikter i minnesåtkomst så mycket som möjligt, på ett sådant sätt att processerna får åtkomst till minne från ordnat minne. Detta undviker konflikter när du ändrar data i hierarkin, samt minskar konfliktproblem och får därmed åtkomstlatens.

Det enklaste sättet att uppnå detta är genom lås, som är delar av koden där vi markerar att de inte behöver exekveras samtidigt av olika trådar i CPU: n. Det vill säga att endast en kärna i den kan vara ansvarig för denna del av koden. Så vi har gjort ett lås till resten av kärnorna och resten kommer bara att kunna gå in i körningen när instruktionen som avslutar låset har uppnåtts. Vilket kommer att hända när den del av koden som är isolerad för alla kärnor utom en har slutförts.

Vad är transaktionsminne?

Código binario färg

En metod för att undvika problemen som beskrivs i föregående avsnitt är att använda transaktionsminne. Vilket inte är en typ av minne eller lagring, så vi pratar inte om en ren hårdvara. Dess ursprung är i databasernas transaktioner, det är en typ av instruktioner som utförs i Load-Store-enheterna.

Transaktionssystemet i en processor fungerar enligt följande:

  1. En kopia av den del av minnet som flera kärnor vill komma åt skapas, en för varje instans.
  2. Varje instans ändrar sin privata kopia oberoende av resten av de privata kopiorna.
  3. Om en data har modifierats i en privat kopia och inte i resten kopieras modifieringen också i resten av de privata kopiorna.
  4. Om två instanser ändrar samma data samtidigt och det skapar en inkonsekvens i data raderas båda privata kopiorna. och de privata kopiorna av resten kopieras

Den fjärde punkten är viktig, eftersom det är i den delen där det blir klart att det är nödvändigt att den delen av koden serieras. Detta innebär att resten av instanserna slutar att ändra sina privata kopior och ändringarna görs av endast en av instanserna. När det slutar kopieras ändringarna till resten av de privata kopiorna. När den del av koden som är markerad som transaktion redan har körts och alla privata kopior innehåller samma information kopieras resultatet till motsvarande cachelinjer och minnesadresser.

Transaktionella minnessystem, Intel TSX

Memoria Transaccional hårdvara

Förkortningen TSX, Transaktionella synkroniseringstillägg, hänvisar till en serie ytterligare instruktioner till x86 ISA, som är avsedda att lägga till transaktionsminnesstöd till Intel CPU: er. Därför är det en serie instruktioner och mekanismer som är associerade med dem som gör det möjligt att avgränsa specifika delar av koden som transaktionella och för Intel-CPU: n att genomföra den process som vi har diskuterat i den tidigare processen. Men i det här fallet är Intel-implementeringen lite mer komplex. Eftersom det finns en konflikt mellan två data, som vi har sett tidigare, avbryts hela processen av en av de pågående instanserna.

Dess implementering i hårdvara uppnås genom att lägga till en ny typ av cache som kallas transaktionscache där de olika operationerna utförs på olika data. Tänk på att det som transaktionsminnet söker är att minska konflikter vid åtkomst till minne. Även om cacheminnet stöder en större mängd förfrågningar än RAM i allmänhet är dessa också begränsade och särskilt på de nivåer som ligger längst bort från kärnorna. Allt detta kombineras med användningen av interna minnen och privata register som fungerar som stöd för privata kopior som utförs av de olika kärnorna.

Intel TSX-instruktionerna är inte en komplex uppsättning, vi har å ena sidan XBEGIN-instruktionen som markerar oss när en transaktionsdel av minnet börjar, XEND-instruktionen som markerar slutet och XABORT, som tjänar till att markera en utgång från processen när en exceptionell situation uppstår.

Slutet på Intel TSX-instruktioner?

Avbryt Intel TSX

Dagens CPU-styrenheter är i själva verket fullblåsta mikrokontroller, vilket innebär att sättet att avkoda instruktioner och listan över instruktioner kan uppdateras. Intel gjorde den första implementeringen på Haswell-arkitekturen och den har hittills varit inom Intel-processorer. Eftersom den nyligen har inaktiverats via firmware på Intels egna sjätte, sjunde och åttonde generationens kärnor.

Ibland utför Intel fjärruppdateringar av sina processorer, som utförs via Intel Management Engine som vi har på vår dator utan att vi vet det. De är vanligtvis inte vanliga men kan inkludera optimeringar för genomförandet av vissa instruktioner eller till och med eliminering av stöd för andra. Eliminering av Intel TSX i Intel Core beror på att det med de senaste ändringarna av styrenhetens interna mikrokod innebär en konflikt i programvarans funktion, vilket innebär att processorn inte fungerar som den ska.

Men den verkliga anledningen är att Intel TSX tillåter skadlig kod att köras under radaren för klassiska säkerhetssystem, särskilt det som påverkar operativsystemet. Eftersom privata kopior inte motsvarar användarens miljö eller operativsystem. Så det är fortfarande ett problem som liknar spekulativt utförande.