[Development] QProcess fork() failure and overcommit
Thiago Macieira
thiago.macieira at intel.com
Wed Mar 8 15:29:28 CET 2017
Em quarta-feira, 8 de março de 2017, às 14:44:51 CET, Ulf Hermann escreveu:
> > That said, look at the numbers: it increased from ~100 µs to 16.9 ms in
> > the
> > worst case. You can't perceive that difference.
>
> This limits the number of processes you can spawn per second to about 60
> (and it goes lower if you eat more RAM).
Why would Qt Creator want to spawn more than 60 processes per second?
> I certainly can notice this
> when using the version of qbs compiled into QtCreator to compile a
> project. In order to keep an 8-core CPU loaded and send extra jobs to
> icecream you need a higher rate.
>
> There is a workaround for that by now, which just uses a separate
> process to spawn the children, but it used to be a problem.
Oh, that explains.Separate process is the correct solution. I
've just tried gmake in a very simple project and it called vfork() 26 times
in a total runtime of 0.5 seconds -- that is, 52 times per second. That's a
total count in the same order than the overhead inside Qt Creator.
Note: gmake uses vfork(), whose stated goal is to avoid doing a page table
duplication; QProcess and forkfd cannot do that.
--
Thiago Macieira - thiago.macieira (AT) intel.com
Software Architect - Intel Open Source Technology Center
More information about the Development
mailing list