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

news/2024/4/26 2:56:06/文章来源:https://blog.csdn.net/lingshengxiyou/article/details/128078703

前言

感谢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

为了知道IPI测试时kvm在背后到底进行了什么动作。我们使用perf kvm工具来统计。

perf kvm stat record -a sleep 100

人工掐好时间,在IPI测试时在物理机上运行该命令,测试完成时中断perf工具。

perf kvm stat report

采用该命令来分析数据。

虚拟机中IPI的开销基本花在了MSR_WRITE 和 HLT虚拟化上。

我们知道HLT是由于CPU进入idle状态时,就会调用该指令把CPU挂起。这样虚拟CPU挂起后就能出让物理CPU给其它进程使用。如果我们不允许虚拟机中CPU挂起会如何呢?可以修改虚拟机启动选项,增加idle=poll选项。

虚拟机启动时开启idle=poll

IPI类型

100000次IPI耗时(ns)

发给所有CPU

8457203324

发给同NUMA的一个CPU

177809074

发给跨NUMA的一个CPU

243261198

在虚拟机角度观察,IPI中断耗时明显减少,特别是跨NUMA的情况。

在物理机角度观察,从VM-EXIT到VM-ENTRY之间经历的时间,从5956389325us减少到了30678080us。数量级的减少。

分析

为何HLT的虚拟化,消耗了那么多时间?谷歌工程师David Matlack的一篇文章给了我们答案。这里引用他的文章截图:

引用自David Matlack 文章截图

这篇文章的测试环境,使用的是x2apic中断控制器,虚拟机发起IPI中断通过写入MSR寄存器开始,到目标VCPU调用IPI中断服务程序结束。

从图可见,时间集中消耗在了kvm_vcpu_kick()和schedule()上。当VCPU执行HLT指令挂起自己,陷入VMM处理,VMM知道该VCPU目前不需要使用了,便将该VCPU所在线程挂起进入睡眠状态。当另一个VCPU需要唤醒该挂起的VCPU时,就在虚拟机内发起IPI中断,陷入到VMM中,随后便是执行kvm_vcpu_kick()和schedule()函数,最后注入IPI中断到目标VCPU。

虚拟机使用idle=poll启动选项,能够完全避免VCPU执行HTL指令,因此,该VCPU在物理机上对应的线程将一直占用cpu(除非被中断或者抢占),那么该线程几乎不会睡眠,那么kvm_vcpu_kick()和schedule()调用开销将大幅下降(假设系统中没有别的高优先级进程和频繁外部中断)(如下图)。这也就是为何虚拟机中IPI测试耗时减少的原因。

引用自David Matlack 文章截图

进一步

看起来设置虚拟机idle=poll启动选项完全避免了HTL指令执行,可以大幅提升虚拟机中IPI中断性能,这将直接提升网络服务性能。问题真正解决了吗?答案是否定的。

  1. 从虚拟机角度来看,IPI中断性能是提高了,网络,数据库服务性能都能提高。但是从物理机角度来看,由于本该挂起进入睡眠的VCPU,现在不再睡眠,而是持续占有CPU。这对云主机可不是件好事情,因为这部分"空闲"CPU配额本该交给别的虚拟机来执行,现在却被禁止了HTL的虚拟机在空转,实在是在经济上不划算。
  2. 虚拟机中禁止HTL也不是所有情况下都有明显效果。假如虚拟机中的业务场景CPU负载很高,到了100%,该场景中自然不会调用HTL(VCPU没有空闲,自然不会进入idle状态)。因此,修改idle=poll启动选项就失去了作用。

为了在物理机经济效益和虚拟机性能最大化之间取得折中,目前内核的方案是提供了halt_poll_ns机制,即在VCPU HTL之前,先轮询下有没有虚拟中断要来,来的话就马上注入虚拟机,如果超过轮询上限都没有虚拟中断过来,才真正进入睡眠。

测试halt_poll_ns方案,echo 2000000 > /sys/module/kvm/parameters/halt_poll_ns

IPI类型

100000次IPI耗时(ns)

发给所有CPU

12530570738

发给同NUMA的一个CPU

185949471

发给跨NUMA的一个CPU

283615009

测试结果介于虚拟机缺省配置和设置idle=poll性能之间。

汇总下perf kvm统计的物理机处理虚拟化经过的挂钟时间。

缺省配置

idle=poll

halt_poll_ns=2000000

5956389325us

30678080us

4858977523

值得注意的是,缺省配制和halt_poll_ns=2000000条件下,perf kvm统计的物理机处理虚拟化的挂钟时间包括了VCPU睡眠状态的时间。所以这两组值不能完全的反映虚拟化开销(需要剔除VCPU睡眠时间)。

总结

HTL指令导致的IPI中断虚拟化开销是目前中断虚拟化性能瓶颈,目前的优化方案都是在经济效益-虚拟机性能之间的平衡方案。本文分析了HTL+IPI场景的性能开销原因。在没有更好的解决方案出现前,只能根据现有业务方案选择合适的方法。

笔者设想到的业务场景中,如果是私有云中,使用KVM主要目的是为了隔离系统,对物理机成本不敏感情况下,不妨设置虚拟机的idle=poll选项。如果是公有云中,不妨设置halt_poll_ns值,但是如何设置该值以达到性能-经济效益的平衡,需要进一步研究。

原文链接:https://cloud.tencent.com/developer/article/1400629 

(免费订阅,永久学习)学习地址: Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家-学习视频教程-腾讯课堂

更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,永久学习,或点击这里加qun免费
领取,关注我持续更新哦! ! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_38581.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SQL Server + MySQL三】数据库设计【ER模型+UML模型+范式】 + 数据库安全性

极其感动!!!当时学数据库的时候,没白学!! 时隔很长时间回去看数据库的笔记都能看懂,每次都靠这份笔记巩固真的是语雀分享要花钱,要不一定把笔记给贴出来(;༎ຶД༎ຶ) ,除…

第2-4-8章 规则引擎Drools实战(1)-个人所得税计算器

文章目录9. Drools实战9.1 个人所得税计算器9.1.1 名词解释9.1.2 计算规则9.1.2.1 新税制主要有哪些变化?9.1.2.2 资较高人员本次个税较少,可能到年底扣税增加?9.1.2.3 关于年度汇算清缴9.1.2.4 个人所得税预扣率表(居民个人工资、…

LeetCode - 76 最小覆盖子串

目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 76. 最小覆盖子串 - 力扣(LeetCode) 题目描述 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回…

iClient for Leaflet设置地图掩膜

作者:lly 文章目录背景一、实现思路二、步骤代码三、完整代码背景 最近很多小伙伴需要只展示地图的某个行政区域,由于地图存在多个图层,所以图层过滤的方式并不能很好的适用,这个时候,我们可以考虑给地图覆盖一层掩膜…

界面控件DevExpress WPF的主题设计器,可轻松完成应用主题研发

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 DevExpress WPF的The…

双十二薅羊毛!这几款数码好物不可错过

双十二即将开始,在这段时间里有的人已经将自己心仪的塞满了整个购物车了吧,而有的人还没想好到底要入手什么,如果你也是还在纠结的话,不知道该买什么又或是想知道哪些产品更适合你入手,不妨来看看小编今天为你带来的这…

MySQL第一弹

目录 一、数据库的基本概念 1、数据 (Data) 2、表 3、数据库 4、数据库管理系统(DBMS) 5、数据库系统 6、DBMS的工作模式如下 二、数据库的发展史 1.第一代数据库(淘汰) 2.第二代数据库(现在用的基本上都是二代) 3.第…

亲戚小孩月薪17k,而我只有4k+,好慌......

我们总是在悲观与乐观中反复折磨自己,感觉自己一事无成。总是眼高手低,总以为大运会砸到自己,遇到挫折就会感到很沮丧。 大学四年没考到英语六级证书,小学教资考了两次。现在想要考研,但总是觉得来不及,或…

磁盘划分和磁盘格式化

文章目录列出装置的 UUID 等参数parted 列出磁盘的分区表类型与分区信息磁盘分区:gdisk、fdisk用 gdisk 新增分区槽用 gdisk 删除一个分区槽磁盘格式化(建立文件系统)XFS 文件系统 mkfs.xfsXFS 文件系统 for RAID 效能优化(Option…

java中csv导出-追加-列转行

1、问题描述 业务数据量比较大,业务上查询条件写入数据库,java定时去读,然后导出csv,供用户下载,因为有模板要求,前一部分是统计信息,后一部分是明细信息;首先csv中写入统计信息&am…

IDEA的日常快捷键大全

更多内容在:https://javaxiaobear.gitee.io/ ​​​​​​第1组:通用型 说明 快捷键 复制代码-copy ctrl c 粘贴-paste ctrl v 剪切-cut ctrl x 撤销-undo ctrl z 反撤销-redo ctrl shift z 保存-save all ctrl s 全选-select all …

Python连接Clickhouse遇坑篇,耗时一天成功连接!

首先!!!!!!!!!不要看网上那些乱七八糟的使用clickhouse-driver连接了,真tm难用,端口能搞死你那种,超级烦! 推荐直接看官方…

数商云SRM系统招标流程分享,助力建筑材料企业降低采购成本,提高采购效率

近年来,随着主管部门对房地产市场的监管非常严格,房地产业的发展已进入瓶颈期,这对与房地产业密切相关的建材行业产生了很大的影响。同时,我国城市化进入成熟期,行业规模发展动力减弱,建材行业增长压力明显…

Kotlin高仿微信-第8篇-单聊

Kotlin高仿微信-项目实践58篇详细讲解了各个功能点,包括:注册、登录、主页、单聊(文本、表情、语音、图片、小视频、视频通话、语音通话、红包、转账)、群聊、个人信息、朋友圈、支付服务、扫一扫、搜索好友、添加好友、开通VIP等众多功能。 Kotlin高仿…

VauditDemo靶场代码审计

靶场搭建 将下载好的VAuditDemo_Debug目录复制到phpstudy的www目录下,然后将其文件名字修改成VAuditDemo,当然你也可以修改成其他的 运行phpstudy并且访问install目录下的install.php,这里我访问的是http://127.0.0.1/VAuditDemo/install/in…

竞赛——【蓝桥杯】2022年12月第十四届蓝桥杯模拟赛第二期C/C++

1、最小的2022 问题描述 请找到一个大于 2022 的最小数,这个数转换成二进制之后,最低的 6 个二进制为全为 0 。 请将这个数的十进制形式作为答案提交。 答案提交 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数…

Java学习之继承练习题

目录 第一题 代码 输出流程分析 运行结果 考察知识点 第二题 代码 流程分析 运行结果 第三题 题目要求 我的代码 代码改进 第一题 代码 package com.hspedu.extends_.exercise;public class ExtendsExercise01 {public static void main(String[] args) {B b new …

Sentinel-2(哨兵2数据介绍)

哥白尼 Sentinel-2(哨兵 2)计划是一个由两颗相同的 Sentinel-2 极轨卫星组成的星座,两颗卫星相位差 180,运行在平均高度 786 km 的太阳同步轨道上。每颗卫星在其轨道上的位置由双频全球导航卫星系统(GNSS)接…

ggrcs 包2.4绘制RCS(限制立方样条图)实际操作演示(1)

ggrcs 包2.4版本已经发布一段时间了,大概几个月了吧,收到不少好评, 没听说太大的问题,最主要的问题有两个: 1.是说变量不是数字变量。 2.是说数据超过10万,无法处理 第一个问题非常好处理,这…

R语言MCMC:Metropolis-Hastings采样用于回归的贝叶斯估计

全文链接:http://tecdat.cn/?p19664 MCMC是从复杂概率模型中采样的通用技术。蒙特卡洛马尔可夫链Metropolis-Hastings算法(点击文末“阅读原文”获取完整代码数据)。问题如果需要计算有复杂后验pdf p(θ| y)的随机变量…