`test_profiling` sometimes times out under TSan
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 77.2k
- Forks
- 35.9k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
We don't currently run test_profiling in the TSan CI, but the context is that I'm trying to get the entire test suite running under thread sanitizer (TSan).
Some of the tests in test_profiling fail to attach in time when run with thread sanitizer, because the sanitizer makes everything slower. This is especially the case when running tests in parallel with -j.
Here's a example:
ERROR: test_run_failed_script_live (test.test_profiling.test_sampling_profiler.test_live_collector_ui.TestLiveModeErrors.test_run_failed_script_live)
Test that running a failing script exits with clean error.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/sgross/tsan-cpython/Lib/profiling/sampling/cli.py", line 279, in _run_with_sync
_wait_for_ready_signal(sync_sock, process, _SYNC_TIMEOUT_SEC)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/sgross/tsan-cpython/Lib/profiling/sampling/cli.py", line 223, in _wait_for_ready_signal
raise socket.timeout("timed out")
TimeoutError: timed out
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/sgross/tsan-cpython/Lib/profiling/sampling/cli.py", line 1110, in _handle_live_run
process = _run_with_sync(cmd, suppress_output=True)
File "/home/sgross/tsan-cpython/Lib/profiling/sampling/cli.py", line 289, in _run_with_sync
raise RuntimeError(
"Process failed to signal readiness within timeout"
)
RuntimeError: Process failed to signal readiness within timeout
I think the problem is that the the _SYNC_TIMEOUT_SEC of 5 seconds isn't enough in this case:
Here are some options to consider:
- Make
_SYNC_TIMEOUT_SECconfigurable via a command line option and specify a larger value for the tests (i.e., SHORT_TIMEOUT) - Make
_SYNC_TIMEOUT_SECconfigurable via environment variable - Skip these tests under TSan
- ???
cc @pablogsal
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne in Lib/profiling/sampling/cli.py bei _SYNC_TIMEOUT_SEC und _wait_for_ready_signal und untersuche anschließend den fehlschlagenden test_profiling-Fall test_run_failed_script_live. Führe die Profiling-Tests unter TSan aus, einschließlich paralleler Ausführung mit -j, und vergleiche bestehende Testkonventionen für sanitizer-spezifisches Verhalten. Die Arbeit ist abgeschlossen, wenn die betroffenen Tests unter TSan zuverlässig abgeschlossen werden, ohne die normale Testabdeckung zu schwächen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- performance, testing
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 38/100