upvote
This was left implicit in the article, but what they mean by copying the process state here is the memory management structures. That's mainly the page tables and the VMAs.

That means you have to allocate new pages to hold a copy of all these structures, even if the actual memory pointed by the pages is shared. And walking all those structures to make a copy is still costly.

reply
> It's weird to leave out a mention of copy-on-write

For the intended audience of such a paper this is base knowledge.

reply
Even with copy-on-write, fork() still has to pay the setup cost for COW. If the parent process has a lot of busy threads (e.g. Java), you can end up doing a lot of unnecessary COW before exec() fires.
reply
Isn't that what vfork tried to address? No COW, the child starts in its parents address space and only gets its own after calling exec.
reply
It says state. Copy on write still means it's O(number of page table entries) even if you don't copy the contents. It's a well known issue that forking a program with large virtual memory size is slow.
reply
It says "(including memory)". It's pretty natural to read this as "(including the contents of allocated pages)".
reply
On modern hardware a cow page copy should only take 1-5ms. Redis forks to save the db to disk and it's been a solid design choice.

I guess it depends on how sensitive your application is to main thread pauses.

reply
So like 1000-5000s if you have 4GB of data? Over an hour?
reply