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

从 ubuntu22.04 虚拟机迁移到 fedora38 物理机, go tcp server 压测表现提升了 81% !

  •  
  •   Nazz · 308 天前 · 2760 次点击
    这是一个创建于 308 天前的主题,其中的信息可能已经有所发展或是发生改变。

    感觉提升有点离谱, 我对照的另一个服务提升微乎其微, 各位帮忙分析一波?

    fedora

    31 条回复    2023-05-25 14:35:06 +08:00
    aru
        1
    aru  
       308 天前   ❤️ 3
    迁移前和迁移后的硬件环境都没说明
    这是毫无意义的对比
    Kinnice
        2
    Kinnice  
       308 天前   ❤️ 1
    按理说你应该再做这两个尝试:
    ubuntu22.04 虚拟机迁移到 ubuntu22.04 物理机
    fedora38 虚拟机迁移到 fedora38 物理机
    另外保证内核参数要一致,tcp 连接数,超时之类的配置
    Nazz
        3
    Nazz  
    OP
       308 天前
    @Kinnice 连接数一样, 压测参数一样, 相同的 GOMAXPROCS 限制. 差异就是一个是虚拟机一个是物理机, 内核不一样, 对应的内核参数都是默认值
    Nazz
        4
    Nazz  
    OP
       308 天前
    @aru 硬件环境图上有, 可能看不太清楚 😂

    Ryzen R5 4650G, 2 * 8G DDR4 3200MHz
    Nazz
        5
    Nazz  
    OP
       308 天前
    @Kinnice 嗯, 再装个 fedora38 虚拟机试试. 物理机就算了, 重装系统麻烦
    Nazz
        6
    Nazz  
    OP
       308 天前
    编译器是 go1.20
    yyzh
        7
    yyzh  
       308 天前 via Android
    你这又没有直通又没有 sriov 的测来就完全是没用的数据
    Nazz
        8
    Nazz  
    OP
       308 天前
    @yyzh 我只是好奇为什么两个程序一个提升巨大一个几乎原地踏步, 都是 go websocket server
    Nazz
        9
    Nazz  
    OP
       308 天前
    @Nazz echo server
    hxndg
        10
    hxndg  
       308 天前   ❤️ 2
    额。。。。这种研究的唯一意义可能只是满足好奇心,因为从虚拟机到物理机变化的东西太多了。。。IO 层面,上下文层面都不一样。。。
    Nazz
        11
    Nazz  
    OP
       308 天前
    @hxndg 想要确定具体的原因还很艰难, 两个服务虽然都是基于标准网络库的 websocket server implementation, 但是具体实现差太远了, 两三千行代码
    Nazz
        12
    Nazz  
    OP
       308 天前
    @hxndg 如果能找到原因的话, 对性能优化可能会有帮助, 当然好奇心也是驱动力
    msg7086
        13
    msg7086  
       308 天前
    太多变量了,怎么给你分析。另外上面有人提了,你可以 SRIOV 把物理网卡放进去测性能看看。
    Nazz
        14
    Nazz  
    OP
       308 天前 via Android
    @msg7086 127.0.0.1 不涉及物理网卡。回头再测下 Fedora38 虚拟机吧,控制下变量
    msg7086
        15
    msg7086  
       308 天前
    @Nazz 原来是 localhost 么,那可能要看看 CPU 性能了。
    dzdh
        16
    dzdh  
       308 天前
    sysctl.conf ulimits 啥的都 100%完全一样吗
    Nazz
        17
    Nazz  
    OP
       308 天前 via Android
    @msg7086 同一颗 CPU. 装了双系统,一个 Windows10 加 VMware Ubuntu22.04 Server ,一个 Fedora38 Desktop
    Nazz
        18
    Nazz  
    OP
       308 天前 via Android
    @dzdh 没看 sysctl.conf ,没改过系统配置. ulimits 没报错,测试参数是 1000 连接,每连接发 1000 条 1KB 的 websocket 消息
    msg7086
        19
    msg7086  
       308 天前
    @Nazz 我的意思是,物理机 CPU 性能和虚拟化以后的比。
    Nazz
        20
    Nazz  
    OP
       308 天前 via Android
    @msg7086 纯计算的话不至于差距那么大。可能我的服务刚好契合了什么东西
    hefish
        21
    hefish  
       308 天前
    怎么。。。这虚机满足不了你了是吗?
    Nazz
        22
    Nazz  
    OP
       308 天前 via Android
    @hefish 物理机调试更方便
    jworg
        23
    jworg  
       308 天前   ❤️ 1
    kernel 都不一样,变量太多了,22.04.1 lts 还是 5.15 ,fedora 已经到 6.2 了,中间多了不少有意思的东西
    jworg
        24
    jworg  
       308 天前
    除了内核版本,消费级 cpu 还有睿频因素在那,实体机默认能睿频,虚拟机不一定能。
    Nazz
        25
    Nazz  
    OP
       308 天前
    @jworg Ryzen 4650G 基础频率 3.7GHz, 加速频率 4.2GHz, 0.5GHz 提升应该没那么大, 内核的影响大一些
    mkz
        26
    mkz  
       308 天前
    你这个环境主要就是 CPU 和内存
    Nazz
        27
    Nazz  
    OP
       308 天前
    @mkz 是的, 不涉及磁盘和路由器
    Nazz
        28
    Nazz  
    OP
       308 天前
    @mkz 内存够用, runtime.GOMAXPROCS(2) 限制了 2 * vCPU
    jworg
        29
    jworg  
       308 天前   ❤️ 1
    @Nazz 找了下,在 5.17 的时候确实有一个比较适合压测场景的 tcp 优化 https://www.phoronix.com/news/Linux-5.17-TCP-Optimization 验证的话看下 kernel 版本,在我印象中 ubuntu 22.04.1 是 5.15 ,可以通过 hwe 升级到 5.19 ,具体命令是 sudo apt install --install-recommends linux-generic-hwe-22.04 ,执行前先看下先前的版本,新的 22.04 lts 似乎已经升级到 5.19 了。如果是新的内核那就不是这个原因了。
    Nazz
        30
    Nazz  
    OP
       308 天前
    @jworg 下班后折腾下看看, 这个解释看起来很靠谱. 前面不小心讲错了, 我的 ubuntu 版本是 20.04 LTS
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1024 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 22:31 · PVG 06:31 · LAX 15:31 · JFK 18:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.