Sp2_k20_16_Pentium - Institut für Verteilte Systeme

Werbung
20.
Pentium und Freunde
20.1. Pentium Baureihen & Historie
20.1.1 Der Intel P54C





Einführung 1993.
60 – 200 MHz; Front Side Bus: 50, 60 und 66 MHz.
16 KB Level 1 Cache (8 KB + 8 KB).
Kernspannung 3.3V; ca. 3.3 Mio Transistoren.
Socket 4 (P60, P66); Socket 5 (P75-P133); Socket 7 (P75-P200).
20.1.2 Der Intel Pentium Pro







Einführung 1995.
150 – 200 MHz; Front Side Bus: 60 und 66 MHz.
16 KB Level I Cache (8K + 8K).
256 KB – 1 MB Level II Cache on Chip.
Socket 8; Kernspannung 3.3V.
Transistoren: ~ 5.5 Mio (CPU) + 15.5 – 62Mio (Level 2 Cache).
schlechte 16-Bit Performance.
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
9
20.1.3 Der Intel P55C






Einführung 1997.
133 – 233 MHz (Mobile Tillamock: -300 MHz).
Front Side Bus: 60 und 66 MHz.
32 KB Level 1 Cache (16 KB + 16 KB).
Multi Media Extension MMX.
Socket 7; Kernspannung 2.8V; ca. 4.5 Mio Transistoren.
20.1.4 Der Intel Pentium II
 Einführung 1997; überarbeiteter Pentium Pro.
 32 KB Level 1 Cache (16 KB + 16 KB).
 512 KB Level 2 Cache:
 halber Prozessortakt,
 nicht auf Chip.
 Slot 1.
 Model Klamath: 233 – 333 MHz; Front Side Bus: 66 MHz; Kernspannung 2.8V.
 Model Deschutes: 350 – 500 MHz; Front Side Bus: 100 MHz; Kernspannung 2.0V.
 Beide Modelle ca. 7,5 Mio Transistoren.
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
10
20.1.5 Der Intel Pentium II Xeon




Einführung 1998; Ablösung des Pentium Pro.
400 & 450 MHz; Front Side Bus: 100 MHz.
32 KB Level 1 Cache (16 KB + 16 KB).
512, 1024 und 2048 KB Level 2 Cache:
 voller Prozessortakt,
 nicht auf Chip.
 Slot 2.
 Ca. 7.5 Mio Transistoren; Max. 8 CPUs pro Rechner (Server-Box).
20.1.6 Der Intel Celeron




Einführung 1999.
32 KB Level 1 Cache (16 KB + 16 KB).
Kernspannung 2.0V.
Model Covington:
 266, 300 MHz; FSB: 66 MHz,
 kein Level 2 Cache; Slot 1.
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
11
 Model Mendocino:
 300 – 533 MHz; 128 KB Level 2 Cache on Chip voller Prozessortakt.
 bis 433 MHz als Slot 1 und Sockel 370 danach nur als Sockel 370.
 Model Coppermine:
 566 – 766 MHz; FSB: 66 MHz.
 800 – 1100 MHz; FSB: 100 MHz.
 128 KB Level 2 Cache on Chip voller Prozessortakt.
 Sockel 370 (FCPGA).
 Model Tualatin:
 1000 – 1400 MHz; FSB: 100 MHz.
 256 KB Level 2 Cache on Chip voller Prozessortakt.
 Sockel 370 (FCPGA-2).
 Model Willamette (P4):
 1700, 1800 MHz; FSB: 100 MHz.
 128 KB Level 2 Cache on Chip voller Prozessortakt.
 Sockel 478.
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
12
20.1.7 Der Intel Pentium III








Einführung 1999.
Front Side Bus: 100 und 133 MHz.
32 KB Level 1 Cache (16 KB + 16 KB).
Model Katmai:
 450 – 600 MHz (B = 133 MHz FSB).
 512 KB Level 2 Cache halber Prozessortakt.
 Slot 1; Kernspannung 2.0V; ca. 9.5 Mio Transistoren.
Model Coppermine:
 500 – 1.1 GHz; (E bis 600MHz zur Unterscheidung vom Katmai).
 256 KB Level2 Cache on Chip voller Prozessortakt.
 Slot 1 und FC-PGA; Kernspannung 1.65V.
 ca. 28 Mio Transistoren.
Model Tualatin:
 1.13 – 1.4 GHz; Front Side Bus: 133 MHz.
 256/512 KB Level2 Cache on Chip voller Prozessortakt.
Erweiterungen: Seriennummer & SIMD Befehle (SSE).
Zusätzlich auch Xeon Varianten auf Basis des PIII Kerns.
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
13
20.2.
Intel Pentium 4
20.2.1 Architektur
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
14
20.2.2 Charakteristiken
 Einführung 2000.
 Willamette, Northwood, Gallatin, Prescott, Paxville, Dempsey, Cedar Mill (2006),
 Vielzahl von möglichen Features:











„Extended Memory Technology” (40/48 Bit Adr., 64 Bit Register, “Long Mode”),
„Execute Disable“ erschwert unbefugtes Eindringen in den Rechner,
“Physical Address Extension” (36 Bit physikalische Adressierung),
System Management Mode, Intel Virtualisierungstechnik,
Doppelkernversionen zusätzlich zum „Hyperthreading“,
MMX, ISSE, SSE2, SSE3 Instruktionssatzerweiterung,
„Quad punped“ Frontside Bus bis 266 bzw. 1066 MHz,
65 nm Technologie (2006), Taktfrequenz bis 3,8 GHz,
12 Kbyte Code Cache, 2 Megabyte L2-Cache,
Zählregister zur Leistungsmessung,
Speicherattributregister MTRR.
 Intel Virtualisierungstechnik erlaubt zwischen verschiedenen OS-Umgebungen umzuschalten – unter Kontrolle eines Virtual Machine Monitors.
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
15
 PAE – Physical Adress Extension ( ”Long Mode”):






36 Bit physikalische Adressierung (PG-Flag #31 in CR0, PAE-Flag: #5 in CR4),
mehr als 36 Bit Adressraum mit 2 MB Seiten (Enhanced Legacy PAE-Paging),
Zusätzliche Ebene bei der Speicherabbildung (page-directory-pointer-table),
Einträge in der Seitentabelle sind nun 64 Bits gross (512 pro Seite),
CR3 enthält die 27 Bit Basisadresse für „PDPT“,
Weitere Varianten von Tabellen-Formaten ....
Lineare Adresse
2
9
9
Page directory
CR3 (PDPTR)
Page directory
pointer table
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
12
Page
Page table
24
16
 Quad Pumped Bus:
 Es wird nicht nur mit beiden Flanken
gearbeitet, sondern mit einer zwei „Data
Strobes“ => 4 Transfers pro Taktperiode,
 Betriebsmodus für Front-side Bus ,
 sekundär 2 Speicherkanäle.
 Hyperthreading vs. Dual-Core Architektur:
 Nur der Registersatz wird dupliziert, nicht jedoch die Execution Units,
 Ergibt unter günstigen Bedingungen einen Gewinn von ca. 30 %.
+
+
+
+
+
*
*
*
+
+
?
?
?
+
+
*
*
*
*
*
*
?
?
?
?
?
?
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
17
20.3. AMD Baureihen
20.3.1 K5






Einführung 1995.
75 – 133 MHz.
Front Side Bus: 50, 60 und 66 MHz.
24 KB Level 1 Cache (16 KB + 8 KB).
ca. 4.3 Mio T ransistoren.
Sockel 7.
20.3.2 K6







Einführung 1997.
166 – 300 MHz.
66 MHz FSB (300 MHz auch mit 100 MHz FSB).
64 KB Level 1 Cache (32 KB + 32 KB).
mit MMX.
ca. 8.8 Mio T ransistoren.
Sockel 7.
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
18
20.3.3 K6-2
 Einführung Mai 1998.
 266 – 550 MHz.
 Front Side Bus: 100 MHz FSB.
(266, 300, 366 auch mit 66 MHz FSB).
 64 KB Level 1 Cache (32 KB + 32 KB).
 MMX+ 3DNow!
 Sockel 7; Kernspannung 2.2V.
 ca. 9.3 Mio T ransistoren.
20.3.4 K6-III







Einführung November 1998.
400 – 550 MHz.
Front Side Bus: 66, 100 MHz.
64 KB Level 1 Cache (32 KB + 32 KB).
256 KB Level 2 Cache on Chip.
Cache auf Board wird als Level 3 Cache verwendet (bis 2 MB).
Sockel 7; ca. 21 Mio T ransistoren.
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
19
20.3.5 Athlon Classic (K7)





Einführung 1999.
500 – 1000 MHz.
Front Side Bus: 200 MHz (2 * 100 MHz).
128 KB Level 1 Cache (64 KB + 64 KB).
512 KB Level 2:
 bis 700 MHz 1/2 Prozessortakt,
 750 – 850 MHz 2/5 Prozessortakt,
 900 – 1000 MHz 1/3 Prozessortakt.
 Enhanced 3DNow! (zusätzliche Befehle) und MMX.
 Slot A; ca. 22 Mio T ransistoren.
20.3.6 Athlon Thunderbird





Einführung 2000.
650 – 1400 MHz; Front Side Bus: 200 & 266 MHz.
128 KB Level 1 Cache.
256 KB Level 2 Cache on Chip.
Socket A + Slot A.
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
20
20.3.7 Athlon XP









Einführung 2000.
1.33 – 2.133 GHz.
Front Side Bus: 266 MHz (2 * 133 Mhz).
128 KB Level 1 Cache.
256 KB Level 2 Cache on Chip.
Socket A; ca. 37 Mio T ransistoren.
Unterstützt 3DNow! und Intel SSE (nicht SSE 2).
Modelle: Palomino & Thoroughbred (je nach Takfrequenz) .
Athlon MP Varianten für Multiprozessor-Systeme.
20.3.8 Duron






Einführung 2000.
600 – 1300 MHz, 200 MHz FSB (2 * 100 MHz).
128 KB Level 1 Cache.
64 KB Level 2 Cache on Chip.
Socket A; ca. 25 Mio T ransistoren.
Modelle: Spitfire (- 900 MHz); Morgan (- 1.3 GHz und SSE).
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
21
20.4. Architekturmerkmale am Beispiel des Pentium III
20.4.1 Überblick
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
22
20.4.2 Fetch & Decode Unit
 Lädt und dekodiert Intel Makrobefehle.
 Diese werden in einfachere sogenannte Ops zerlegt.
 Instruction-Prefetcher lädt immer 16-Byte alignierte Blöcke.
 Eine Maschineninstruktion wird in eine oder mehrere Ops aufgeteilt:
 1 Operation: or eax, 0x4711
 Wert odern.
 2 Operationen: mov[es:0x10], eax
 berechnen der Zieladresse.
 speichern.
 4 Operationen: add [es:0x10], eax
 berechnen der Zieladresse
 laden von [es:0x10]
 addieren
 speichern
 komplexe Instruktionen benötigen mehr als 4 Operationen: enter, leave
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
23
 Pro Takt können bis zu 3 Maschineninstruktionen dekodiert werden:
 insgesamt 3 Decodierer.
 Decoder 0 kann Maschinenbefehle mit bis zu 4 Ops dekodieren.
 Decoder 1 & 2 können nur Maschinenbefehle mit 1 Op dekodieren
 Optimal Befehle im 4:1:1 Schema anordnen.
 Operationen werden im Instruktionspool abgelegt.
Sprungvorhersage
 Ziel: Instruktionspool sollte immer gefüllt sein
mov eax, a
mov ebx, b
cmp a,b
jle @else
mov ecx, 0
jmp @end
@else: mov ecx, 1
@end:
 Problem: welcher Befehl soll als nächstes dekodiert werden: mov ecx,0
oder mov ecx,1?
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
24
 Lösung: Prozessor decodiert Instruktionen „spekulativ“.
 Realisierung im Pentium II & III & IV:
 Branch Target Buffer (BTB) mit 512 Einträgen mit folgendem Aufbau:
 Adresse des Sprungbefehls,
 Sprung ausgeführt: Ja oder Nein (4-Bit Zähler).
 Jeder Sprung (ausgeführt oder nicht) wird vermerkt.
 Statische und dynamische Sprungvorhersage.
 Statische Sprungvorhersage:
 Falls Sprung nicht in BTB bekannt ist.
 Sprungentscheidung nach folgenden Regeln:
 Bedingte Rückwärtssprünge: Sprung ausführen.
 Bedingte Vorwärtssprünge: Sprung nicht ausführen.
 Unbedingte Sprünge: Sprung ausführen.
 Strafzyklen (Penalties):
 Keine: es wird korrekt vorhergesagt, dass der Sprung nicht ausgeführt wird.
 Ca. 5 Zyklen: es wird korrekt vorhergesagt, dass der Sprung ausgeführt wird.
 Mind. 10 Zyklen (bis zu 15 Zyklen!): es wurde falsch vorhergesagt.
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
25
 Dynamische Sprungvorhersage (Beispiel):
Befehlsdekodierer
00: mov eax, a
01: mov ebx, b
02: cmp eax, ebx
03: jle 6
04: mov c,0
05: jmp 7
06: mov c,1
Sprungvorhersage
Was machen?
Springen
oder
nicht springen?
..
..
..
03: letztes mal gesprungen
..
..
..
Springen!
 Strafzyklen (Penalties):
 Keine: es wird korrekt vorhergesagt, dass der Sprung nicht ausgeführt wird.
 1 Zyklus: es wird korrekt vorhergesagt, dass der Sprung ausgeführt wird.
 Mind. 9 Zyklen (bis zu 26 Zyklen!): es wurde falsch vorhergesagt.
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
26
20.4.3 Dispatch & Execute Unit
 Die fünf Ausführungseinheiten:
Load-Einheit
Load-Einheit
(16-Einträge)
Port-2
Store-AddressStore
-AdressCalculation-Einheit
Calculation-Einheit
(12-Einträge)
Port-3
Store-Einheit
Store-Einheit
(12-Einträge)
Port-4
Reservierungsstatio
Reservierungsstation
n
Port-1
Port-0
IntegerPipeline
Integer
Pipeline
MMX
MMXPipeline
Pipeline
IntegerPipeline
Integer
Pipeline
FPU Pipeline
SIMD
SIMDPipeline
Pipeline
Adressberechnun
Adressberechnung
g
(LEA)
MMX Pipeline
SIMD Pipeline
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
27
 In einem Takt können bis zu 5 Ops verteilt werden (nicht jeder Befehl
kann auf jedem Port ausgeführt werden).
 Umsortieren von unab. Instruktionen  Ziel: maximale Parallelität.
 Latenz und Durchsatz (ausgewählte Beispiele für Port-0):
Einheit
Latenz (in Taktyklen) Durchsatz (pro Taktzyklus)
Integer ALU, LEA & Shift
1
1
Integer Multiplikation
4
1
FADD
3
1
FMUL
5
0,5
FDIV (single precision/double/extended)
18/32/38
Keine Pipeline
20.4.4 Retirement Unit
 Damit die Semantik erhalten bleibt, müssen die Ergebnisse der Ops in
Programmreihenfolge sichtbar werden.
 Abzuschließende Ops werden im sogenannten Reorder Buffer abgelegt.
 Bis zu 3 Ops können pro Takt abgeschlossen werden.
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
28
20.5. Spezielle Prozessorinstruktionen
20.5.1 CPU bestimmen
 Nicht jeder Befehl ist auf jeder CPU vorhanden.
 Identifikation der CPU mittels der Instruktion CPUID
 CPUID:




Eingeführt bei den „späten“ 80486.
Befehl vorhanden, wenn in EFLAG Bit 21 gesetzt, sonst ungültige Instruktion.
Auf Cyrix und NexGen Prozessoren muß der Befehl erst aktiviert werden.
Eingabeparameter (Standard-Level) für CPUID immer in EAX:
EAX
0
1
2
3
Bedeutung
get maximum supported standard level and vendor ID string
get processor type/family/model/stepping and feature flags
get processor configuration descriptors
get processor serial number
 Ausführliche Beschreibung: http://www.sandpile.org/ia32/cpuid.htm
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
29
 Beispiel: Identifikation der CPU
xor eax,eax
cpuid
// 0 = get max. supported standard level & vendor ID string
Ergebnis:
EAX-Eingabe Information
0
EAX: maximaler Parameter von CPUID
(1: für Pentium; 2: ab Pentium Pro)
EBX: Genu
EBX: Auth
EDX: ineI
EDX: enti
ECX: ntel
ECX: cAMD
1
EAX[3:0]
Stepping ID
EAX[7:4]
Model
EAX[11:8]
Family
EAX[13:12]
Processor type
EAX[31:12]
Reserved
EBX
Reserved
ECX
Reserved
EDX
Feature flags
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
30
 Die Feature-Flags (Standard-Level 1):



















XMM: Streaming SIMD Erweiterung unterstützt
MMX: MMX Erweiterungen unterstützt
PSN: Prozessor Seriennummer vorhanden
PSE36: Unterstützt paging mit 4MB Seiten und 36-Bit phys. Adr.
CMOV: Condtional Move vorhanden
MCA: Machine Check Architecture
PGE: TLB nicht komplett löschen, beim Schreiben von CR3
MTRR: Memory Type Range Registers vorhanden
SEP: SYSENTER und SYSEXIT vorhanden
APIC: Advanced Programmable Interrupt Controller
CX8: CMPXCHG8B Befehl vorhanden
MCE: Machine Check Exception
PAE: physikalische Adressen > 32 Bit unterstützt
MSR: Model Spezifische Register vorhanden
TSC: Time Stamp Counter vorhanden
PSE: Prozessor unterstützt 4 MByte Kacheln
DE: I/O Debug Erweiterungen
VME: Virtual 80x86 Erweiterungen
FPU: Intel 387 Fließkomma Einheit im Prozessor
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
24
16
8
0
XMM
FXSR
MMX
PN
PSE
FGPAT
CMOV
MCA
PGE
MTRR
SEP
APIC
CX8
MCE
PAE
MSR
TSC
PSE
DE
VME
FPU
31
20.5.2 CMOV
 Konditionaler Move Befehl:
 zur Vermeidung von Sprungbefehlen.
 Anleihe bei der IA-64 Architektur (Itanium).
 Format der Bedingung wie bei bedingten Sprüngen.
; Beispiel eax = Max(eax, ebx)
; mit Sprung
cmp eax, ebx
jge cont ; springe wenn eax>=ebx
mov eax, ebx
cont:
; Jetzt mit cmove
cmp eax, ebx
cmovl eax, ebx ; führe Befehl aus, wenn eax<ebx
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
32
20.5.3 Exkurs: Floating Point Unit
 Ursprünglich als Koprozessor 80x87; On-Chip ab 80486, 1989.
 Kurzer Überblick:
 8 Fließkommaregister (80-Bit) stackbasiert und 7 Datentypen.
 Register können nur relativ zu TopOfStack (TOS) adressiert werden.
 Operationen werden grundsätzlich auf st(0) ausgeführt, wobei der zweite Operand
jedes andere Datenregister oder eine Speicherstelle sein kann.
 2 spezielle Register (jeweils 16-Bit):
 Status: Exception Flags; Kontrolle: Abschneiden, Rundeverfahren, ...
 Tag: je 2-Bit pro Datenregister (00=valid; 01=zero; 10=special; 11=empty).
 Beispiel: result = (1.9+0.9)*9.8
1.9
FLD 1.9
ST(0)
2.8
FADD 0.9
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
ST(0)
2.8
9.8
FLD 9.8
ST(1)
ST(0)
27.44
FMULP
ST(0)
TOS
FSTP result
33
20.5.4 MMX - Multi Media eXtension (1996)
 Die MMX Technologie besteht aus:
 8 MMX Register (MM0-MM7) zu je 64-Bit.
 4 MMX Datentypen:
 Packed Bytes (8x8 Bits):
 Packed Word (4x16 Bits):
56
48
48
 Packed Double Word (2x32 Bits):
40
32
24
32
32
16
16
8
0
0
0
0

QuadWord (1x64 Bits):
 57 MMX Befehle: Basierend auf dem SIMD Prinzip
 nützlich für Multimedia (z.B. mehrere Pixel parallel Aufhellen)
 Gewinn nur bei angepassten Anwendungen.
 FPU kann nicht parallel verwendet werden.
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
34
 MMX Befehle „überdecken“ die Fließkommaregister:
 Jeder MMX-Befehl setzt das FP-Tag auf „valid“ = 00.
 Die obersten 16-Bit des FP-Registers werden auf „1“ gesetzt.
 EMMS gibt Register frei (FP-Tag = 11  „empty“).
FPU-Register
FP-Tag
0 0
79
63
111...1
111...1
63
MMX7
0
0
111...1
111...1
111...1
TOS
111...1
111...1
111...1
MMX0
MMX-Register
 Umschalten der Register:
 Beliebiger MMX-Befehl aktiviert MMX-Register.
 Der MMX-Befehl EMMS reaktiviert die FPU-Register.
 Jede Umschaltung löscht den Inhalt sämtlicher Register  teuer.
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
35
20.5.5 Kleine Übersicht der MMX Befehle:
 Addieren/Subtrahieren:
(anwendbar
auf8 Byte,
Word, Dword & Qword)
56
48
40
32
24
16
0
MM0
12
+
123
+
37
+
48
+
19
+
230
+
3
+
95
+
MM1
45
84
72
38
95
16
23
11
246
26
106
PADDB MM0, MM1
MM0
57
207
109
86
114
 Addieren/Subtrahieren mit Sättigung (Saturation):
 Kein Wraparound bei Addition und Subtraktion,
 Anwendbar auf signed/unsigned Byte, Word, Dword,
 PADDUSB (Überlauf=255);
PADDSB
(Überlauf=127/-128).
56
48
40
32
24
16
8
0
MM0
120
+
123
+
37
+
48
+
19
+
230
+
3
+
95
+
MM1
210
84
255
192
100
26
23
11
255
26
106
PADDUSB MM0, MM1
MM0
255
207
255
240
119
 Multiplikation mit nachfolgender Addition (z.B. Skalarprodukt):
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
36
56
MM0
MM1
48
40
32
24
16
8
0
12
37
19
95
*
*
*
*
45
72
95
11
+
+
PMADDWD MM0, MM1
MM0
3204
2850
 Konvertierung von Dword nach Word mit Sättigung:
 (anwendbar auf signed/unsigned Dword)
MM1
PACKSSDW MM0, MM1
2232
MM0
-343232
2232
MM0
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
-32768
1000121
32767
-16123
-16123
37
 Vergleichsoperationen (z.B. Maske berechnen):
 Anwendbar auf Byte, Word und Dword,
 „=“ und „>“ (basierend auf signed),
56
48
40
32
24
16
8
0
MM0
120
=
123
=
37
=
48
=
19
=
230
=
3
=
95
=
MM1
210
123
37
192
19
230
3
11
-1
0
PCMPEQB MM0, MM1
MM0

0
-1
-1
0
-1
-1
Ergebnis: 0: falsch –1: richtig
 Shiftoperationen:
 Anwendbar auf Word, DWord und Qword,
 Link und Rechts (arithmetisch oder logisch).
MM0
1011000010110100 0001100001100010 1001101001000010 0000000000000001
<<3
<<3
<<3
<<3
PSLLW MM0, 3
MM0
1000010110100000 1100001100010000 1101001000010000 0000000000001000
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
38
20.5.6 Chroma Keying als Beispiel:
 Annahme: Bild mit 16 Bit Farbtiefe (HiColor).
 Berechnung der Maske von „Bluebox“.
+
Bluebox
MM0
=
Hintergrund
(HG)
Ergebnis
Bluebox[0]
Bluebox[1]
Bluebox[2]
Bluebox[3]
=
=
=
=
blue
blue
blue
blue
MM1
PCMPEQW MM0, MM1
MM0
0x0000
0xFFFF
0xFFFF
0x0000
0xFFFF
0x0000
0x0000
0xFFFF
 Ergebnis:
 Wo blaue Pixel: 0xFFFF (weißer Bereich nebenan)
 sonst 0x0000 (schwarzer Bereich nebenan)
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
39
 Hintergrund und Vordergrund ausschneiden:
MM2
Hintergrund[
0]
Hintergrund[
1]
Hintergrund[
2]
Hintergrund[
3]
Mask[0]
Mask[1]
Mask[2]
Mask[3]
and
MM1
and
and
and
PAND MM2, MM1
MM2
Hintergrund[
0]
0x0000
0x0000
Hintergrund[
3]
MM0
Bluebox[0]
Bluebox[1]
Bluebox[2]
Bluebox[3]
and
and
and
and
Mask[0]
Mask[1]
Mask[2]
Mask[3]
MM1
PANDN MM0, MM1
MM0
0x0000
Bluebox[1]
Bluebox[2]
0x0000
 Mischen der Bildteile:
MM0
MM2
Hintergrund[
0]
or
0x0000
0x0000
or
or
Hintergrund[
3]
or
0x0000
Bluebox[1]
Bluebox[1]
0x0000
POR MM0, MM2
MM0
Hintergrund[
0]
Bluebox[1]
Bluebox[2]
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
Hintergrund[
3]
40
 Meßergebnisse in Taktzyklen: Athlon 1 GHz
450000
400000
350000
300000
250000
16-Bit
32-Bit
200000
150000
100000
50000
0
64x64 (o. MMX)
64x64 (MMX)
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
128x128 (o. MMX)
128x128 (MMX)
41
Code-Beispiel (für 32-Bit Farbtiefe):
void chroma32(int bluebox, int background, int image, int imSize, int color) {
_asm {movd
mm0, color
// load bluebox color
movq
mm3, mm0
// store in mm3
psllq
mm3, 32
// shift to upper word
por
mm3, mm0
// blue box color for lower word also
mov
esi, bluebox
// ptr. to source buffer
mov
edi, background
// ptr. to background buffer
mov
edx, image
// ptr. to result buffer
mov
ebx, imSize
// image size in bytes
xor
eax, eax
// clear eax – running index
theLoop:
movq
mm1, mm3
// load blue from mm3
movq
mm0, [esi+eax]
// load two source image pixels
pcmpeqd
mm1, mm0
// calc mask, -1 if equal
movq
mm2, [edi+eax]
// load two background pixels
pand
mm2, mm1
// cut background - into mm1
pandn
mm1, mm0
// cut image - into mm2
por
mm1, mm2
// mix
movq
[edx+eax], mm1
// store two pixels in result buffer
add
eax, 8
// next two pixels
cmp
eax, ebx
// end reached?
jne
theLoop
// if not loop again
emms
}}
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
42
20.5.7 3DNow!
 Einführung mit AMD K6-2 CPU, 1998.
 Weiterentwicklung von MMX durch AMD:




3DNow! unterstützt auch Gleitkomma (wichtig für 3D-Spiele).
MMX Register werden weiter verwendet.
Insgesamt 21 zusätzliche SIMD-Befehle.
FEMMS: schnelle Version von EMMS (F=Fast).
 Neuer Datentyp für MMX Register:
packed single precision floating point
 Prefetching:
32
32-BitFließkomma
Fließkomma
32-Bit
32-BitFließkomma
Fließkomma
32-Bit
 Befehle: PREFETCH adr
 Idee: Multimedia-Anwendungen besitzen reguläre Speicherzugriffsmuster
 Daten voraussschauend Laden.
 Cacheline, welche die Adresse adr enthält in den Level-1 Cache laden (es werden
noch keine Access-Bits gesetzt).
 Befehl wird nicht ausgeführt, wenn adr ungültig ist (z.B. Segment nicht vorhanden;
Seite nicht vorhanden...).
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
43
20.5.8 Code-Beispiel: 3D Vektor-Addition
typedef struct _D3DVECTOR { float x,y,z; } D3DVECTOR;
void add_vect3Dnow(D3DVECTOR *r, const D3DVECTOR *a, const D3DVECTOR *b) {
_asm { mov
eax,a
// addr of a
mov
edx,b
// addr of b
movq
mm0,[eax]
// load x,y of a
movd
mm1,[eax+8]
// load z of a
mov
eax,r
// load addr of r
movd
mm2,[edx+8]
// load z of b
pfadd
mm0,[edx]
// a.x+b.x and a.y+b.y
pfadd
mm1,mm2
// a.z+b.z
movq
[eax],mm0
// store r.x & r.y
movd
[eax+8],mm1
// store r.z
femms
}}
 Enhanced 3DNow!:
 24 zusätzliche Befehle, ab Athlon Classic, 2000.
 Memory Streaming: direkter Speicherzugriff (ohne Write-Allocate im Cache).
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
44
 Vorteile:
 Einfacher Datenaustausch zwischen MMX und 3DNow! (kein Umschalten nötig).
 Schiebebefehle & Bitoperationen von MMX Reg. können ebenfalls verwendet
werden.
 Nachteil: FPU kann nicht gleichzeitig verwendet werden.
 Gewinn auch hier nur bei angepassten Anwendungen.
20.5.9 ISSE / SSE
 ISSE = Internet Streaming SIMD Extension.
 Eingeführt mit Pentium III, 1999.
 MMX weiterhin vorhanden.
 70 neue Befehle – Kategorien:
 SIMD-Floating Point,
 New Media Instructions,
 Streaming Memory Instructions.
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
45
 SSE 2: Eingeführt 2000, mit Pentium 4 (144 zusätzliche Befehle).
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
46
20.5.10
Neue SSE2-Register:
 8 separate 128-Bit Register XMM0-XMM7 (für 4 Float oder 2 Double Werte):
96
32-Bit Fließkomma
64
32-Bit Fließkomma
32
32-Bit Fließkomma
0
32-Bit Fließkomma
 Vorteil: Parallele Verwendung von Streaming SIMD und MMX oder FPU möglich
 Nachteil: Betriebssysteme müssen angepasst werden, da SIMD Register (128-Bit) bei
Taskwechsel gesichert werden müssen.
 Ausgewählte Befehle: SSE & 3DNow!
3DNow!
PF2ID
PFCMPEQ
PFCMPGE
PFCMPGT
PFMAX
PFMIN
PFMUL
PFSUB
PI2FD
SSE
CVTPS2PI
CMPEQPS equal
CMPNLTPS greater than or equal
CMPNLEPS greater than
MAXPS
MINPS
MULPS
SUBPS
CVTPI2PS
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
Erklärung
packed float nach packed integer
MMx=MMy
MMx>=MMy
MMx>MMy
Maximum
Minimum
Multiplikation
Subtraktion
Integer nach float
47
Codebeispiele:
void add(float *a, float *b, float *c, int bytes) {
_asm {
mov
eax, a
mov
ebx, b
mov
edx, c
xor
ecx, ecx
label:
fld
[dword ptr eax+ecx]
fadd
[dword ptr ebx+ecx]
fstp
[dword ptr edx+ecx]
add
ecx, 4
cmp
ecx, bytes
jne
label
}}
// c[x] = a[x]+b[x];
// der nächste Wert
void addSSE(float *a, float *b, float *c, int bytes) {
_asm{
mov
eax, a
mov
ebx, b
mov
edx, c
xor
ecx, ecx
label:
movaps xmm0, [eax+ecx]
addps
xmm0, [ebx+ecx]
movaps [eax+ecx], xmm0
add
ecx, 16
// die nächsten 4 Werte
cmp
ecx, bytes
jne
label
}}
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
48
void add3Dnow(float *a, float *b, float *c, int bytes) {
_asm{
mov
eax, a
mov
ebx, b
mov
edx, c
xor
ecx, ecx
label:
movq
mm0, [eax+ecx]
pfadd
mm0, [ebx+ecx]
movq
[edx+ecx], mm0
add
ecx, 8
// die nächsten 2 Werte
cmp
ecx, bytes
jne
label
femms
}}
 Messergebnisse:
6000
5000
4000
3000
Taktzyklen
2000
1000
0
AMD K6II ohne
3DNow!
AMD K6II mit
3DNow!
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
PIII ohne ISSE
PIII mit ISSE
49
Streaming Store
 Bei Intel ab Pentium III und bei AMD ab Athlon.
 Speicherbefehle, die am Cache vorbei in den Speicher schreiben:
 MOVNTQ: 64-Bits direkt in Speicher kopieren (Cache auslassen).
 MASKMOVQ: wie MOVNTQ, aber mit Byte-Maske.
 MOVNTPS: wie MOVNTQ, aber 128-Bit.
 Eigenschaften:
 Abgeschwächte Konsistenz  evt. andere Reihenfolge von Schreiboperationen.
 Write Combining Strategie wird angewandt:
 Bündeln von aufeinanderfolgenden Schreibzugriffe auf dieselbe Cache-Zeile.
 Aufeinanderfolgende Schreibzugriffe an dieselbe Speicherposition werden durch
die letzte Schreiboperation ersetzt.
 Explizites „Spülen“ der „WC-Puffer“ durch SFENCE Instruktion (Store Fence).
 Vorteile:
 Steigerung des Durchsatzes bei Schreibzugriffen.
 Inhalte im L1 und L2 Cache werden belassen.
 Nachteil: Schwächeres Konsistenzmodell  SFENCE explizit nötig!
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
50
 Beispiel: Initialisierung eines Speicherblockes:
 Standardansatz:
void clearStd(int adr, int bytes) {
_asm { xor
ebx, ebx
mov
eax, adr
xor
ecx, ecx
mov
edx, bytes
label:
mov
[eax+ecx],ebx
add
ecx, 4
cmp
ecx, edx
jne
label
}
}
// clear ebx
// load address
// clear counter
// bytes
// write ’0’
// next location
// done?
// if not, loop
 STOS (Store String – Bytefolge schreiben):
void clearSTOS(int addr, int bytes) {
bytes=bytes>>2;
_asm { mov
edi,addr
xor
eax,eax
mov
ecx,bytes
cld
rep
stos dword ptr es:[edi]
}
}
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
// number of 32-Bit accesses
// destination address
// byte to write  0
// number of iterations
// ascending addresses
// destination location
51
 Streaming:
void clearStreaming(int addr, int bytes) {
_asm{ pxor
mm0, mm0
mov
eax, addr
xor
ecx, ecx
mov
edx, bytes
label:
movntq [eax+ecx],mm0
add
ecx, 8
cmp
ecx, edx
jne
label
sfence
emms
}
}
// clear mm0
// destination address
// init counter
// number of bytes
// write 8 Byte
// next 8 Byte
// end?
// if not, loop again
// sync.
// free MMX registers
 Messergebnisse Pentium III 800EB:
800
600
400
200
0
MB/s
Standard
STOS
Streaming
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
52
Prefetching
 Speicherzugriff langsam  Daten explizit vorab in Cache laden.
 Befehle (erzeugen keine Exceptions oder Seitenfehler):




PREFETCHNTA address: Cacheline address nur in Level 1 Cache laden.
PREFETCHT0 address: Cacheline address in alle Cache-Level laden.
PREFETCHT1 address: Cacheline address in Cache-Level 2+ laden.
PREFETCHT2 address: Cacheline address nur in Cach- Level 3 laden.
 Beispiel: Kopieren eines Speicherblockes:
 Nächste Daten in L1-Cache laden (PREFETCHNTA),
 Kopieren: Lesen mit MOVAPS, Schreiben mit MOVNTPS (jeweils 16-Byte).
20.5.11 Seriennummer
 In CPU eingebaut  eindeutige Identifikation
 Gedacht zum Beispiel für Online-Shopping.
 Über BIOS oder Software deaktivierbar  heimlich auslesbar (c’t 5/99)!
 Wegen Proteste mit Pentium 4 wieder abgeschafft.
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
53
DR7
BT
BS
BD
0
1
1
1
1
1
1
1
1
B3
B2
B1
B0
0
R/W0
0
0
GD
0
0
Res
GE
LE
G3
L3
G2
L2
G1
L1
G0
L0
Reserviert (1)
LEN0
R/W1
LEN1
R/W2
LEN2
R/W3
LEN3
20.5.12 Test- und Debugwerkzeuge
 Register:
DR6
Reserviert
DR5
Reserviert
DR4
Breakpoint Lineare Adresse 3
DR3
Breakpoint Lineare Adresse 2
DR2
Breakpoint Lineare Adresse 1
DR1
Breakpoint Lineare Adresse 0
DR0
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
54
 Überwachung des Programmablaufs:
 Software-Haltepunkt durch Breakpoint-Exception (INT 3),
 Hardware-Haltepunkte (Debug-Exceptions, INT 1), wenn:
 Lese/Schreibzugriff auf Byte, Word, Dword.
 Lese/Schreibzugriff auf Byte, Word, Dword im I/O-Adreßraum.
 Modifikation der Debug Kontroll Register.
 Bei jeder Instruktion im Single Step Mode.
 Das Debug Kontroll Register DR7:
 GD: 1: Debug-Exception bei Zugriff auf die Register DR0-DR7
(Bit wird bei einer Debug-Exception automatisch gelöscht).
 LE, GE: Sollten immer auf den Wert 1 gesetzt werden (historische Register).
 Das Debug Status Register DR6:





B0..B3: Bedingung für BreakpointX ist erfüllt, auch wenn Lx & Gx auf 0 gesetzt sind.
BD: Es wurde versucht die Debug Register zu modifizieren.
BS: Breakpoint durch Single Step Mode.
BT: Task Switch zu einer Task mit gesetzten T-Bit im TSS-Register.
Bem.: Der Exception Handler sollte jedes Mal das Status Register löschen.
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
55
 Ablauf (hier am Beispiel von DR1):
 Lineare Adresse in DR1 eintragen.
 LEN1 (Anzahl der zu überwachenden Bytes):
 00: 1 Byte
 01: 2 Byte
 10: undefiniert
 11: 4 Byte
 RW1 (Breakpoint-Bedingung):
 00: Ausführung (LEN1 immer 00!)
 01: Adresse wird modifiziert
 10: I/O Zugriff (DE Flag in CR4 setzen!)
 11: Adresse wird gelesen oder modifiziert (Ausführung der Adresse erzeugt
keine Unterbrechung).
 L1: (enable local Breakpoint):
 Breakpoint-Bedingung gilt nur für die aktuelle Task.
 Bit wird bei Task-Wechsel automatisch gelöscht.
 G1: (enable global Breakpoint):
 Breakpoint-Bedingung gilt für alle Tasks.
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
56
 Beispiel:
 Lese/Schreib-Breakpoint auf Adressbereich 0x12000-0x12003
mov eax, 0x12000
mov dr0, eax
mov eax, dr7
or eax, 0xF0303
// Bits:
//
L0=1, G0=1, LE=1, GE=1, LEN=11 (4-Byte)
RW0=11 (Breakpoint-Bedingung)
mov dr7, eax
 Exception 1 wird ausgelöst, wenn auf 0x12000-0x12003 zugegriffen wird.
 Exception wird ausgelöst, bevor der Befehl ausgeführt wird
 Nach Beendigung des Exceptionhandlers ist das Resume Flag gesetzt (RF).
 Ablauf der Exception
 Der auszuführende Code:
EIP 0x7FFFD add eax,2
0x80000 mov ds:[0x12000],eax
0x80006 xor eax,eax
 Exception 1 wird ausgelöst:
 ResumeFlag gesetzt im Stackframe von der CPU.
 Exception Handler wird abgearbeitet.
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
...
ESP
EFLAGS| ResumeFlag
0x00000010 (CS)
0x00080000 (EIP)
57
 Exception Handler wird beendet (ResumeFlag ist nun gesetzt):
0x90000 ....
0x900A0 IRET
 mov Instruktion wird nun abgearbeitet:
EIP 0x7FFFD add eax,2
0x80000 mov ds:[0x12000],eax
0x80006 xor eax,eax
ResumeFlag gesetzt,
Breakpoint wird
unterdrückt
 ResumeFlag wird automatisch gelöscht:
0x7FFFD add eax,2
EIP 0x80000 mov ds:[0x12000],eax
0x80006 xor eax,eax
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
58
20.5.13 Model Specific Registers
 Modell-Spezifische Register (MSR):
 große Unterschiede zwischen Intel und AMD.
 gleiche Register an unterschiedliche Offsets.
 Nachfolgend am Beispiel des Pentium III.
 Zugriff auf MSR im (Ring-0) mit den Instruktionen RDMSR & WRMSR
(ECX: Eingabe  Nummer des zu lesenden/schreibenden Registers)
mov ecx, 0x10
rdmsr
xor edx,edx
xor eax,eax
mov ecx, 0xC1
wrmsr
// 0x10 = 64-Bit TimeStampCounter
// Ergebnis in Registern EDX:EAX
// Performance Counter0 (löschen)
 Auslesen einiger Daten im Ring-3 möglich:
 RDTSC: TimeStampCounter auslesen.
 RDPMC: Performance Counter (Nummer in ECX) lesen.
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
59
Performance Messungen
 Üblicher Ansatz: 1) Stoppuhr an. 2) Programm starten. 3) Stoppuhr aus.
 Liefert keine detaillierten Aussagen – Defizite:
 Effektivität der Sprungvorhersage,
 Cache Misses; TLB Misses, ...
 Messungen mithilfe von MSRs liefern detaillierte Daten:
 Zwei programmierbare 40-Bit Zähler: PerfCtr0 (0xC1) und PerfCtr1 (0xC2).
 Zwei Event-Selektoren: PerfEvtSel0 (0x185) und PerfEvtSel1 (0x186): können zwei
verschiedene Ereignisse unabhängig voneinander zählen.
Event
Logik
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
PerfEvtSel1
PerfCtr1
PerfEvtSel0
PerfCtr0
60
Messen mit einem Pentium Pro (oder höher)
 Performance Event Selectors (PerfEvtSel):
16
INT
PC
E
OS
USR
Counter Mask
INV
EN
24
8
Unit Mask
0
Event




Unit Mask & Event: definieren zusammen das zu überwachende Ereignis.
USR (User Mode) gesetzt: Event nur in Ring 1-3 zählen.
OS (Operating System) gesetzt: Event nur im Ring-0 berücksichtigen.
E (Edge Detect) 0: Dauer eines Events; 1: #Events;
 PC (PIN Control):
0: Überlauf  Pin PM0/PM1 für einen Takt setzten.
1: Inkrementieren  Pin PM0/PM1 für einen Takt setzten.
 INT gesetzt: Zählerüberlauf  Exception über den lokalen APIC erzeugen.
 EN: (Enable Counters) Zähler aktivieren/deaktivieren (nur in PerfEvtSel0 vorhanden).
 INV: invertieren des Counter Mask Ergebnisses
 Counter Mask:
INV=0: Event nur zählen, wenn pro Takt mind. Counter Mask Events auftreten.
INV=1: Event nur zählen wenn pro Takt weniger als Counter Mask Events auftreten.
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
61
 Ausgewählte Ereignisse:
Event UnitMask
0x81 0x00
0x85 0x00
0xC7 0x00
0xC5
0xC0
0xC2
0xD0
0x12
0x00
0x00
0x00
0x00
0x00
Name
IFU_IFETCH_MISS
Beschreibung
Number of instruction fetch misses. All instruction fetches
that do not hit the IFU (i.e., that produce memory requests).
ITLB_MISS
Number of ITLB misses.
CYCLES_INT_PENDING_AND_MASKED Number of processor cycles for which interrupts are disabled
and interrupts are pending.
BR_MISS_PRED_RETIRED
Number of mispredicted branches retired.
INST_RETIRED
Number of instructions retired.
UOPS_RETIRED
Number of UOPs retired.
INST_DECODED
Number of instructions decoded.
MUL
Number of multiplies (integer and FPU).
 Messungen beim Start von Plurix:





IFU_IFETCH_MISS: 85.459
ITLB_MISS: 345.739
MUL: 3.184.744
INST_DECODED: 1.621.438.040
INST_RETIRED: 1.603.020.143
 INST_DECODED - INST_RETIRED = 18.417.897 (umsonst dekodiert).
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
62
20.6. Caches im Pentium III
20.6.1 Caching Strategien
 Uncachable:




Lese/Schreibzugriffe werden nicht gecached.
Schreiboperationen schreiben sofort in den (Haupt)-Speicher.
Nur sinnvoll für Memory Mapped Geräte.
Sehr langsam  jeder Zugriff über Bus.
 Write Combining:
 Lese/Schreibzugriffe werden nicht gecached.
 Schreiboperationen werden in CPU-internen Puffern (4 Stück bei Pentium III)
verzögert und unter Umständen zusammengefasst (Umsortierung ist möglich).
 Weniger Busverkehr, aber evt. explizites Spülen (SFENCE) erforderlich!
 Cache Kohärenzprotokoll (MESI) wird nicht benutzt.
 Geeignet zum Beispiel für Video-Framebuffer: hauptsächlich wird geschrieben
(Lesen selten) und die Schreibreihenfolge ist unkritisch.
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
63
 Write-Through:





Lese/Schreibzugriffe werden gecached.
Read Miss: Cache-Line wird gefüllt.
Write Miss: Cache-Line wird nicht gefüllt.  Durchschreiben in Hauptspeicher.
Write Hit: Schreiben in Cache-Line und Durchschreiben in Hauptspeicher.
Beispielsweise sinnvoll für Linear Frame Buffer.
 Write-Back:





Lese/Schreibzugriffe werden gecached.
Read Miss: Cache-Line wird gefüllt, dann wird aus dem Cache gelesen.
Write Miss: Cache-Line wird gefüllt, dann wird in den Cache geschrieben.
Write Hit: Schreiben nur in Cache-Line.
Write-Back: bei Bedarf wird Cache-Line als Burst-Transaktion in Hauptspeicher
zurückgeschrieben.
 Cache Strategie mit der besten Performance!
 Write-Protected:
 Read Miss: Cache-Line wird gefüllt, dann wird aus dem Cache gelesen.
 Schreibzugriffe gehen direkt auf den Bus und spülen die entsprechende Cache-Line
auf allen Prozessoren.
 Interessant für Code-Segmente.
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
64
20.6.2 Konfigurieren des L2-Caches
 vor Pentium Pro / Athlon über den Chipsatz:
 Prozessor signalisiert Caching für diese Adresse erwünscht bzw. nicht erwünscht.
 Bzw. Chipsatz signalisiert, diese Adresse nicht cachen.
 Ab Pentium Pro: über das MSR Register (0x11E):
Bits
63:26
25
24
23
22:20
Bezeichnung
reserviert
Cache bus fraction (read only)
reserviert
L2 Hardware Disable (read only)
L2 Physical Address Range support (read only)
111:64GB 110:32GB 101:16GB 100: 8 GB 011:4 GB 010:2GB 001:1 GB 000:512 MB
reserviert
18
Cache State error checking enable (read/write)
17:13 Cache size per bank (read/write)
00001:256 Kbytes 00010:512 Kbytes 00100:1024 Kbytes 01000:2048 Kbytes 10000:4096 Kbytes
12:11 Number of L2 banks (read only)
10:9 L2 Associativity (read only) 00: Direct Mapped 01: 2 Way 01: 4 Way 11: reserviert
8
L2 Enabled (read/write)
7
CRTN Parity Check Enable (read/write)
6
Address Parity Check Enable (read/write)
5
ECC Check Enable (read/write)
4:1
L2 Cache Latency (read/write)
0
L2 Configured (read/write)
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
65
20.6.3 Konfiguration des L1-Caches
 Es gilt: Deaktivierung des L1-Caches  L2-Cache ebenfalls deaktiviert.
 Steuerung über das CR0 Register:
 CacheDisabled (Bit 30): 0: Cache(s) aktiviert;
1: Cache(s) deaktiviert;
 NotWriteBack (Bit 29): 0: Write-Back Strategie; 1: Write-Through Strategie;
 Vorsicht beim Abschalten des Caches während laufendem Betrieb:
 wenn Bit 30 im laufenden Betrieb gesetzt wird:
 Cacheinhalt bleibt erhalten,
 Cache wird nicht mehr neu gefüllt.
 Caching deaktivieren:
 Bit30 = 1; Bit 29=1;
 WBINVD: Zurückschreiben der modifizierten Cache-Lines und nachfolgender
Invalidierung.
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
66
20.6.4 Cache Konfiguration auf Seitenebene
 Adressierung im Protected Mode (Wiederholung):
GDTR
Segmentselektor
Globale
Deskriptortabelle
Virtuelle 32 Bit Adresse
Segment-Basis
+
Lineare Adresse
Page
Directory
CR3
Page
DeskriptorDeskriptorPage
tabelle
Deskriptortabelle
Tables
tabelle
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
+
Physikalische Adresse !
67
Cache Konfiguration (bei Paging):
 CR0:
 CD: Cache Disable (falls CD=0  WBINVD).
 NW: Not Write-Through (Standard-Schreibverhalten).
 CR3:




PCD: Page-level Cache Disable
PWT: Page-level Write Through
Definieren Caching nur für Page Directory.
PCD & PWT werden ignoriert, falls CD=1 in CR0.
 Page Directory / Table:
 PCD & PWT werden ignoriert, falls CD=1 in CR0.
 G: Globale enable (ab Pentium 6)
 nur wirksam, wenn PGE in CR4 gesetzt!
 CR4:
 PGE: Page Global Enable (ab Pentium 6).
 Seiten mit G-Bit als global markierbar
 werden bei Taskwechsel nicht aus TLB gespült.
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
CR0
C N
D W
CR3
P P
C W
D T
Page Directory / Table
P P
G C W
D T
CR4
P
G
E
68
20.6.5 Verfeinerung mit Memory Type Range Registern
 Memory Type Range Register (MTRR):





Auch auf Athlon verfügbar (kompatibel).
Bereits durch BIOS initialisiert.
96 Speichertypen für phys. Speicherbereiche.
88 feste Bereiche (0-1MB).
8 variable Bereiche.
4 GB
Physikalischer
Speicher
 Zugriff über MSR Register:
 11 fixed MTRR Register.
 8 variable MTRR Register.
 1 Default Register.
1 MB
 Speichertypen (8-Bit):






0: Uncachable
1: Write-Combining
4: Write-Through
5: Write-Protected
6: Write Back
(2,3,7..255: reserviert)
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
default MTRR
max. 8 variablen MTTRs
fixed MTRRs
69
 Default Speichertyp über MTRRdefType Register:
 MSR Register 0x2FF (64-Bit).
 E (MTRRs Enable):
 0: alle MTRRs deaktiviert
 phys. Adressraum nicht gecashed.
 1: MTRRs aktiviert
 FE (Fixed MTRRs Enabled):
 0: fixed MTTRs deaktiviert
 Bereich kann durch var. MTTRs gemappt werden.
 1: fixed MTTRs aktiviert
64
reserviert
E
FE
reserviert
7
type
0
 Fixed MTRR Registers:
 MSR Register ab 0x250 (je 64-Bit).
 MTRRfix64K_00000: 8x64KB (512-Kbyte).
 MTRRfix16K_80000 & MTRRfix16K_A0000: 2x128KB,
unterteilt in 16KB Unterbereiche.
 MTRRfix4K_xxxxx (8 Stück): 8x32KB,
unterteilt in 4KB Unterbereiche.
11
10
4 GB
1 MB
E
256 KB
256 KB
0xBFFFF
0x7FFFF
512 KB
0
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
70
20.6.6 Variable MTRR Registers:
 MSR Register ab 0x200 (je 64-Bit).
 Variable Bereiche dürfen sich nur ausnahmsweise überlappen.
 PhysBase & PhysMask auf 4KB aligniert - untere 12-Bits abgeschnitten.
 MTRRphysBase 0 .. 7:
 definiert die Basisadresse und Speichertyp
64
reserviert
35
12 7
PhysBase
0
Type
 MTRRphysMask 0..7:
 enthält Maske (verwendet zur Bestimmung des Bereichs).
 V-Bit (Valid): aktivieren und deaktivieren von Register-Paar.
64
35
12 10
0
reserviert PhysMask V reserviert
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
71
20.6.7 Adreßberechnung:
 Maske wählen für: PhysBase AND PhysMask = Adresse AND PhysMask
 z.B. Bereich von $0020 0000 bis $002F FFFF;
 z.B. Bereich von $0330 0000 bis $0401 FFFF;
 Warum ?
 Maske verlangt nur eine einfache boolesche Und-Operation,
 Längenfeld bzw. Limitregister würde langsamere, komplexere Arithmetik benötigen.
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
72
20.6.8 Page Attribute Table (PAT)
 Erweiterung des Seitentabellen-Formats (ab Pentium 6).
 Neue Caching-Strategien (Write-Protected & Write-Combining) sind
damit auch auf der virtuellen Seitenebene programmierbar.
 MTRRs:




Definieren Speichertypen für physikalische Adreßbereiche.
Haben besondere Anforderungen an Länge und Alignment von Bereichen.
Prädestiniert für statische Bereiche, aber weniger geeignet für dynamische Ranges.
Letztere sind für Anwendungen relevant, die dynamisch Speicher anfordern
 Betriebssystem erhält mit PAT die notwendige Flexibilität
 Falls PAT unterstützt wird, so ist PAT immer aktiv (nicht abschaltbar).
 PAT ist in MSR bei 0x277 untergebracht:
 PAx (3-Bit) definiert
je einen Speichertyp.
63
7
PA7
PA6
...
PA1
2
0
PA0
reserviert
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
73
 Zugriff auf PAT in Page Table Einträgen:
 durch 3-Bits: PATi, PCD, PWT
 PATi (PAT index Bit-7) bei 4KB Seiten (zuvor reserviert).
 Ermöglicht Zugriff auf weitere Caching Strategien (z.B. Write-Combining).
 PAT-Indizes und Speichertypen nach Reset:
PATi PCD PWT PAT Entry Memory Type (at Reset)
0
0
0
0
WB
0
0
1
1
WT
0
1
0
2
UC
0
1
1
3
UC
1
0
0
4
WB
1
0
1
5
WT
1
1
0
6
UC
1
1
1
7
UC
 Rückwärtskompatibilität:




PAT immer aktiv und nicht abschaltbar.
PATi=0  nur PCD und PWT bestimmen PAT Eintrag.
Hiermit sind nur die ersten vier Einträge der PAT ansprechbar.
Deren Speichertypen entsprechen genau der traditionellen PCD & PWT Semantik.
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
74
Vorrang der Cache Konfigurationen
 Bei Überlappung von MTRR und Page-Level Caching gilt immer das
strengere Konsistenzmodell.
 Ausgewählte Beispiele:
PAT Speichertyp
UC
WB
WB
WB
MTRR Speichertyp
WB,WT
WT
WP
UC
Effektiver Speichertyp
UC_PAGE
WT
WP
UC_MTRR
 UC_PAGE: das UC Attribut resultiert aus einer Seitentabelle und die CPUs müssen
ihre Caches durch Cache-Snooping abgleichen, da die Daten im Cache sein könnten
(evtl. unter anderer logischer Adresse auf dieselbe physikalische Kachel abgebildet).
 UC_MTRR: UC Attribut resultiert aus MTRRs  CPUs kein Cache-Snooping
notwendig, da die Daten niemals gecached wurden.
 Achtung: wenn MTRRs durch E-Bit (in MTRRDefType Register) abgeschaltet werden, so ist der gesamte Speicher vom Typ UC!
Systemprogrammierung II, Winter 2005/06, © Verteilte Systeme Ulm, P. Schulthess
75
Herunterladen