Benchmarks zum Testen eines C- und C ++ - Allokators?

8

Bitte geben Sie Hinweise zu Benchmarks, die zum Testen eines C- und C ++ - Allokators verwendet werden. Benchmarks, die einen der folgenden Aspekte erfüllen, werden berücksichtigt:

  1. Geschwindigkeit
  2. Fragmentierung
  3. Parallelität

Danke!

    
Viet 01.04.2010, 11:59
quelle

3 Antworten

4

Wenn Sie nach einem allgemeinen Zuordner für ein C / C ++ Programm fragen, habe ich dieses Papier gefunden Hoard: Ein skalierbarer Speicherzuordner für Multithread-Anwendungen , der diese Frage berücksichtigt. Dies ist ein Zitat aus diesem Dokument

  

Es gibt noch keine Standard-Suite von   Benchmarks für die Bewertung   Multithread-Allokatoren. Wir wissen davon   keine Benchmarks, die speziell betonen   Multithread-Leistung des Servers   Anwendungen wie Webserver 1 und   Datenbankmanager. Wir haben uns für Benchmarks entschieden   beschrieben in anderen Zeitungen und   sonst veröffentlicht (der Larson   Benchmark von Larson und Krishnan   [22] und der Shbench Benchmark von   MicroQuill, Inc. [26]), zwei   Multithread-Anwendungen, die   Benchmarks (BEMengine [7] und   Barnes-Hütte [1, 2]), und schrieb einige   Microbenchmarks von uns selbst zu betonen   verschiedene Aspekte der Speicherzuordnung   Leistung (threadtest, aktiv-falsch,   passiv-falsch).

Dieses Papier ist irgendwie alt. Allerdings habe ich kürzlich einen Allokator für HP-UX ( MallocNextGen ) gesehen und auch HP kann das nicht stellen Sie sicher, dass es für alle möglichen Anwendungen gut ist. Es sagt:

  

Der neue Allokator ist generell   voraussichtlich die Leistung von verbessern   Anwendungen. Es kann jedoch sein   einige Anwendungen für die   Leistung kann sich verschlechtern. Daher Benutzer   Es wird empfohlen, Benchmarks zu erstellen   Anwendungen mit dem Standardspeicher   Zuweiser in libc und mit der   Zuweiser in libmallocng vor der Verwendung   der neue Allokator in einer Produktion   Umgebung.

Was Geschwindigkeit und Gleichzeitigkeit betrifft, so muss ich aus eigener Erfahrung die Leistung Ihres eigenen Programms messen, um zwei verschiedene Zuweiser zu vergleichen. Wenn wir über Linux sprechen, können Sie LD_PRELOAD verwenden, um verschiedene Zuordner zu laden.

    
Sergei Kurenkov 01.04.2010, 12:23
quelle
6

Ich habe vor einigen Jahren selbst mehrere Allokatoren getestet und meine Erfahrung ist, dass die Ergebnisse alle von der Art des Tests abhängen. Wenn Sie selbst einige Benchmarks schreiben möchten, berücksichtigen Sie die folgenden Situationen:

  • viel Speicher einer einzelnen Größe zuweisen, dann alles freigeben
  • viel Speicher in verschiedenen Größen zuweisen, dann alles freigeben
  • Ordne nur ein paar Speicherblöcke zu, befreie sie und wiederhole diese Schleife mehrere Male (wiederhole sie für gleich große Blöcke und unterschiedlich große Blöcke)
  • Zuweisen von viel Speicher unterschiedlicher Größe, freie Hälfte davon (z. B. die geraden Zuweisungen), dann Zuweisen und Freigeben von Speicher in einer Schleife
  • Verwenden Sie zwei Threads, um Speicher parallel zuzuordnen
  • Verwenden Sie drei, vier, fünf, ... Threads, um Speicher parallel zuzuordnen

Sie werden feststellen, dass die Ergebnisse für jeden Test unterschiedlich sein werden. Zuweiser, die in einer Situation sehr gut sind, können in anderen Situationen schlecht sein.

In der Praxis bedeutet dies, dass es am besten ist, es in einer Live / realistischen Situation in Ihrer Anwendung zu testen.

    
Patrick 01.04.2010 13:59
quelle
5

Sie können nedmalloc herunterladen und versuchen, Ihren Zuordner damit zu vergleichen. Es hat einen Test namens test.c mit dem Quellcode, den Sie entsprechend Ihrem Zuordner neu schreiben können.

    
AraK 01.04.2010 12:21
quelle