Testen und Benchmarking von Mutex-Implementierungen

12

Wie der Titel sagt: Wie testen und bewerten Sie verschiedene Implementierungen von Mutexen in c ++ richtig?

Im Grunde habe ich meine eigene std :: mutex-ähnliche Klasse für ein Projekt geschrieben, das auf einem 2-Kern-System (armv7) läuft, mit dem Ziel, den Overhead im unbestrittenen Fall zu minimieren. Jetzt überlege ich, besagten Mutex an mehreren Stellen und auch an verschiedenen Architekturen zu verwenden, aber bevor ich das tue, möchte ich das sicherstellen

  • es ist tatsächlich richtig
  • Es gibt keine pathologischen Fälle, in denen es viel schlechter abschneidet als ein Standard-std :: mutex.

Natürlich habe ich ein paar grundlegende Unit-Tests und Micro-Benchmarks geschrieben und alles scheint zu funktionieren, aber im Multithread-Code "scheint zu funktionieren" gibt mir keinen großen Komfort.

  • Gibt es also etablierte statische oder dynamische Analysetechniken?
  • Was sind häufige Fallstricke beim Schreiben von Komponententests für Mutex-Klassen?
  • Was sind typische Randfälle, auf die man (in Bezug auf die Leistung) achten sollte?

Ich verwende nur Standardbibliothekstypen für die Implementierung, die nicht sequentiell konsistente Lade- und Speicheroperationen für Atomics umfassen. Ich bin jedoch hauptsächlich an implementierungsunabhängigen Ratschlägen interessiert, da ich das gleiche Testkabel auch für andere Implementierungen verwenden möchte.

MikeMB
quelle
2
Ich weiß, dass es nicht erforderlich ist, aber ich würde mich freuen, wenn Downvoter zu dem Problem mit dieser Frage Stellung nehmen würden. Ich bin neu bei SE und mit den Besonderheiten dieser Seite nicht ganz vertraut.
MikeMB
3
Nicht der Down-Voter, aber ich werde sagen, dass diese Seite besonders schlecht für anonyme Down-Votes zu absolut guten Fragen ist. Es fühlt sich für mich so an, als würden viele Leute aufgrund von "religiösen" Gründen abstimmen. Eine Möglichkeit ist jedoch, dass Sie nach Empfehlungen für Tools fragen, die meines Erachtens hier verpönt sind. Aber das ist nur eine Vermutung. Und viele Leute haben solche Tools in anderen Fragen besprochen. Machen Sie daraus, was Sie wollen.
user1118321
4
Schauen Sie sich diesen Meta-Post mit dem Titel "Downvoting" an, da wir dem Ansatz oder der Logik des Fragenden nicht zustimmen.
user1118321
@ user1118321: Dieser Meta-Post passt nicht zu dieser Frage, da IMHO keine fehlerhafte Annahme in dieser Frage vorliegt. Zwei der 3 Stimmen, die ich derzeit sehe, verwenden jedoch den vordefinierten Schließungsgrund für "Ressourcenanforderung von Drittanbietern". MikeMB, Sie können versuchen, Ihre Frage zu bearbeiten und diese Teile daraus zu entfernen. In der aktuellen Form könnte die Community sie jedoch auch schließen, weil sie zu umfangreich ist. Wenn Sie den Fokus der Frage einschränken und gezielt fragen, was Sie testen möchten und was Sie bisher versucht haben, können Sie die Überlebenschance Ihrer Frage erhöhen.
Doc Brown
Ein Problem bei dieser Frage ist, dass "Fragen, bei denen wir nach Tools, Bibliotheken, Programmiersprachen, Ressourcen (einschließlich Büchern, Blogs, Tutorials und Beispielen) oder Projekten suchen oder diese empfehlen müssen, hier nicht zum Thema gehören, da sie zu Meinungen führen wird keinen bleibenden Wert für andere haben. "
David Hammen

Antworten:

1

Das Problem ist komplex:

Einige Ursachen für Komplexität sind:

  • Wie viele Kontextwechsel stattfinden: Dies ist sehr wichtig, abhängig von der Plattform, auf der diese Tests ausgeführt werden. Einige Plattformen meistern dies besser als andere
  • Sind die Funktionen, in denen die Mutexe getestet werden, inline oder nicht? Das heißt, funktioniert der Mutex nur in gut optimiertem oder optimierbarem Code?
  • Sind diese Mutexe für die Cache-Lokalität ausgelegt? Werden Cache-Ausfälle die Leistung erheblich beeinträchtigen oder mehr Kontextwechsel verursachen? vor und nach der Eingabe des Mutex.
  • Verursacht der Mutex selbst einen Verlust der Cache-Lokalität? dh es werden Mutex-Zustandsdaten dynamisch zugeordnet.
  • Funktionieren diese Mutexe gut, wenn Kontextwechsel im Mutex enthalten sind? zB io, malloc etc.
  • Wird der Mutex eine gute Leistung erbringen, wenn die Kernel-Zeit in der dynamischen Speicherzuweisung und Freigabe von Mutex.ie enthalten ist?
  • Hält die Leistung, wenn sie in VMs ausgeführt wird?
  • Ist die Zerstörung oder der Aufbau des Mutex teuer, dh die Zustandsdaten befinden sich im dynamischen Speicher
Christiaan Pretorius
quelle
1
Ich bin mir nicht sicher, ob ich mit dem Bau- / Zerstörungsteil einverstanden bin. Wenn ein Programm ständig Mutexe erstellt und zerstört, stimmt (imho) etwas nicht mit dem Designdesign. Aber sonst danke für die Hinweise.
MikeMB
-1

Ihre Idee ist sehr interessant: ein Compliance-Benchmark, gegen den eine Mutex-Implementierung getestet werden könnte.

Leider gibt es meines Erachtens keinen allgemein bekannten Compliance-Benchmark für Mutex-Implementierungen. Ich vermute, Sie haben das sehr interessante Problem, einen Vorschlag für einen solchen Compliance-Benchmark zu erstellen.

Und da Sie an der Erstellung einer Benchmark-Implementierung beteiligt waren, sind Sie der richtige Mann.

Wenn Sie mir einen Vorschlag machen, könnten Sie diese Recherche vielleicht mit dem POSIX-Standard für Threads auf einer Seite und einigen Studien der theoretischen Literatur zur gleichzeitigen Verarbeitung wie CSP oder zur Kommunikation sequenzieller Prozesse beginnen. Diese Art von Artikeln befasst sich normalerweise mit den klassischen Problemen, die gleichzeitig auftreten, wie die Dining Philosophers.

Eine Implementierung könnte ein interessanter Bestandteil Ihres Compliance-Benchmarks sein, denke ich.

Hilton Fernandes
quelle
3
Ich habe Sie nicht abgelehnt, aber dies scheint keine meiner Fragen zu beantworten.
MikeMB
Danke, dass du nicht abstimmst. Und entschuldigen Sie, dass Sie Ihre Fragen nicht beantwortet haben. Würde es Ihnen etwas ausmachen, wenn ich Sie frage, ob Sie darüber nachdenken, einen Compliance-Benchmark für Mutexe zu erstellen?
Hilton Fernandes
Unwahrscheinlich. Und selbst wenn ich der einzige Standard bin, der mich interessiert, ist der c ++ - Standard (obwohl dies in Bezug auf Mutexe das Gleiche sein könnte wie Posix)
MikeMB
Um meine vorherige Aussage zu begründen: Wenn ich eine gute Testsuite für mein eigenes Mutex entwickeln sollte, werde ich es höchstwahrscheinlich als Open Source anbieten, aber ich bezweifle sehr, dass es die Qualität hat oder vollständig genug ist, um ein tatsächliches zu werden "Compliance" -Benchmark - das könnte ohnehin besser durch statische Analyse gehandhabt werden.
MikeMB
Ich stimme Ihnen zu, dass es keine gute Testsuite für Mutex-Primitive gibt. Ich nehme an, es sollte aus drei verschiedenen Quellen stammen: der Theorie der gleichzeitigen Verarbeitung, der Spezifikation eines POSIX-Mutex und gleichzeitigen Algorithmen, die mit Mutexen ausgedrückt werden. Sind Sie einverstanden (damit ?
Hilton Fernandes