为什么解压软件的 cpu 利用率很低? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xdcatus

为什么解压软件的 cpu 利用率很低?

  •  
  •   xdcatus 2024 年 7 月 7 日 3616 次点击
    这是一个创建于 656 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我用的是 7zip ,当解压缩文件时我打开任务管理器查看 CPU 的利用率才 2%,用什么方法能使解压缩和压缩文件时充分利用 CPU 的性能?
    第 1 条附言    2024 年 7 月 7 日
    感谢回复,我不认为是我的带宽问题,事实上我将压缩文件放在本地的 SSD 上,同样 CPU 的利用率也很低。我是最近用 Kindle Comic Converter 制作 mobi 电子书时发现 CPU 利用率能瞬间到 100%,所以有这样的思考:同样是处理文件,为什么解压缩就利用率这么低?
    15 条回复    2024-07-08 11:54:13 +08:00
    killgfat
        1
    killgfat  
       2024 年 7 月 7 日 via Android
    硬盘读写吃满了吗
    xdcatus
        2
    xdcatus  
    OP
       2024 年 7 月 7 日
    @killgfat 这个倒没注意,我通常解压缩的是 nas 里的文件,读写可以达到 110MB/S
    ochatokori
        3
    ochatokori  
       2024 年 7 月 7 日 via Android
    @xdcatus #2 这是你网络带宽瓶颈了吧
    catalysia
        4
    catalysia  
       2024 年 7 月 7 日   2
    主流系统的 cpu 利用率( windows mac 安卓 ios linux )并不完全代表 cpu 的繁忙程度

    现代 cpu 十分复杂 每种晶体管都有自己独特的作用

    所以硬件调度器会根据预先的判断来给正在进行的工作一个预期

    对每个晶体管是否繁忙进行加权 最后生成一个百分比

    这个百分比就是 cpu 利用率

    所以 cpu 利用率低 也并不代表 cpu 就不繁忙

    解压缩就是其中之一

    cpu 的内从控制器要进行复杂的从硬盘到内存再到 3 级缓存 2 级缓存的调度工作

    而且类似 7z 等压缩算法 是一环套一环的 你必须完成了前面的才能解压缩后面的

    这就导致内存控制器和三级缓存很容易跑满

    由于 cpu 利用率对内存控制器和三级缓存的加权并不高 所以才会让你觉得 cpu 不忙 但解压缩速度却不能更快

    使用更大的三级缓存的 cpu 比如 x3d 系列 或者更高带宽的内存 可以加快解压缩速度
    yyzh
        5
    yyzh  
       2024 年 7 月 7 日 via Android
    @catalysia 别想那么多,单纯楼主这个只是带宽问题罢了.不过的确现在压缩解压缩算法一堆都是一核有难 N 核围观的.遇到大小核的 U 如果调度出问题了情况更糟
    charlie21
        6
    charlie21  
       2024 年 7 月 7 日 via Android
    视频格式转换的时候 cpu 利用率是很高的
    love4taylor
        7
    love4taylor  
    PRO
       2024 年 7 月 7 日
    ZSTD:
    zstd -T$(nproc) 或 export ZSTD_NBTHREADS="$(nproc)"

    XZ:
    export XZ_OPT="-T$(nproc)"

    保证你 CPU 起飞
    ysc3839
        8
    ysc3839  
       2024 年 7 月 7 日 via Android
    @catalysia 否的,据我所知大多数情况下用户能看到的“CPU 利用率”就仅仅是一段时间内 CPU 非空闲时间所占百分比。即使是最简单的无限循环,用户看到的也是 100%。你说的需要进行复杂计算得出的真实 CPU 使用率或许是存在的,但是用户用具看到的一般不是这个。

    另外 Windows 任务管理器有个“特性”,就是看到的 CPU 使用率是乘以了当前 CPU 频率比例的。比如说 CPU 基础频率是 2GHz ,目前频率是 4GHz ,那当 CPU 使用率是 50%时,实际会显示 100%。
    min
        9
    min  
       2024 年 7 月 7 日
    压缩解压缩对 cpu 要求偏低,无法达到你的充分利用 cpu 的期望,就不是个吃 cpu 的任务类型
    catalysia
        10
    catalysia  
       2024 年 7 月 8 日
    @ysc3839 并不是

    微软就曾经出面说过 intel 的 atom 和标准 cpu 以及高通 arm 和 amd 的算法都不一样 不能进行横向对比
    一个比较明显的例子是 在 windows xp 酷睿和 Phenom 时期 跑 julia 的时候 amd 的 cpu 会显示跑满了 cpu 而 intel 的标压产品就不会显示跑满 atom 则和 amd 的一样会显示跑满

    这是因为 intel 和 amd 的设计原理和权重不一样 对纯浮点算法 intel 的 cpu 可以再跑个整数指令 而 amd 的 3d now !指令集会接管 julia 算法的大多数运算

    当然 windows 11 后微软重构了任务管理器的代码 win11 的 cpu 利用率的实现方式似乎和之前有区别了 大多数第三方工具读取利用率的时候都需要调用额外的 api 不过我仍然不认为微软纯使用了占空比
    ysc3839
        11
    ysc3839  
       2024 年 7 月 8 日 via Android
    @catalysia 那如何解释最简单的无限循环会显示为 100%呢?
    labubu
        12
    labubu  
       2024 年 7 月 8 日
    换个软件,或者试一下在任务管理器把压缩软件 cpu 的优先级设置为高
    sandylaw
        13
    sandylaw  
       2024 年 7 月 8 日
    开启多线程:
    echo "${ALLFILES[*]}" | xargs 7z a -t7z -mx=6 -mmt=on ${VERSION_NAME}.7z
    kokutou
        14
    kokutou  
       2024 年 7 月 8 日
    解压是单核的, 好多算法都是这样的...

    如果你单核性能差 那就是很慢

    你看看硬盘占用吧,110m 不就是千兆网, 已经跑满了
    ccpp132
        15
    ccpp132  
       2024 年 7 月 8 日
    具体情况不清楚很难排查

    比如一个可能的情况是解压出来大量的小文件,导致大部分时间花在创建新文件这种 i/o 操作上。这些其实都依赖额外的信息从描述是判断不出来的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2973 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 57ms UTC 03:26 PVG 11:26 LAX 20:26 JFK 23:26
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86