Coin Brief ENDE

Bitcoin Core verkürzt Funktionstests ohne Wartezeiten; ein Test fällt von 58 auf 6 s

Bitcoin Core hat am 13. Oktober den Pull Request 36440 gemergt – eine Änderung an der Funktionstest-Suite des Projekts, nicht am Knoten selbst. Sie entfernt Wartezeiten, die Tests nicht brauchten, und die Zahlen im PR zeigen, wie viel Zeit sie kosteten.

Was sich ändert. Zwei Dinge. Erstens setzen Tests, die davon profitieren, jetzt die Knotenoption noban_tx_relay = True. Zweitens wacht P2PInterface.wait_until im Python-Testframework jetzt sofort auf, wenn eine Nachricht ankommt oder sich der Verbindungszustand ändert, statt alle 50 Millisekunden nachzusehen. Der Patch betrifft acht Dateien, 25 Zeilen kommen hinzu, eine fällt weg.

Die Messungen. Der Autor berichtet auf einem x86-64-Rechner mit 18 parallelen Tests:

  • Laufzeit von 110,8 s auf 99,1 s (−11 %);
  • summierte Testzeit von 1.715 s auf 1.411 s (−17,5 %).
Bitcoin Core verkürzt Funktionstests ohne Wartezeiten; ein Test fällt von 58 auf 6 s
Bitcoin Core verkürzt Funktionstests ohne Wartezeiten; ein Test fällt von 58 auf 6 s — Coin Brief

Die größten Einzelgewinne lagen bei Tests, die vor allem warteten: feature_maxuploadtarget fiel von 57,9 s auf 6,2 s, wallet_conflicts von 49,2 s auf 7,0 s, p2p_sendheaders von 31,1 s auf 6,8 s und p2p_compactblocks von 11,1 s auf 1,7 s. Auch wallet_orphanedreward und wallet_importprunedfunds halbierten sich etwa.

Warum es zählt. Die Funktionstests laufen bei Beitragenden und in der CI, ein Sechstel weniger summierte Zeit spart also bei jedem Lauf. Und es verändert, was ein langsamer Test bedeutet: Ein Test, der fast eine Minute brauchte, weil er feste Intervalle abwartete, verbarg, wie wenig er tatsächlich tat.

Was sich nicht ändert. Konsens, Policy und Netzwerkverhalten des Knotens bleiben unberührt; noban_tx_relay wird nur in den Tests gesetzt, die es nutzen.

Quelle: Bitcoin Core, Pull Request 36440 „test: speed up functional tests by removing avoidable waits“ — https://github.com/bitcoin/bitcoin/pull/36440