gpt4 book ai didi

c - 为什么 fork 会减慢我的应用程序

转载 作者:IT王子 更新时间:2023-10-29 00:52:25 26 4
gpt4 key购买 nike

我的应用程序通过使用 fork 系统调用每隔 100 毫秒获取一个检查点。但是,我注意到在使用检查点( fork )时我的​​应用程序速度明显变慢。我测试了 fork 调用所花费的时间,结果是 1 到 2 毫秒。那么为什么 fork 会如此拖慢我的应用程序。请注意,我一次只保留 1 个检查点( fork 进程),每当我使用新的检查点时,都会终止前一个检查点。另外,我的电脑有一个巨大的内存。

请注意,我的 fork 进程在创建后就进入休眠状态。只有在需要回滚时才会被唤醒。因此,它不应由操作系统安排。我想到的一件事是,由于 fork 是一种写时复制机制,因此每当我的应用程序修改页面时都会出现页面错误。但这会显着降低应用程序的速度吗?在没有检查点( fork )的情况下,我的应用程序在大约 3.1 秒内完成,而有了它,大约需要 3.7 秒。知道吗,是什么减慢了我的应用程序?

最佳答案

正如您所假设的那样,您可能正在观察写时复制机制的成本。这实际上非常昂贵——这就是 vfork 仍然存在的原因。 (主要成本不是额外的页面错误本身,而是每个页面被触摸时的 memcpy,以及相关的缓存和 TLB 刷新。)它没有显示为成本 fork 因为页面错误不会发生在系统调用中。

您可以通过查看 getrusage 报告的时间来确认这个假设——如果这是正确的,那么额外消耗的时间应该几乎是所有“系统”时间(CPU 在内核中燃烧)。 oprofileperf 可以让您更具体地确定问题...如果您能让它们正常工作,唉,这很重要。

不幸的是,写时复制也是检查点机制首先起作用的原因。你能以更长的时间间隔检查点吗?这是我能想到的唯一快速解决方法。

关于c - 为什么 fork 会减慢我的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8315703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com