DCBZ

Sklaventreiber
DBoxBaer
Senior Member
Beiträge: 255
Registriert: Donnerstag 25. August 2005, 11:34

DCBZ

Beitrag von DBoxBaer »

Moin!

Da ich mich zum Thema IDMA durch diverse Newsgroup Postings gewuehlt habe, ist mir ein verwandtes Thema aufgefallen, das ich hier mal einwerfen wollte:

Und zwar geht es um das Thema memcpy Performance. Ein idealer Memcpy wuerde ja Burst Reads von der Quelle machen und Burst Writes ans Ziel, wenigstens fuer Cached RAM.
Die einfachste Form kopiert im Source einfach Worte von der Quelle ans Ziel, das hat aber den Nachteil das die CPU nicht weiss was sie da gerade macht und daher, wenn an eine neue Adresse geschrieben wird, dieses Cachen will, und dafuer die Cacheline von dort erstmal liest. Also einen Burst Read von der Zieladresse macht.
Eine nette Loesung ist eine Anweisung, die dem Cache mitteilt, das die Cacheline nicht gelesen werden muss. Der PPC hat dafuer eine Anweisung, dcbz, die eine Cacheline loescht, also mit Nullen beschreibt, also auch nicht gelesen werden muss.
Soweit so gut, leider findet man im Linux Kernel eine Menge Stellen, in denen diese Anweisung fuer 8xx Prozessoren auskommentiert ist:
Den Grund findet man (nur?) in den newsgroups: Motorola hat bei den 8xx Prozessoren was verbockt, die Anweisung generiert je nach Prozessor Revision diversen Unsinn, leider schoen versteckt.
Allerdings macht sie ein einfaches Memcpy mal eben 33% schneller...

Meine Frage waere nun:
Haben wir mit dem 823 in der DBox2 dieses Problem
a) nie
b) immer
c) manchmal

b) ist klar. c) waere auch doof, weil gleiche Images dann nicht mehr ueberall stabil funktionieren.

Da ich beim IDE Projekt die Kopierroutinen gerne maximal optimieren wuerde, waere ich natuerlich an dieser Instruktion interessiert, allerdings eben nur, wenn sie keine Probleme bei uns macht. Wenn dem so waere, kann man aber auch die glibc und den Kernel damit beschleunigen!

Vielleicht gibt es ja Vorschlaege/Ideen, wie man das herausbekommen koennte?

Ciao,

DboxBaer

Edit:
Den Dreher habe ich korrigiert... Frag mich gerade ob ich vielleicht sogar nach dem falschen Begriff gesucht habe :-)
Zuletzt geändert von DBoxBaer am Sonntag 8. Oktober 2006, 21:02, insgesamt 1-mal geändert.
... und der Rest ist dann Software (TM)
just_me
Einsteiger
Einsteiger
Beiträge: 123
Registriert: Montag 28. November 2005, 11:31

Beitrag von just_me »

hoppla, da ist wohl ein Buchstabendreher dabei: wahrscheinlich müsste es DCBZ (Data Cache Block Set to Zero) anstatt DBCZ heissen.
Carjay
Developer
Beiträge: 122
Registriert: Sonntag 23. April 2006, 12:37

Beitrag von Carjay »

Das ist vermutlich die Erklärung warum Init bzw. die Busybox sofort abstürzt, sobald man in der glibc die eigentlich ja korrekte "ppc"-beschleunigte memcpy-Funktion nutzt.

Ich habe mir das nie angesehen, wollte aber immer schon wissen was da schiefläuft.

Sieht also nicht gut aus. Ein Test würde wohl Klarheit bringen.