Multithreading-tauglicher Allocator für Tru64/OSF1 5.1b



  • Hallo zusammen,

    ich suche einen multithread-tauglichen Allocator für Tru64. Momentan besteht das Problem, dass eine normale Singlethread-Anwendung wenn sie mit Multithread-Support kompiliert wird einen Performance-Einbruch von bis zu 50% hat. Das passiert unabhängig vom Compiler (gcc3.4.5, gcc4.0.3, kcc4.0f).

    Profiling hat gezeigt, dass das Problem im new/malloc begraben liegt. Unter SunOS 5.8 hatte ich das selbe Problem - allerdings kann man dort wenn man libmtmalloc dazu linkt, eine multithread-fähige Speicherverwaltung bekommen (Sun bezeichnet das normale malloc für Multithread-Anwendungen selbst als "unsuitable"), die u.a. auch versucht false-sharing zu vermeiden.

    Leider habe ich bis jetzt kein Pendant für Tru64 gefunden. In malloc(3) stehen ein paar mystische Variablen um das Verhalten von malloc zu verbessern, ein wirklicher Performance-Knaller ist das aber nicht (immernoch abfallende Leistung mit zunehmender Anzahl Threads).

    Hat jemand Erfahrungen in diesem Bereich oder ein paar Tipps parat? Eine Allocator-Bibliothek sollte übrigens zulassen, dass sie auch kommerziell verwendet werden darf, ohne das Programm unter die GPL zu zwingen.

    Vielen Dank im Voraus! 🙂



  • http://goog-perftools.sourceforge.net/ weiß nur nicht ob der mit Tru64 funktioniert.



  • Danke. Leider funktioniert das ganze nur auf i386 bzw x64. Wir haben hier allerdings eine DEC Alpha Maschine mit (ich muss lügen) EV5 Prozessoren. 😞



  • hmm, vielleicht kannst du den Allocator aus der dietlibc oä nehmen. Der sollte zumindest für Alpha funktionieren und eigentlich portabel sein.

    (btw. bist du sicher, dass die Google-Perf-Tools nur auf x86 funktionieren?)



  • Ja, ich habe versucht die Google-Perf-Tools zu bauen, darauf hin stößt man sofort auf einen Build-Fehler. Im entsprechenden Header gibt's ifdefs für x86 und x86-64 und eine Error-Direktive für den Rest. Das brutale Ändern der ifdefs kompiliert dann leider auch nicht, zumal ich dann vermutlich an den gcc gebunden wäre, wir allerdings produktiv KAI C++ einsetzen. Mit der libunwind würde ich vielleicht noch weiterkommen, aber die gibt es auch nicht für Alpha.

    Die dietlibc kommt leider nicht in Frage, da sie unter der GPL steht. 😞 Da die Entwicklung nunmal kommerziell ist. Da kann ich nichts machen. (dafür muss es aber auch nicht unbedingt OpenSource/Freeware sein und kann auch was kosten) Für den Hoard-Allocator, der ja einen recht guten Ruf hat, gibt's leider auch keinen Tru64-Port.


Anmelden zum Antworten