关于虚拟机中IPI中断的思考

本文探讨了虚拟机中IPI中断的性能瓶颈,尤其是HLT指令带来的虚拟化开销。通过测试和分析,发现启用idle=poll选项能显著减少IPI中断耗时,但可能导致物理机CPU资源浪费。halt_poll_ns机制提供了一种平衡,但在不同业务场景下需寻找最佳设置。总结了当前优化方案,并指出在私有云和公有云中如何选择合适的策略。
摘要由CSDN通过智能技术生成

前言

感谢intel的vt-x技术,让虚拟机大部分指令可以直接运行在CPU中,只有少部分敏感指令需要有VMM来模拟执行。其中,每个CPU的LAPIC接收到的中断是虚拟化的开销一个大头。

LAPIC接收到的中断分为外部中断,内部中断,IPI中断:

  1. 外部中断源主要是IO设备,重度使用的IO设备比如有网卡,磁盘控制器等。目前,dpdk,spdk技术在虚拟化中的应用,已经把网络,存储中断减少到了0。
  2. 内部中断源包括时钟,性能监控,错误检测,温度传感器。这几个中断,绝大多数日常使用虚拟机情况下发生频率极低。对虚拟化的开销影响很小。
  3. IPI中断是多核CPU系统中CPU彼此通信的唯一方法。主要使用在分布在不同CPU上的进程/线程彼此唤醒的情况中。比较常见的是网络场景,比如有请求到达时唤醒后端网络服务程序,比如:redis,nginx。以及整合了网络服务的别的系统。比如:mysql。

可见,目前公有云中,中断虚拟化中性能瓶颈点落在了IPI中断中。

测试

虚拟机中IPI中断开销到底多大?我们可以写一个内核模块来定量分析,可以利用内核中的smp_call_function_single()和smp_call_function_many()函数,来测量IPI性能。

在我的测试环境中,物理机采用的是Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz 2路共80超线程的CPU。虚拟机运行在KVM上的72核CentOS系统。

虚拟机默认配置

IPI类型

100000次IPI耗时(ns)

发给所有CPU

15601355147

发给同NUMA的一个CPU

230063725

发给跨NUMA的一个CPU

665893155

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值