为什么分叉会减慢我的申请速度
发布时间:2020-12-13 23:55:41 所属栏目:Linux 来源:网络整理
导读:我的应用程序通过使用fork系统调用每隔几百毫秒获取一个检查点.但是,我注意到使用检查点(分叉)时我的??应用程序显着减慢.我测试了fork调用所花费的时间,结果是1到2毫秒.那么为什么fork会大大减慢我的应用程序.请注意,我一次只保留1个检查点(分叉进程),并且每
我的应用程序通过使用fork系统调用每隔几百毫秒获取一个检查点.但是,我注意到使用检查点(分叉)时我的??应用程序显着减慢.我测试了fork调用所花费的时间,结果是1到2毫秒.那么为什么fork会大大减慢我的应用程序.请注意,我一次只保留1个检查点(分叉进程),并且每当我拿一个新检查点时都会终止前一个检查点.另外,我的电脑有一个巨大的RAM.
请注意,我的分叉进程在创建后就会休眠.只有在需要进行回滚时才会被唤醒.因此,它不应由操作系统安排.我想到的一件事是,由于fork是一种写时复制机制,每当我的应用程序修改页面时都会出现页面错误.但是,这应该显着减缓应用程序的速度吗如果没有检查点(分叉),我的应用程序将在大约3.1秒内完成,使用它大约需要3.7秒.有什么想法,什么减慢了我的申请? 解决方法
正如您所假设的那样,您可能正在观察写时复制机制的成本.这实际上非常昂贵 – 这也是vfork仍然存在的原因. (主要成本不是额外的页面错误本身,而是触及的每个页面的memcpy,以及相关的缓存和TLB刷新.)它没有显示为fork的成本,因为页面错误不会发生在内部系统调用.
您可以通过查看getrusage报告的时间来确认假设 – 如果这是正确的,则额外的时间应该几乎都是“系统”时间(内核中的CPU烧毁). oprofile或perf会让你更具体地解决这个问题…如果你可以让它们完全工作,这是非常重要的,唉. 不幸的是,写时复制也是您的检查点机制首先工作的原因.您能否以较长的间隔离开检查站?这是我能想到的唯一快速解决方案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读