3

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

 1 year ago
source link: https://www.v2ex.com/t/942772
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  程序员

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

  Nazz · 8 小时 42 分钟前 · 1705 次点击

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

fedora
31 条回复    2023-05-25 14:35:06 +08:00
aru

aru      8 小时 37 分钟前   ❤️ 3

迁移前和迁移后的硬件环境都没说明
这是毫无意义的对比
Kinnice

Kinnice      8 小时 37 分钟前   ❤️ 1

按理说你应该再做这两个尝试:
ubuntu22.04 虚拟机迁移到 ubuntu22.04 物理机
fedora38 虚拟机迁移到 fedora38 物理机
另外保证内核参数要一致,tcp 连接数,超时之类的配置
Nazz

Nazz      8 小时 32 分钟前

@Kinnice 连接数一样, 压测参数一样, 相同的 GOMAXPROCS 限制. 差异就是一个是虚拟机一个是物理机, 内核不一样, 对应的内核参数都是默认值
Nazz

Nazz      8 小时 30 分钟前

@aru 硬件环境图上有, 可能看不太清楚 😂

Ryzen R5 4650G, 2 * 8G DDR4 3200MHz
Nazz

Nazz      8 小时 29 分钟前

@Kinnice 嗯, 再装个 fedora38 虚拟机试试. 物理机就算了, 重装系统麻烦
Nazz

Nazz      8 小时 28 分钟前

编译器是 go1.20
yyzh

yyzh      8 小时 26 分钟前 via Android

你这又没有直通又没有 sriov 的测来就完全是没用的数据
Nazz

Nazz      8 小时 24 分钟前

@yyzh 我只是好奇为什么两个程序一个提升巨大一个几乎原地踏步, 都是 go websocket server
Nazz

Nazz      8 小时 22 分钟前

@Nazz echo server
hxndg

hxndg      7 小时 35 分钟前   ❤️ 2

额。。。。这种研究的唯一意义可能只是满足好奇心,因为从虚拟机到物理机变化的东西太多了。。。IO 层面,上下文层面都不一样。。。
Nazz

Nazz      7 小时 17 分钟前

@hxndg 想要确定具体的原因还很艰难, 两个服务虽然都是基于标准网络库的 websocket server implementation, 但是具体实现差太远了, 两三千行代码
Nazz

Nazz      7 小时 3 分钟前

@hxndg 如果能找到原因的话, 对性能优化可能会有帮助, 当然好奇心也是驱动力
msg7086

msg7086      6 小时 38 分钟前

太多变量了,怎么给你分析。另外上面有人提了,你可以 SRIOV 把物理网卡放进去测性能看看。
Nazz

Nazz      6 小时 33 分钟前 via Android

@msg7086 127.0.0.1 不涉及物理网卡。回头再测下 Fedora38 虚拟机吧,控制下变量
msg7086

msg7086      6 小时 5 分钟前

@Nazz 原来是 localhost 么,那可能要看看 CPU 性能了。
dzdh

dzdh      6 小时 0 分钟前

sysctl.conf ulimits 啥的都 100%完全一样吗
Nazz

Nazz      5 小时 59 分钟前 via Android

@msg7086 同一颗 CPU. 装了双系统,一个 Windows10 加 VMware Ubuntu22.04 Server ,一个 Fedora38 Desktop
Nazz

Nazz      5 小时 56 分钟前 via Android

@dzdh 没看 sysctl.conf ,没改过系统配置. ulimits 没报错,测试参数是 1000 连接,每连接发 1000 条 1KB 的 websocket 消息
msg7086

msg7086      5 小时 56 分钟前

@Nazz 我的意思是,物理机 CPU 性能和虚拟化以后的比。
Nazz

Nazz      5 小时 48 分钟前 via Android

@msg7086 纯计算的话不至于差距那么大。可能我的服务刚好契合了什么东西
hefish

hefish      5 小时 45 分钟前

怎么。。。这虚机满足不了你了是吗?
Nazz

Nazz      5 小时 32 分钟前 via Android

@hefish 物理机调试更方便
jworg

jworg      5 小时 12 分钟前   ❤️ 1

kernel 都不一样,变量太多了,22.04.1 lts 还是 5.15 ,fedora 已经到 6.2 了,中间多了不少有意思的东西
jworg

jworg      5 小时 9 分钟前

除了内核版本,消费级 cpu 还有睿频因素在那,实体机默认能睿频,虚拟机不一定能。
Nazz

Nazz      5 小时 0 分钟前

@jworg Ryzen 4650G 基础频率 3.7GHz, 加速频率 4.2GHz, 0.5GHz 提升应该没那么大, 内核的影响大一些
mkz

mkz      4 小时 57 分钟前

你这个环境主要就是 CPU 和内存
Nazz

Nazz      4 小时 52 分钟前

@mkz 是的, 不涉及磁盘和路由器
Nazz

Nazz      4 小时 51 分钟前

@mkz 内存够用, runtime.GOMAXPROCS(2) 限制了 2 * vCPU
jworg

jworg      4 小时 47 分钟前   ❤️ 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

Nazz      4 小时 17 分钟前

@jworg 下班后折腾下看看, 这个解释看起来很靠谱. 前面不小心讲错了, 我的 ubuntu 版本是 20.04 LTS

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK