gpt4 book ai didi

haskell - 理解 GHC 的 +RTS -t -RTS 选项的输出

转载 作者:行者123 更新时间:2023-12-01 02:15:02 25 4
gpt4 key购买 nike

我正在对使用 GHC 编译的 haskell 程序的内存消耗进行基准测试。为此,我使用以下命令行参数运行程序:+RTS -t -RTS .这是一个示例输出:<<ghc: 86319295256 bytes, 160722 GCs, 53963869/75978648 avg/max bytes residency (386 samples), 191M in use, 0.00 INIT (0.00 elapsed), 152.69 MUT (152.62 elapsed), 58.85 GC (58.82 elapsed) :ghc>> .
根据 ghc 手册,输出显示:

  • 程序在整个运行过程中分配的总字节数。
  • 执行的垃圾收集总数。
  • 平均和最大“驻留时间”,即以字节为单位的实时数据量。运行时只能确定一次主要 GC 期间的实时数据量,这就是为什么样本数量对应于主要 GC 的数量(并且通常相对较少)。
  • RTS 从操作系统分配的峰值内存。
  • 初始化运行时系统 (INIT)、运行程序本身(MUT,mutator)和垃圾收集 (GC) 时的 CPU 时间量和经过的挂钟时间。

  • 应用于我的示例,这意味着我的程序将 82321 MiB(字节除以 1024^2)混洗,执行 160722 次垃圾收集,平均/最大内存驻留为 51MiB/72MiB,在 RAM 中最多分配 191M 内存,依此类推。 ..

    现在我想知道,什么»平均和最大“驻留时间”,即以字节为单位的实时数据量«与»RTS从操作系统分配的峰值内存«进行比较?还有:大约120M的剩余空间是用来做什么的?

    我被指指点点 here了解更多信息,但这并没有明确说明我想知道什么。另一个 source (5.4.4第二项)提示120M内存用于垃圾回收。但这太含糊了——我需要一个可引用的信息来源。

    所以请问,有没有人可以用好的来源作为证据来回答我的问题?

    亲切的问候!

    最佳答案

    “常驻”大小是您拥有多少实时 Haskell 数据。从操作系统实际分配的内存量可能更高。

  • RTS 以“块”的形式分配内存。如果您的程序需要 7.3 个 RAM 块,RTS 必须分配 8 个块,其中 0.7 个是空白空间。
  • 默认垃圾收集算法是 2 空间收集器。也就是说,当空间 A 填满时,它分配空间 B(完全空的)并将所有事件数据从空间 A 复制到空间 B,然后释放空间 A。这意味着,有一段时间,您使用实际需要的 2 倍 RAM。 (我相信在某处有一个开关可以使用 1-space 算法,该算法速度较慢但使用较少的 RAM。)

  • 管理线程也有一些开销(特别是如果你有很多线程),并且可能还有其他一些事情。

    我不知道你对 GC 技术已经了解多少,但你可以尝试阅读这些:
  • http://research.microsoft.com/en-us/um/people/simonpj/papers/parallel-gc/par-gc-ismm08.pdf
  • http://www.mm-net.org.uk/workshop190404/GHC%27s_Garbage_Collector.ppt
  • 关于haskell - 理解 GHC 的 +RTS -t -RTS 选项的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25789149/

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