Jak testować i testować implementacje mutex

12

Jak mówi tytuł: Jak właściwie testować i porównywać różne implementacje muteksów w c ++?

Zasadniczo napisałem własną klasę podobną do std :: mutex dla projektu działającego na 2 rdzeniach, armv7, w celu zminimalizowania kosztów ogólnych w niekwestionowanym przypadku. Teraz rozważam użycie wspomnianego muteksu w większej liczbie miejsc i różnych architektur, ale zanim to zrobię, chciałbym się upewnić

  • to jest właściwie poprawne
  • nie ma żadnych patologicznych przypadków, w których działałby znacznie gorzej niż standardowy std :: mutex.

Oczywiście napisałem kilka podstawowych testów jednostkowych i mikro-testów i wszystko wydaje się działać, ale w kodzie wielowątkowym „wydaje się działać” nie daje mi wielkiego komfortu.

  • Czy istnieją jakieś ustalone techniki analizy statycznej lub dynamicznej?
  • Jakie są typowe problemy podczas pisania testów jednostkowych dla klas mutex?
  • Jakie są typowe przypadki krawędzi, na które należy zwrócić uwagę (pod względem wydajności)?

Używam tylko standardowych typów bibliotek do implementacji, która obejmuje niespójnie spójne operacje ładowania i przechowywania atomów. Jednak przede wszystkim interesują mnie porady agnostyczne dotyczące implementacji, ponieważ chciałbym używać tej samej wiązki testowej również w innych implementacjach.

MikeMB
źródło
2
Wiem, że nie jest to wymagane, ale byłbym wdzięczny, gdyby downvoters skomentował problem związany z tym pytaniem. Jestem nowy w SE i nie do końca znam specyfikę tej strony.
MikeMB
3
Nie głosujący, ale powiem, że ta strona jest szczególnie zła w przypadku anonimowych głosów w dół na idealnie dobre pytania. Wydaje mi się, że wiele osób głosuje w oparciu o to, co nazwałbym „religijnymi” powodami. To powiedziawszy, jedną z możliwości jest to, że pytasz o zalecenia dotyczące narzędzi, które, jak sądzę, są w tym przypadku niezadowolone . Ale to tylko przypuszczenie. I wiele osób dyskutowało o takich narzędziach w innych pytaniach, więc rób to, co chcesz.
user1118321
4
W rzeczywistości sprawdź ten meta post zatytułowany „Głosowanie w dół, ponieważ nie zgadzamy się z podejściem ani logiką pytającego”.
user1118321
@ user1118321: ten post nie pasuje do tego pytania, ponieważ IMHO nie ma błędnego założenia w tym pytaniu. Jednak dwa z 3 głosów zamknięcia, które obecnie widzę, wykorzystują predefiniowany „ścisły wniosek o zasób strony trzeciej”. MikeMB, możesz spróbować edytować swoje pytanie i usunąć z niego te części, jednak w obecnej formie społeczność mogłaby go również zamknąć, ponieważ jest zbyt szeroka. Jeśli zawęzisz zakres pytania i spytasz konkretnie, co chcesz przetestować i co próbowałeś do tej pory, możesz zwiększyć szansę na przetrwanie swojego pytania.
Doc Brown
Jednym z problemów związanych z tym pytaniem jest to, że „pytania wymagające od nas znalezienia lub polecenia narzędzi, bibliotek, języków programowania, zasobów (w tym książek, blogów, samouczków i przykładów) lub projektów do podjęcia są tutaj nie na temat, ponieważ przyciągają opinie, na które nie będą miały trwałej wartości dla innych. ”
David Hammen,

Odpowiedzi:

1

Problem jest złożony:

Niektóre źródła złożoności obejmują:

  • Ile przełączników kontekstu ma miejsce: Jest to bardzo ważne w zależności od platformy, na której uruchamiane są testy. Niektóre platformy radzą sobie z tym lepiej niż inne
  • Czy funkcje, w których muteksy są testowane inline, czy nie. tj. Czy muteks działa dobrze tylko w dobrze zoptymalizowanym lub zoptymalizowanym kodzie.
  • Czy te muteksy są zaprojektowane dla lokalizacji pamięci podręcznej. Czy buforowanie chybienie znacznie obniży wydajność lub spowoduje więcej przełączeń kontekstu. przed i po wprowadzeniu muteksu.
  • Czy sam muteks spowoduje utratę lokalizacji pamięci podręcznej. tzn. dane stanu mutex są przydzielane dynamicznie.
  • Czy te muteksy będą działać dobrze tam, gdzie w muteksie znajdują się przełączniki kontekstu. tj. io, malloc itp.
  • Czy muteks będzie działał dobrze, gdy czas jądra jest zawarty w dynamicznej alokacji i dealokacji pamięci mutex.ie.
  • Czy wydajność utrzymuje się, gdy działa w obrębie maszyn wirtualnych
  • Czy zniszczenie lub budowa muteksu jest droga, tzn. Dane o stanie znajdują się w pamięci dynamicznej
Christiaan Pretorius
źródło
1
Nie jestem pewien, czy zgadzam się z częścią dotyczącą budowy / zniszczenia. Jeśli program cały czas tworzy i niszczy twoje muteksy, oznacza to (imho) coś złego w projekcie. Ale poza tym dziękuję za wskazówki.
MikeMB
-1

Twój pomysł jest bardzo interesujący: test zgodności, na podstawie którego można przetestować wdrożenie mutex.

Niestety, o ile mogłem zobaczyć, nie ma powszechnie znanego testu zgodności dla implementacji mutex. Sądzę więc, że masz w swoich rękach bardzo interesujący problem ze stworzeniem propozycji takiego wzorca zgodności.

A ponieważ jesteś zaangażowany w tworzenie implementacji testu porównawczego, jesteś facetem.

Jeśli pozwolisz mi na sugestię, być może mógłbyś rozpocząć te badania ze standardem POSIX dla wątków z jednej strony i trochę studiowania literatury teoretycznej na temat równoczesnego przetwarzania, takich jak CSP lub Communicating Sequential Processs. Tego rodzaju artykuły zwykle dotyczą klasycznych problemów jednocześnie, takich jak filozofowie kulinarni.

Ich wdrożenie może być interesującą częścią twojego testu zgodności.

Hilton Fernandes
źródło
3
Nie głosowałem za tobą, ale to wydaje się nie odpowiadać na żadne z moich pytań.
MikeMB
Dzięki, że nie oddałeś głosu. I przepraszam, że nie odpowiedziałeś na twoje pytania. Czy miałbyś coś przeciwko, jeśli zapytam cię, czy zastanawiasz się nad stworzeniem wskaźnika zgodności dla muteksów?
Hilton Fernandes
Mało prawdopodobne. I nawet jeśli jedyny standard, na którym mi zależy, to standard c ++ (chociaż może być taki sam jak posix w odniesieniu do muteksów)
MikeMB
Aby zakwalifikować moje poprzednie stwierdzenie: jeśli powinienem opracować dobry zestaw testów dla mojego muteksu, najprawdopodobniej zrobię to jako oprogramowanie open source, ale bardzo wątpię, czy będzie miał jakość lub będzie wystarczająco kompletny, aby stać się faktycznym Benchmark „zgodności” - i tak może być lepiej obsłużony przez analizę statyczną.
MikeMB
Zgadzam się z tobą, że nie ma dobrego zestawu testów dla prymitywów mutex. Przypuszczam, że powinien pochodzić z trzech odrębnych źródeł: teorii współbieżnego przetwarzania, specyfikacji muteksu POSIX i współbieżnych algorytmów wyrażanych przy użyciu muteksów. Zgadzasz się z tym ?
Hilton Fernandes