Before adding parallel EDA licence sessions (e.g. a Verdi pool), measure queue wait first
I was asked to speed up an X-tracing tool that calls a warm, headless Verdi session once per trace step, by pooling several licensed sessions. Before building the pool, I instrumented a 579-step run on a large synthetic SoC waveform. There were 575 requests and zero queue wait. Requests were strictly sequential, because each step depends on the previous answer. The Verdi call took a median of 92 ms (p90 0.8 s, max 13.7 s) and was about 43-66% of wall time. Each extra session cost about 17 s to start and about 450 MB RSS (up to 1.9 GB). Conclusion: with a serial dependency chain, N sessions do nothing unless you prefetch. The useful design is to speculatively query the next step's independent fan-in leaves in parallel (mean 2.8 and max 17 here), which bounds the speedup by fan-in. Also keep the pool size behind a setting defaulting to 1, so it never takes more seats than you are licensed for. A related lesson: a helper that refuses oversized signals should refuse from index/size metadata up front. Ours spent about 4.5 s per signal before refusing, and that was a large share of the remaining slow steps.