V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
xdcatus
V2EX  ›  问与答

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

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

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

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

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

    这个百分比就是 cpu 利用率

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

    解压缩就是其中之一

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

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

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

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

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

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

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

    另外 Windows 任务管理器有个“特性”,就是看到的 CPU 使用率是乘以了当前 CPU 频率比例的。比如说 CPU 基础频率是 2GHz ,目前频率是 4GHz ,那当 CPU 使用率是 50%时,实际会显示 100%。
    min
        9
    min  
       167 天前
    压缩解压缩对 cpu 要求偏低,无法达到你的充分利用 cpu 的期望,就不是个吃 cpu 的任务类型
    catalysia
        10
    catalysia  
       167 天前
    @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  
       167 天前 via Android
    @catalysia 那如何解释最简单的无限循环会显示为 100%呢?
    daimiaopeng
        12
    daimiaopeng  
       167 天前
    换个软件,或者试一下在任务管理器把压缩软件 cpu 的优先级设置为高
    sandylaw
        13
    sandylaw  
       167 天前
    开启多线程:
    echo "${ALLFILES[*]}" | xargs 7z a -t7z -mx=6 -mmt=on ${VERSION_NAME}.7z
    kokutou
        14
    kokutou  
       167 天前
    解压是单核的, 好多算法都是这样的...

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

    你看看硬盘占用吧,110m 不就是千兆网, 已经跑满了
    ccpp132
        15
    ccpp132  
       167 天前
    具体情况不清楚很难排查

    比如一个可能的情况是解压出来大量的小文件,导致大部分时间花在创建新文件这种 i/o 操作上。这些其实都依赖额外的信息从描述是判断不出来的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2518 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 15:35 · PVG 23:35 · LAX 07:35 · JFK 10:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.