V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dangyuluo
V2EX  ›  C++

同一段 C++代码在 AWS aarch64 机器下居然有超过 40ms 的延迟?

  •  
  •   dangyuluo · 2021-01-16 23:08:36 +08:00 · 2880 次点击
    这是一个创建于 1425 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我们有一段代码,会检测某个函数的运行时间,50ms 以上则计失败。该函数目前可以理解为一个std::this_thread::sleep_for(10ms)。理论上有 40ms 的 margin 可以浪费。

    在 AWS 的 x86_64 机器下,测试没有任何问题。但是偶尔地,在 AWS a1.4xlarge(aarch64)机器下会超时。也没有超很多,1.66ms 。也就是说一个本应该执行 10ms 的函数 50ms 都没有执行完。

    我知道 aarch64 系统的性能确实不如 x86_64,但是这么大的差距是合理的么?

    17 条回复    2021-01-17 23:38:49 +08:00
    dorafmon
        1
    dorafmon  
       2021-01-16 23:13:29 +08:00
    好奇,蹲一个解释。这个函数没有做任何 io 么?
    dangyuluo
        2
    dangyuluo  
    OP
       2021-01-16 23:20:16 +08:00
    @dorafmon 没有做任何 io,单纯的 sleep_for
    cz5424
        3
    cz5424  
       2021-01-16 23:45:10 +08:00 via iPhone
    是不是高峰期共享 cpu 计算影响了?我没用过 aws 乱说的😹😹
    dangyuluo
        4
    dangyuluo  
    OP
       2021-01-16 23:47:15 +08:00
    @cz5424 有这种可能,同一台机器上确实也会跑其他的 test 。但是我没想到影响会这么大
    dinghao188
        5
    dinghao188  
       2021-01-16 23:58:26 +08:00
    怎么检测的,能简单介绍下吗
    Mohanson
        6
    Mohanson  
       2021-01-17 00:05:21 +08:00 via Android
    试试不要跑你自己的函数,可以写个斐波那契函数在两个平台上跑跑就知道性能多少比多少了,云上面的性能都很玄学,我前段时间同台机器跑纯计算的仿真器测试代码,一会 6 分钟一会 4 分钟,妈蛋,当时有人给我提的 issue 我优化完代码,尽然无法确切知道这个优化到底有没有用…
    Mohanson
        7
    Mohanson  
       2021-01-17 00:09:41 +08:00 via Android
    半个月前的 issue,最后代码拉自己的游戏机上跑测试才测出快了 10 啪
    https://github.com/mohanson/pywasm/issues/42#issuecomment-753610944
    dangyuluo
        8
    dangyuluo  
    OP
       2021-01-17 00:26:19 +08:00
    @dinghao188 在开始运行函数前获取时间戳(纳秒),运行函数后再获取一次。相减后判断。


    @Mohanson 好的,我再思考一下。谢谢
    opengps
        9
    opengps  
       2021-01-17 00:32:35 +08:00 via Android
    多开几个实例再试下,云集群里的实际物理资源位置每次新购都会有变动,说不定那次用的实例网络途径更短
    dorafmon
        10
    dorafmon  
       2021-01-17 00:40:23 +08:00
    我不明白的点在于要是只是 sleep_for 的话,那么应该两个机器上应该都只睡了 10ms 为什么会有不一样。
    allAboutDbmss
        11
    allAboutDbmss  
       2021-01-17 00:56:57 +08:00
    没有任何思路
    可以先找一台本地的 aarch64 arm 来跑一下
    mepwang
        12
    mepwang  
       2021-01-17 06:41:35 +08:00 via iPhone
    代码里取 os 精确到纳秒的时间戳,看看是不是 sleep_for 调用不精确。我记得以前的 sleep 调用误差很大的
    tianshilei1992
        13
    tianshilei1992  
       2021-01-17 08:03:27 +08:00
    Blocks the execution of the current thread for at least the specified sleep_duration.
    This function may block for longer than sleep_duration due to scheduling or resource contention delays.
    The standard recommends that a steady clock is used to measure the duration. If an implementation uses a system clock instead, the wait time may also be sensitive to clock adjustments.

    https://en.cppreference.com/w/cpp/thread/sleep_for
    dangyuluo
        14
    dangyuluo  
    OP
       2021-01-17 12:17:17 +08:00
    @tianshilei1992 我也有猜测是调度器的问题,但是惊讶于调度器居然 40ms 还不会分配时间片给当前任务
    wang93wei
        15
    wang93wei  
       2021-01-17 12:35:46 +08:00
    如果遇到这个问题,,,为什么不提工单问一下呢?
    dangyuluo
        16
    dangyuluo  
    OP
       2021-01-17 15:06:44 +08:00
    @wang93wei 因为我司不是 AWS 的付费支援客户,而要成为付费支援客户每个月的账单会增长 10%
    52coder
        17
    52coder  
       2021-01-17 23:38:49 +08:00
    本地跑遇到过类似的问题吗?性能上 aarch 不至于这么差,楼主有结论了麻烦更新下,最近也在移植程序到 aarch 和 mips
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2773 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:22 · PVG 21:22 · LAX 05:22 · JFK 08:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.