CN104346212A - 一种虚拟机i/o性能的优化方法 - Google Patents

一种虚拟机i/o性能的优化方法 Download PDF

Info

Publication number
CN104346212A
CN104346212A CN201410555808.6A CN201410555808A CN104346212A CN 104346212 A CN104346212 A CN 104346212A CN 201410555808 A CN201410555808 A CN 201410555808A CN 104346212 A CN104346212 A CN 104346212A
Authority
CN
China
Prior art keywords
virtual machine
operating system
performance
optimization method
client operating
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201410555808.6A
Other languages
English (en)
Inventor
潘睿
侯德龙
曹玲玲
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Inspur Electronic Information Industry Co Ltd
Original Assignee
Inspur Electronic Information Industry Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Inspur Electronic Information Industry Co Ltd filed Critical Inspur Electronic Information Industry Co Ltd
Priority to CN201410555808.6A priority Critical patent/CN104346212A/zh
Publication of CN104346212A publication Critical patent/CN104346212A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)
  • Hardware Redundancy (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种虚拟机I/O性能的优化方法,一方面,通过合并客户操作系统中连续的I/O指令,降低虚拟机的时钟中断频率,从而降低环境切换的开销;另一方面,消除客户操作系统中的冗余操作,包括在虚拟化环境下无效的函数冗余的I/O调度以及虚拟网卡驱动对NAPI的支持,使虚拟机只执行必要的操作,从而提高系统的性能。

Description

一种虚拟机I/O性能的优化方法
技术领域
本发明涉及一种虚拟机I/O性能的优化方法。
背景技术
KVM虚拟机(Kernel-basedVirtualMachine)使用软件模拟的方式实现I/O设备的虚拟化,其实现方式是由内核中的KVM模块截获客户操作系统中的I/O请求,交给运行在宿主操作系统(HostOS)上的QEMU,QEMU将这些请求转换为对宿主操作系统的系统调用,通过宿主操作系统的设备驱动访问物理硬件,实现对I/O设备的虚拟化。该方法依赖QEMU对设备的模拟,因此实现简洁,但是由于I/O处理流程中涉及多个环境,切换较多,其I/O性能很不理想。虽然KVM较新的版本中已经将一些关键设备的虚拟化进行了优化,但是主要的设备,例如磁盘和网卡虚拟化的性能开销仍旧较大。
目前,运行在虚拟机上的客户操作系统(GuestOS)是面向物理机器开发的普通操作系统,其中存在不适应虚拟化环境的因素,影响虚拟机的I/O性能。
根据现有的分析,这些不适应的因素可以分为3类:
(1)在虚拟化环境下一些引起短时间内频繁发生虚拟机陷入的操作。优化时,应该尽量降低这类操作发生的频率,或者可以通过批量处理进行优化。
(2)冗余的操作。这些操作在虚拟化环境下不发生实际的作用;或者有些操作在客户操作系统和VMM中重复实现。冗余的操作通常可以直接去除。
(3)可以由客户操作系统实现,也可以由VMM或者硬件实现的功能。通常情况下,越底层执行效率越高。因此,可以由VMM或硬件完成的功能通常都可以交由它们完成,尽量减少客户操作系统的工作,提高整体性能。
发明内容
本发明要解决的技术问题是:针对KVM虚拟化环境的特征,本发明通过修改客户操作系统的源码或其配置,达到降低环境切换代价、精简客户操作系统的目的,从而提高KVM虚拟机的I/O性能。针对第3类问题的优化已经有了较多的研究成果,本发明主要针对前两类客户操作系统的问题进行优化。
本发明所采用的技术方案为:
一种虚拟机I/O性能的优化方法,所述优化方法通过合并客户操作系统中连续的I/O指令,降低虚拟机的时钟中断频率,从而降低环境切换的开销,并通过消除客户操作系统中的冗余操作,使虚拟机只执行必要的操作,从而提高系统的性能。
客户操作系统的磁盘驱动中,存在一些代码段,包含了连续的I/O指令。每当执行到一条I/O指令,都会引起虚拟机陷入,使得这一段代码连续陷入。因此可以将这些指令合并成一个操作,一次陷入KVM进行处理。
合并方法可以采用静态合并的方法,包括静态分析连续陷入的代码、静态合并指令,将一组I/O指令替换成一个vmcall调用(vmcall类似于操作系统中的系统调用,客户操作系统中调用vmcall之后,将切换到VMM进行处理),一次主动陷入KVM,替换方法是将每条I/O指令的信息,包括in/out、端口、值,依次放入一个数组,该数组的地址和长度作为参数由vmcall传递给KVM处理。KVM反过来从数组中将I/O操作的参数依次取出,逐条进行模拟。
合并方法也可以采用动态的半虚拟化方法,也就是进行动态的代码段替换,包括在运行时进行动态监控,找到热点的代码段,动态合并指令,生成新的代码片段,然后通过加入跳转指令,或者通过替换包含热点代码的整个函数,实现代码段替换;或者,运行时,当一个I/O操作发生陷入,在KVM中预取客户操作系统的后续操作,当发现多个可以合并的I/O时,则一次模拟执行完毕,再返回客户操作系统。
所述优化方法可以通过降低虚拟机的时钟中断频率,从而降低环境切换的开销。
时钟中断是另一个频繁引起虚拟机陷入的原因,每个时钟中断到来时,都会引起虚拟机陷入VMM。对于非实时应用,可以直接修改客户操作系统的配置,通过降低时钟频率,减少虚拟机陷入的频率。
此外,还可以采用对客户操作系统透明的降低时钟频率的方法。KVM虚拟机的时钟是由KVM模拟PIT实现的,PIT可以产生clock信号,其频率近似是1193181Hz,每当clock信号到来时,PIT通道0的计数器自动减1,当计数器减到0时,就通过IRQ0向系统产生一次时钟中断。KVM虚拟的PIT也是这样的工作原理。因此,通过修改虚拟PIT通道0计数器的初始值,就可以设定时钟中断的频率,例如,1000Hz的时钟频率,PIT通道0计数器初始值为1193181/1000=1193,100Hz时,则为1193181/100=11932。也就是说,如果修改系统初始化时写入vPIT通道0的计数器值,就可以对客户操作系统透明地修改其时钟频率。具体方法是修改pitloadcount函数中写入vPIT通道0的初始值。
所述优化方法可以通过消除客户操作系统中的冗余操作,使虚拟机只执行必要的操作,从而提高系统的性能。
冗余的操作是指在虚拟化环境下不发生实际的作用或者在客户操作系统和VMM或宿主操作系统中重复实现的操作。需要找到这些可能冗余的操作,将其从客户操作系统中去除,从而优化KVM虚拟机的I/O性能。
所述冗余操作包括在虚拟化环境下无效的冗余函数。如:上层调用函数函数verifypmtmrrate,该函数的主要工作是调整主板时钟,该操作在虚拟机环境下是多余的。对于这种操作,只需要修改客户操作系统,简单将其去除,就可以适当地提高客户操作系统的运行效率。
所述冗余操作包括在虚拟化环境下的冗余的I/O调度。
在I/O请求提交驱动之前,操作系统通常要对I/O请求进行调度:通过对磁盘I/O请求的合并和排序,降低磁盘的寻道时间,提高磁盘旋转时读取数据的效率,从而降低I/O操作的总时间,增加单位时间内的I/O操作次数,提高系统整体的I/O效率。
KVM基于宿主操作系统的结构,使得客户操作系统的I/O操作总是通过QEMU进行系统调用,在宿主操作系统内核中再逐层向下传递到物理硬件。该流程使得客户操作系统的I/O请求要经过客户操作系统和宿主操作系统的两次I/O调度,客户操作系统中的调度结果必然要由宿主操作系统再次调度,显然冗余。一方面,客户操作系统并不知道物理磁盘信息,这次调度不一定有效;另一方面,当多个客户操作系统同时运行时,通常情况下,所有I/O操作需要由宿主操作系统统一调度以获得整体性能的最大化。
基于这两方面原因,通过去掉了客户操作系统中的磁盘I/O调度,使得所有I/O请求都直接提交给驱动,这样,既减少了冗余的操作过程,也使客户操作系统的I/O请求获得立即处理。当宿主操作系统采用默认的CFQI/O调度器时,经过该优化,虚拟机按块写的性能提高了6.01%;而虚拟机按块读的性能提高了5.64%。
所述冗余操作还包括虚拟网卡驱动对NAPI的支持。
网卡的NAPI技术是指以主动查询结合中断的方式降低中断发生的频率。在虚拟化环境中,客户操作系统所看到的是虚拟网卡,虚拟网卡并不能直接产生中断,并可能采用其它特定的事件通知机制代替中断机制。因此,客户操作系统网卡驱动中的NAPI功能多余,反而会浪费CPU时间。
本发明有益效果:本发明一方面,通过合并客户操作系统中连续的I/O指令,降低虚拟机的时钟中断频率,从而降低环境切换的开销;另一方面,消除客户操作系统中的冗余操作,包括在虚拟化环境下无效的函数冗余的I/O调度以及虚拟网卡驱动对NAPI的支持,使虚拟机只执行必要的操作,从而提高系统的性能。
具体实施方式
下面结合具体实施例,对本发明进一步说明:
一种虚拟机I/O性能的优化方法,所述优化方法通过合并客户操作系统中连续的I/O指令,降低虚拟机的时钟中断频率,从而降低环境切换的开销,并通过消除客户操作系统中的冗余操作,使虚拟机只执行必要的操作,从而提高系统的性能。 
客户操作系统的磁盘驱动中,存在一些代码段,包含了连续的I/O指令。每当执行到一条I/O指令,都会引起虚拟机陷入,使得这一段代码连续陷入。因此可以将这些指令合并成一个操作,一次陷入KVM进行处理。我们采用了静态合并的方法,将一组I/O指令替换成一个vmcall调用,一次主动陷入KVM,替换方法是将每条I/O指令的信息,包括in/out、端口、值,依次放入一个数组,该数组的地址和长度作为参数由vmcall传递给KVM处理。KVM反过来从数组中将I/O操作的参数依次取出,逐条进行模拟。
例如,/driver/ide/ide-disk.c中的idedorwdisk函数,存在如下一段代码(代码段1)
/driver/ide/ide-disk.c
hwif->OUTB(tasklets[1],IDE_FEATYRE_REG);
hwif->OUTB(tasklets[3],IDE_NSECTOR_REG);
hwif->OUTB(tasklets[7],IDE_SECTOR_REG);
hwif->OUTB(tasklets[8],IDE_LCYL_REG);
hwif->OUTB(tasklets[9],IDE_HCYL_REG);
hwif->OUTB(tasklets[0],IDE_FEATURE_REG);
hwif->OUTB(tasklets[2],IDE_NSECTOR_REG);
hwif->OUTB(tasklets[4],IDE_SECTOR_REG);
hwif->OUTB(tasklets[5],IDE_LCYL_REG);
hwif->OUTB(tasklets[6],IDE_HCYL_REG);
hwif->OUTB(0x00|drive->select,all,IDE_SELECT_REG);
该段代码包括了11次连续的outb,将会引起11次连续的虚拟机陷入。
将这11条outb合并为一个vmcall调用,得到如代码段2所示的代码:
/driver/ide/ide-disk.c
struct io_insn io_out[11]; //保存I/O指令的数组
usigned long io_gpa,io_len;
#define IO_OUT(x,_type,_val,_port) \
   io_out[x].type=_type,
   io_out[x].port=_port,
   io_out[x].val=_val
//把I/O指令的信息依次放入io_insn数组:
IO_OUT(0,OUTB,tasklets[1],IDE_FEATYRE_REG);
IO_OUT(1,OUTB,tasklets[3],IDE_NSECTOR_REG);
IO_OUT(2,OUTB,tasklets[7],IDE_SECTOR_REG);
IO_OUT(3,OUTB,tasklets[8],IDE_LCYL_REG);
IO_OUT(4,OUTB,tasklets[9],IDE_HCYL_REG);
IO_OUT(5,OUTB,tasklets[0],IDE_FEATURE_REG);
IO_OUT(6,OUTB,tasklets[2],IDE_NSECTOR_REG);
IO_OUT(7,OUTB,tasklets[4],IDE_SECTOR_REG);
IO_OUT(8,OUTB,tasklets[5],IDE_LCYL_REG);
IO_OUT(9,OUTB,tasklets[6],IDE_HCYL_REG);
IO_OUT(10,OUTB,0x00|drive->select,all,IDE_SELECT_REG);
//由于KVM和客户操作系统所见地址空间不同,需要把io_insn
//数组地址转换为物理地址,以便KVM访问:
io-gpa=virt_to_phys((unsigned long)io_len,0);
io_len=11;//I/O指令数
vmcall(XKVM_IO_COALESCE,io_gpa,io_len,0);
//调用vmcall陷入,其参数包括io_insn的地址和长度
通过代码段2合并为一个vmcall,原来的11次陷入变成1次陷入,可以极大地降低陷入KVM的频率。
所述冗余操作包括在虚拟化环境下无效的冗余函数。
所述冗余操作包括在虚拟化环境下的冗余的I/O调度。
所述冗余操作还包括虚拟网卡驱动对NAPI的支持。

Claims (6)

1.一种虚拟机I/O性能的优化方法,其特征在于:所述优化方法通过合并客户操作系统中连续的I/O指令,降低虚拟机的时钟中断频率,从而降低环境切换的开销,并通过消除客户操作系统中的冗余操作,使虚拟机只执行必要的操作,从而提高系统的性能。
2.根据权利要求1所述一种虚拟机I/O性能的优化方法,其特征在于:所述冗余操作包括在虚拟化环境下无效的冗余函数。
3.根据权利要求1所述一种虚拟机I/O性能的优化方法,其特征在于:所述冗余操作包括在虚拟化环境下的冗余的I/O调度。
4.根据权利要求1所述一种虚拟机I/O性能的优化方法,其特征在于:所述冗余操作还包括虚拟网卡驱动对NAPI的支持。
5.根据权利要求1-4任一所述一种虚拟机I/O性能的优化方法,其特征在于:合并客户操作系统中连续的I/O指令采用静态合并的方法,包括静态分析连续陷入的代码、静态合并指令,将一组I/O指令替换成一个vmcall调用,一次主动陷入KVM,替换方法是将每条I/O指令的信息,包括in/out、端口、值,依次放入一个数组,该数组的地址和长度作为参数由vmcall传递给KVM处理;KVM反过来从数组中将I/O操作的参数依次取出,逐条进行模拟。
6.根据权利要求1-4任一所述一种虚拟机I/O性能的优化方法,其特征在于:合并方法采用动态的半虚拟化方法,进行动态的代码段替换,包括在运行时进行动态监控,找到热点的代码段,动态合并指令,生成新的代码片段,然后通过加入跳转指令,或者通过替换包含热点代码的整个函数,实现代码段替换;或者,运行时,当一个I/O操作发生陷入,在KVM中预取客户操作系统的后续操作,当发现多个可以合并的I/O时,则一次模拟执行完毕,再返回客户操作系统。
CN201410555808.6A 2014-10-20 2014-10-20 一种虚拟机i/o性能的优化方法 Pending CN104346212A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410555808.6A CN104346212A (zh) 2014-10-20 2014-10-20 一种虚拟机i/o性能的优化方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410555808.6A CN104346212A (zh) 2014-10-20 2014-10-20 一种虚拟机i/o性能的优化方法

Publications (1)

Publication Number Publication Date
CN104346212A true CN104346212A (zh) 2015-02-11

Family

ID=52501898

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410555808.6A Pending CN104346212A (zh) 2014-10-20 2014-10-20 一种虚拟机i/o性能的优化方法

Country Status (1)

Country Link
CN (1) CN104346212A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106255960A (zh) * 2015-04-02 2016-12-21 三菱电机株式会社 冗余化系统以及通信单元
CN108762763A (zh) * 2018-05-16 2018-11-06 中山大学 面向大规模复杂数据应用领域的并行i/o优化方法
CN111045793A (zh) * 2020-03-13 2020-04-21 支付宝(杭州)信息技术有限公司 一种在虚拟机中执行功能模块的方法和装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101706742A (zh) * 2009-11-20 2010-05-12 北京航空航天大学 一种基于多核动态划分的非对称虚拟机i/o调度方法
CN102135866A (zh) * 2010-10-29 2011-07-27 华南理工大学 一种基于Xen安全计算机显示优化的方法
CN103064730A (zh) * 2012-12-20 2013-04-24 华中科技大学 一种面向云计算环境的两级磁盘调度方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101706742A (zh) * 2009-11-20 2010-05-12 北京航空航天大学 一种基于多核动态划分的非对称虚拟机i/o调度方法
CN102135866A (zh) * 2010-10-29 2011-07-27 华南理工大学 一种基于Xen安全计算机显示优化的方法
CN103064730A (zh) * 2012-12-20 2013-04-24 华中科技大学 一种面向云计算环境的两级磁盘调度方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
张彬彬 等: ""修改客户操作系统优化KVM虚拟机的I/O性能"", 《计算机学报》 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106255960A (zh) * 2015-04-02 2016-12-21 三菱电机株式会社 冗余化系统以及通信单元
CN106255960B (zh) * 2015-04-02 2018-02-09 三菱电机株式会社 冗余化系统以及通信单元
CN108762763A (zh) * 2018-05-16 2018-11-06 中山大学 面向大规模复杂数据应用领域的并行i/o优化方法
CN111045793A (zh) * 2020-03-13 2020-04-21 支付宝(杭州)信息技术有限公司 一种在虚拟机中执行功能模块的方法和装置

Similar Documents

Publication Publication Date Title
CN102207886B (zh) 虚拟机快速仿真辅助
US20180004578A1 (en) Techniques for distributed processing task portion assignment
CN108958157B (zh) 控制程序控制调度方法、装置、计算机设备以及存储介质
EP3084614B1 (en) Secure enclaves for use by kernel mode applications
CN101714091B (zh) 用于在操作系统初始化期间显示平台图形的方法和系统
US9164784B2 (en) Signalizing an external event using a dedicated virtual central processing unit
CN102591715B (zh) 一种使用多队列技术的虚拟机网络性能优化的实现方法
CN103282881A (zh) 通过虚拟化直接共享智能设备
US9959134B2 (en) Request processing using VM functions
Kim et al. Improving performance by bridging the semantic gap between multi-queue SSD and I/O virtualization framework
KR20140111998A (ko) 공동 설계 프로세서에서 격리된 실행 환경의 생성
CN103197949B (zh) 用于利用具有至少两个虚拟机的硬件平台的资源的方法和装置
CN104598294A (zh) 用于移动设备的高效安全的虚拟化方法及其设备
WO2013123405A1 (en) Profiling and sequencing operators executable in an emulated computing system
US20180173573A1 (en) Switching data sources during rolling upgrade of a leader-based distributed service with minimal disruptions
TWI518502B (zh) Apparatus, method and system for resilient computing cloud system
CN102307208A (zh) 基于云计算的虚拟机运行控制装置及其运行控制方法
WO2015009267A1 (en) Techniques for controlling use of locks
CN104346212A (zh) 一种虚拟机i/o性能的优化方法
US20160216965A1 (en) Clearing specified blocks of main storage
US10255093B2 (en) Techniques for portable computing device virtualization
CN105808391A (zh) 一种热替换cpu节点的方法及装置
KR101077908B1 (ko) 서버 가상화 장치
CN101853219B (zh) 基于虚拟化平台的磁盘页面换入的方法
US9928068B2 (en) Hardware managed dynamic thread fetch rate control

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication

Application publication date: 20150211

RJ01 Rejection of invention patent application after publication