Moin,
ich möchte die Größe von Strukturen an bestimmten Grenzen ausrichten. Hintergrund sind Alignment, Fähgikeiten von CPU, OS, Speichermanagern und Datenträgern für möglichst Hardware-nahe x86_64 Programmierung unter Linux und Windows 7.
Soweit habe ich das schon zusammengetragen. Für weitere Hinweise wäre ich dankbar.
Größe, Grund, Hinweise:
8 Byte, CPU x86_64, native 64 Bit Integer Datentypen verwenden, Empfehlung sowohl von AMD als auch Intel
64 Byte, CPU ab Pentium IV, Größe Cache-Zeile, kleinste Einheit im Cache, Multicore Programmierung, Seite 182
256 Bytes, Pascal, Größe des "Killerdatentypen" shortstring
512 Byte, Festplatte, Sektorgröße, siehe auch 4 KB
4 KiB, CPU x86_64, Page Size Memmory Management, Linux-Treiber, Seite 233
4 KiB, Festplatte, Sektorgröße ab ca. Jahr 2010 für Platten ab 2 TB
8 KiB, Windows 7, angeblich eine Größe aus der Speicherverwaltung, Details und Quelle kenne ich nicht
64 KiB, veraltet, Segmentgrenze alter Turbo Pascal, MSDOS Real Mode Anwendungen
128 KiB, Linux, größter über C kmalloc reservierbarer Speicher. Linux-Treiber, Seite 232
1 MiB, was war das noch?
2 MiB, was war das noch?
4 MiB, Linux, größter über das Buddy-System anforderbarer Speicher (1024 Pages, x86-Begrenzung), Linux-Treiber, Seite 233
32 MiB, typische Größe Festplattencache
64 MiB, typische Größe Festplattencache
2 GiB, Grenze für viele 32 Bit-Strukturen
4 GiB, 32 Bit-Grenze
Festplattenpuffer würde ich bei 1 MB ansiedeln bzw. bei Vielfachen von 4 KB bei kleineren Dateien.
Bei Multithreading sollten nicht mehrere Kerne auf dieselbe Cache-Zeile zugreifen, wenn sie beschrieben wird. Andernfalls bricht die Performance um den Faktor 100 ein. Quelle: Multicore Programmierung, Seite 183
Quellen:
Linux-Treiber, 3. Auflage: http://www.amazon.de/Linux-Treiber-entw ... 3898646963" onclick="window.open(this.href);return false;
Multicore Programmierung, 1. Auflage: http://www.amazon.de/Multi-Core-Program ... 3939084700" onclick="window.open(this.href);return false;
Gezielte Strukturgrößen für x86_64 CPU, RAM, Festplatte, OS
-
turbo
- Lazarusforum e. V.
- Beiträge: 101
- Registriert: Mo 6. Feb 2012, 17:20
- OS, Lazarus, FPC: ubuntu 10.10, L 0.9.28.2, FPC 2.4.0
- CPU-Target: x86_64
- Wohnort: Oldenburg (Oldb)
Gezielte Strukturgrößen für x86_64 CPU, RAM, Festplatte, OS
Zuletzt geändert von turbo am Mo 10. Sep 2012, 20:03, insgesamt 1-mal geändert.
Liebe Grüße
turbo
turbo
-
mschnell
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Gezielte Strukturgrößen für x86_64 CPU, RAM, Festplatte, OS
Das ist etwas komplizierter. Einerseits gibt es (z.B.) einen eigenen First Level Cache, für jeden einzelnen Kern und einen Second Level Cache für alle Kerne eines Chips. Und was bei mehreren Chips passiert hängt vom Motherboard ab.turbo hat geschrieben:Bei Multithreading sollten nicht mehrere Kerne auf dieselbe Cache-Zeile zugreifen.
Solange alle nur lesen und keine "lock" Befehle verwenden, passiert auch nichts besonderes.
Wenn einer schreibt müssen die Caches synchronisiert werden. Da kann es zu wilden Aktionen der Hardware kommen, wenn dieselbe RAM-Zelle auch in einem anderen Cache steht. Das kann eine CPU aufhalten, muss aber nicht.
Ganz schlimm sind "atomische" lock-Befehle. Da muss sichergestellt werden, dass alle, die diese Zelle im Cache haben, nicht dazwischenfunken. Das kann dauern.
-Michael
-
turbo
- Lazarusforum e. V.
- Beiträge: 101
- Registriert: Mo 6. Feb 2012, 17:20
- OS, Lazarus, FPC: ubuntu 10.10, L 0.9.28.2, FPC 2.4.0
- CPU-Target: x86_64
- Wohnort: Oldenburg (Oldb)
Re: Gezielte Strukturgrößen für x86_64 CPU, RAM, Festplatte, OS
hast recht, war unklar ausgesdrückt, habe jetzt ", wenn sie beschrieben wird" ergänzt
Liebe Grüße
turbo
turbo