V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
y3y
V2EX  ›  程序员

CPU 占用率无法达到 100%的问题~ ლ(╹◡╹ლ)

  •  
  •   y3y · 2018-04-09 10:41:38 +08:00 · 6206 次点击
    这是一个创建于 2450 天前的主题,其中的信息可能已经有所发展或是发生改变。
    加密并行处理运算在本地电脑( i5-6400 )上可以达到 100%,在服务器上( e5-2620 16 内核 32 个逻辑处理器)无论增加多少线程都只有 30%~40%。有什么方法可以提高 CPU 利用率吗~
    25 条回复    2018-04-10 11:35:29 +08:00
    vincenttone
        1
    vincenttone  
       2018-04-09 11:03:45 +08:00
    python?
    hmzt
        2
    hmzt  
       2018-04-09 11:05:41 +08:00
    多进程啊,mpi
    dychenyi
        3
    dychenyi  
       2018-04-09 11:07:37 +08:00
    没有真正并行吧,运算里面有锁?
    y3y
        4
    y3y  
    OP
       2018-04-09 11:09:01 +08:00
    @vincenttone 用了 C#的 task 和 parallel,都是上面那个情况诶
    y3y
        5
    y3y  
    OP
       2018-04-09 11:12:38 +08:00
    @dychenyi 就是一个 SM2 的签名,里面应该没锁吧。
    dychenyi
        6
    dychenyi  
       2018-04-09 11:33:50 +08:00
    @y3y 必定有什么不能并行。 写个测试线程,丢个死循环,弄他几十个线程。看看,占用率
    vincenttone
        7
    vincenttone  
       2018-04-09 11:36:12 +08:00
    @y3y 看起来是基于线程池的,如果没有锁的话,会不是是有频繁的 IO 操作呢?
    owenliang
        8
    owenliang  
       2018-04-09 11:41:26 +08:00
    小哥是不是开了节能?
    y3y
        9
    y3y  
    OP
       2018-04-09 11:59:50 +08:00
    @dychenyi @vincenttone 写死循环 CPU 确实可以达到 100%,请问 SM2 签名里椭圆坐标大数运算有什么是会造成死锁或者频繁 IO 操作的吗
    rrfeng
        10
    rrfeng  
       2018-04-09 12:07:27 +08:00 via Android
    无责任瞎猜,这个运算是不是有随机数?可能随机数性能不够...
    vincenttone
        11
    vincenttone  
       2018-04-09 12:08:08 +08:00
    @y3y 就俺就不知道了。。。只是感觉如果 cpu 资源没到 100%,应该是某些逻辑限制了到达 100%的能力,那么可能是因为锁或者其他系统资源的限制,所以如果没有锁的话,会不会是因为系统资源问题,比如 IO。可以看一下机器的资源利用情况。
    vincenttone
        12
    vincenttone  
       2018-04-09 12:10:42 +08:00   ❤️ 1
    @y3y 而且感觉签名算法应该不会包含 IO 操作,很多都是类似于 hash 算法和非对称加密算法?对这块了解的不多。
    y3y
        13
    y3y  
    OP
       2018-04-09 14:17:01 +08:00
    @hmzt 试了你的说 mpi,还是没有解决。还是感谢(๑•ᴗ•๑)
    mengzhuo
        14
    mengzhuo  
       2018-04-09 14:44:29 +08:00
    一般是 CPU 比 IO 快导致的,你试试把源数据放到 ramdisk 里。
    y3y
        15
    y3y  
    OP
       2018-04-09 14:57:01 +08:00
    @mengzhuo 参数都是在程序里写死的,应该和硬盘没有关系吧。
    mengzhuo
        16
    mengzhuo  
       2018-04-09 15:05:18 +08:00
    @y3y #15 有关系,很简单。

    例如一个算法在机器上吞吐量有 8Gb/s,而你的外部存储 IO 只有 200Mb/s,那大部分时间都是 CPU 在等外存读写。
    ( 8GB/s 是 2.4GHz 的 arm64 跑 AES 硬件加密都可以轻易达到,更不用说变态的 x86 架构了……
    y3y
        17
    y3y  
    OP
       2018-04-09 15:17:30 +08:00
    @mengzhuo 谢谢你的回答~不过数据来源都是写死在程序里的变量,没有其他数据来源,程序涉及的运算主要是大数运算和椭圆曲线点乘算法诶!!
    mengzhuo
        18
    mengzhuo  
       2018-04-09 15:21:58 +08:00
    我看 sm2 依赖随机数,楼上有人说了可能是随机数速度跟不上。
    具体可以 strace, 实在不行就 linux perf 看看咯
    y3y
        19
    y3y  
    OP
       2018-04-09 15:37:39 +08:00
    @mengzhuo 谢谢啦 o( ̄▽ ̄)d
    for4die
        20
    for4die  
       2018-04-09 16:10:27 +08:00 via Android
    我用 cpu 挖坑的时候,用没有超线程的 cpu 可以跑到 100%,有超线程的 cpu 看起来跑不满
    nullen
        21
    nullen  
       2018-04-09 16:46:28 +08:00
    cpu affinity 了解一下。
    nullen
        22
    nullen  
       2018-04-09 16:47:23 +08:00
    @y3y 你这个是在操作生成比特币 or 以太坊钱包吗? 随机数是瓶颈。
    y3y
        23
    y3y  
    OP
       2018-04-09 17:20:59 +08:00
    @nullen 不是哦,SM2 生成签名。
    breeswish
        24
    breeswish  
       2018-04-09 17:30:58 +08:00
    off-cpu 火焰图看一下
    realpg
        25
    realpg  
       2018-04-10 11:35:29 +08:00
    @y3y #23
    检查算法
    你只是引用了一个库计算,想要看为啥卡 IO,解析你用的库源代码找 IO 瓶颈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   999 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:57 · PVG 04:57 · LAX 12:57 · JFK 15:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.