STINNER Victor <vstin...@redhat.com> added the comment:
More benchmarks. I modified subprocess_bench.py to use: ARGS = ["/usr/bin/python3", "-S", "-E", "-c", "pass"] => Mean +- std dev: [fork_exec] 34.1 ms +- 0.4 ms -> [posix_spawn] 6.85 ms +- 0.08 ms: 4.97x faster (-80%) Benchmark using: ARGS = ["/usr/bin/python3", "-c", "pass"] => Mean +- std dev: [fork_exec] 44.5 ms +- 0.6 ms -> [posix_spawn] 17.2 ms +- 0.2 ms: 2.58x faster (-61%) Copy of the previous benchmark using /usr/bin/true: Mean +- std dev: [fork_exec] 27.1 ms +- 0.4 ms -> [posix_spawn] 447 us +- 163 us: 60.55x faster (-98%) The benchmark is less impressive with Python which has a longer startup time (7 to 17 ms depending on the -S option). The speedup is between 2.6x (default) and 5.0x (-S option) faster for Python... to execute "pass" (do nothing). In short, I understand that vfork removes a fixed cost of 27 ms which is the cost of duplicating the 2 GiB of memory pages. The speedup depends on the memory footprint of the parent process and the execution time of the child process. The best speedup is when the parent is the largest and the child is the fastest. -- Another benchmark, I modified subprocess_bench.py with: BIG_ALLOC = b'x' * (10 * 1024 * 1024 * 1024) # 10 GiB ARGS = ["/bin/true"] Mean +- std dev: [fork_exec] 139 ms +- 9 ms -> [posix_spawn] 420 us +- 208 us: 331.40x faster (-100%) Here the cost of copying 10 GiB of memory pages is around 138 ms. It's 331x faster ;-) ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue35537> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com