Вы, вероятно, наблюдаете стоимость механизма копирования при записи, поскольку вы выдвигаете гипотезу. Это на самом деле довольно дорого - это причина, по которой vfork
все еще существует. (Основная стоимость - это не сами ошибки дополнительной страницы, а memcpy
каждой страницы при ее касании, а также связанные кэш и сброс TLB.) Она не отображается как стоимость fork
потому что ошибки страницы не происходят внутри системного вызова.
Вы можете подтвердить гипотезу, посмотрев время, указанное в getrusage
- если это правильно, дополнительное время должно составлять почти все «системное» время (процессор сгорает внутри ядра). oprofile
или perf
позволит вам более конкретно определить проблему ... если вы сможете заставить их работать вообще, что, увы, нетривиально.
К сожалению, копирование при записи также является причиной того, почему ваш механизм контрольных точек работает в первую очередь. Можете ли вы сойти с контрольных точек на более длительные интервалы? Это единственное быстрое решение, которое я могу придумать.