即使我的应用程序不访问,GHC 运行时是否会访问旧数据?
Does GHC runtime access old data even if my app doesn't?
我想知道 运行 ghc 与大量交换 space 是否是个好主意,或者它是否可行。我有一个工作负载,其中大多数数据在 99% 的时间内处于空闲状态。在任何给定时间实际上都在积极使用一小部分数据。这听起来像是让内核交换内存的最佳时机,但 gc 通常是一个问题。 Haskell 但是只有不可变值,所以理论上它可以工作。
ghc 运行time 是否读取旧值,迫使我在每个 gc 或其他东西上交换 in/out,或者我是否可以期望我没有接触的内存不会被交换?
随意编辑标题,我想不出合适的描述。
GHC 使用复制收集器,其中 live/reachable 数据树被复制到一个新区域,这意味着主要 GC 暂停时间会随着工作集的大小而增加,这可能有悖常理。
"most data being idle"的属性并不少见,我认为与世代假说密切相关,它激发了世代GC,GHC使用。
但是听起来你在谈论诸如在内存中缓存一堆数据。众所周知,由于上述原因(长时间的 GC 暂停,或者可能是不良行为),这是有问题的。紧凑区域是一种实验性功能,可以作为以这种方式处理盒装数据的库的基础,但我认为还没有人知道这是否是个好主意。
所以很明显,如果您的数据被换出,这只会使本已糟糕的情况(大型工作集的长时间 GC 暂停)变得更糟。
我想知道 运行 ghc 与大量交换 space 是否是个好主意,或者它是否可行。我有一个工作负载,其中大多数数据在 99% 的时间内处于空闲状态。在任何给定时间实际上都在积极使用一小部分数据。这听起来像是让内核交换内存的最佳时机,但 gc 通常是一个问题。 Haskell 但是只有不可变值,所以理论上它可以工作。
ghc 运行time 是否读取旧值,迫使我在每个 gc 或其他东西上交换 in/out,或者我是否可以期望我没有接触的内存不会被交换?
随意编辑标题,我想不出合适的描述。
GHC 使用复制收集器,其中 live/reachable 数据树被复制到一个新区域,这意味着主要 GC 暂停时间会随着工作集的大小而增加,这可能有悖常理。
"most data being idle"的属性并不少见,我认为与世代假说密切相关,它激发了世代GC,GHC使用。
但是听起来你在谈论诸如在内存中缓存一堆数据。众所周知,由于上述原因(长时间的 GC 暂停,或者可能是不良行为),这是有问题的。紧凑区域是一种实验性功能,可以作为以这种方式处理盒装数据的库的基础,但我认为还没有人知道这是否是个好主意。
所以很明显,如果您的数据被换出,这只会使本已糟糕的情况(大型工作集的长时间 GC 暂停)变得更糟。