psf / pyperf

Toolkit to run Python benchmarks
http://pyperf.readthedocs.io/
MIT License
797 stars 78 forks source link

Can process run in parallel? #160

Closed ylxxwx closed 1 year ago

ylxxwx commented 1 year ago

A question. Can the process run in parallel? That means add more processes, we can create bigger qps for the performance test. If the processes can't run in parallel, what is the purpose we support -p [num]?

vstinner commented 1 year ago

When I designed pyperf, I didn't want to run tests in more than 1 process for different reasons:

If you are confident that multiple processes will have similar or also the same performance, you can run a single process with computes tons of values in the same process: -p 1 -n 50, for example. Linux ASLR makes performance harder to measure.

Code placement became more critical for L1-instruction cache performance. See the BOLT compiler to see how it matters on nowadays Intel CPUs.

Well, said differently: you have to make a compromise between your "time budget" (how long all benchmarks will take on the wall clock) and the accuracy of results (get "reproducible" and "stable" benchmarks results). pyperf default configuration is designed for best accuracy. There is the --fast option which is a small trade-off towards shorter time budget: https://pyperf.readthedocs.io/en/latest/runner.html#loop-iterations

I also suggest you to have a look at my old articles: https://vstinner.github.io/category/benchmark.html

These days, I am away from pyperf and I let others like @corona10 considers changing pyperf ;-)

corona10 commented 1 year ago

Well, I am on the same side with @vstinner We can provide such an option as optional until we know the use case of such an option. I am conservative in providing such options. Our biggest user is pyperformance, but I am sure that they want accuracy more than fast execution.

ylxxwx commented 1 year ago

Thanks for the reply. I am thinking if we can make pyperf to run load test as well with ability to generate request with certain qps. Another thought about that, or another project for that?

corona10 commented 1 year ago

if we can make pyperf to run load test as well with ability to generate request with certain qps.

If you are considering load tests for specific tests, why are you considering using pyperf instead of load testing tools? I think that pyperf measures the performance of python code rather than measuring stress-test for external services.