gpt4 book ai didi

haskell - 模块 Data.ByteString 没有堆分析数据

转载 作者:行者123 更新时间:2023-12-04 05:24:34 24 4
gpt4 key购买 nike

我试图为以下复制文件的幼稚 Haskell 代码生成堆内存配置文件:

import System.Environment
import System.IO
import qualified Data.ByteString as B
import qualified Data.ByteString.Lazy as LB

naiveCopy :: String -> String -> IO ()
naiveCopy from to = do
putStrLn $ "From: " ++ from
putStrLn $ "To: " ++ to
s <- B.readFile from
B.writeFile to s

main = do
args <- getArgs
mapM (\ x-> putStrLn x) args
naiveCopy (head args) ((head.tail) args)

使用 ghc 8.0.1 构建代码的命令:
ghc -o t -rtsopts -prof -fprof-auto t.hs

收集分析数据的命令:
./t +RTS -p -h -RTS in/data out/data && hp2ps -e8in -c t.hp

在哪里 in/data是一个相当大的文件(大约 500MB),复制程序需要大约 2 秒。

问题是我 不能如果我使用严格的 ,则获取堆分析数据Data.ByteString ,只有一个没有任何示例数据的小 t.hp 文件,它看起来像这样:
JOB "t in/data out/data +RTS -p -h"
DATE "Thu Aug 4 20:19 2016"
SAMPLE_UNIT "seconds"
VALUE_UNIT "bytes"
BEGIN_SAMPLE 0.000000
END_SAMPLE 0.000000
BEGIN_SAMPLE 0.943188
END_SAMPLE 0.943188

和相应的剖面图如下:
Strict ByteString without profiling data

不过我 可以如果我切换到惰性版本 ,则获取堆分析数据Data.ByteString.Lazy , 像这样的个人资料图:
Lazy ByteString with profiling data

更新:谢谢 @ryachza , 我加了一个 -i0设置采样间隔的参数并再次尝试,这次我得到了严格的样本数据 ByteString它看起来很合理(我正在复制一个 500M 的文件,下面的分析图表中的内存分配峰值约为 500M)
./t +RTS -p -h -RTS in/data out/data && hp2ps -e8in -c t.hp

Strict ByteString with profiling data

最佳答案

看起来运行时似乎没有“获得测量”堆的机会。如果添加 -s给您的RTS选项,它应该打印一些时间和分配信息。当我运行它时,我看到分配的字节数和总内存使用量非常高(文件大小),但最大驻留时间(和样本数)非常低,虽然耗时很高,但实际的“工作“时间实际上是 0。

添加 RTS 选项 -i0让我可以重现地将字节串分配可视化为 PINNED (这是分类,因为 bytestring 内部使用的字节数组被分配在 GC 不能移动东西的区域中)。你可以尝试不同的-h将分配关联到不同成本中心的选项(例如,-hy 应该显示 ARR_WORDS)但在这种情况下它可能没有太大值(value),因为字节串实际上只是“大块原始内存”。

我用来查找 RTS 选项的引用资料是(显然我并不特别关注 GHC 版本 - 我无法想象这些标志会经常更改):

  • https://downloads.haskell.org/~ghc/7.0.1/docs/html/users_guide/runtime-control.html
  • https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/profiling.html
  • 关于haskell - 模块 Data.ByteString 没有堆分析数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38745937/

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