海运的博客

Xen限制VM虚拟机磁盘IO

发布时间:June 8, 2013 // 分类:虚拟化 // No Comments

作为VPS服务商我们需要保证每个VPS公平的使用 host(服务器)的资源,避免某个VPS因为程序死循环、挂起、滥用等因素 “拖累”其他VPS,如果出现这个情况如何临时限制这个VPS的磁盘IO呢?有个办法是通过通过修改每个虚拟机CPU权重的办法间接、不精确的限制 IO. 在 Linux 上限制资源(CPU、内存、IO 等)的通常办法是用 cgroups,不过今天介绍的 ionice 要更容易一些。

首先找到哪个虚拟机(VPS)正在大量IO(假设是 vps0001),找到这个虚拟机后用xm list查出这个虚拟机使用的 ID 号,然后用ID配上blkback(blkback.24)找出这个虚拟机(通过Xen的 blkback 驱动)关联哪些硬盘(blkback.24.xvda 和 blkback.24.xvdb),以及所使用的进程号(25089 和 25090):

# xm list vps0001
Name                                      ID Mem(MiB) VCPUs State   Time(s)
vps0001                                   24     1024     2 -b----  70030.7

# ps aux | grep blkback.24
root      7434  0.0  0.1  61172   768 pts/16   D+   02:48   0:00 grep blkback.24
root     25089  0.0  0.0      0     0 ?        S<    2012   0:00 [blkback.24.xvda]
root     25090  0.0  0.0      0     0 ?        S<    2012   0:00 [blkback.24.xvdb]

找到进程号后我们就可以 ionice 了:

ionice -p 25089 -c 2 -n 7

使用 ionice 之前查一下帮助文件,-c 是指定调度类型,这里选择的是 2,best-effort;-n 指定调度优先级,0 最高,7最低;-p 是指定进程号:

OPTIONS
-c The scheduling class. 1 for real time, 2 for best-effort, 3 for
idle.

-n The scheduling class data. This defines the class data, if the
class accepts an argument. For real time and best-effort, 0-7 is
 valid data.

-p Pass in a process pid to change an already running process. If
this argument is not given, ionice will run the listed program
with the given parameters. 

ionice 把磁盘 IO 调度分成三类:

real time 实时调度,设置后立即访问磁盘,不管系统中其他进程是否有 IO,可能会使得其他进程处于等待状态,不能用在这里;
best effort 默认调度,可以指定调度优先级(从0到7,数值越小、优先级越高);同一优先级的进程采用 round-robin 算法调度;
idle 空闲调度,只有当前系统没有其他进程磁盘 IO 时,才能进行磁盘 IO.

额,如果太过分,我们就把这个进程的调度改成 idle,这样会极大降低这个虚拟机的 IO,虚拟机只能保持基本可用状态,不推荐~

ionice -p 25089 -c 3

原文:http://www.vpsee.com/2013/06/using-ionice-to-mediate-xen-vm-disk-io/

Centos5安装配置Xen虚拟化环境

发布时间:July 4, 2012 // 分类:虚拟化 // No Comments

OpenVZ安装可参考:Centos6.2安装配置OpenVZ虚拟化环境
Xen安装:

#https://www.haiyun.me
yum install kernel-xen xen

修改GRUB以Xen内核启动:

vim /boot/grub/menu.lst 
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-308.8.2.el5xen)
    root (hd0,0)
    kernel /xen.gz-2.6.18-308.8.2.el5
    module /vmlinuz-2.6.18-308.8.2.el5xen ro root=/dev/VolGroup00/LogVol00
    module /initrd-2.6.18-308.8.2.el5xen.img

关闭SELinux

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

重新启动系统:

reboot

重新登录验证Xen是否正常运行:

uname -a|grep xen
xm list

新建Xen虚拟机,如果服务器CPU支持全虚拟化可直接使用ISO安装Xen虚拟机,CPU支持半虚拟机要使用网络安装,如果有相应的Xen模板可直接使用模板新建。
本次以网络安装Centos5.8为例,可将下载的ISO解压至本地电脑,以127.0.0.1/iso安装,也可以通过互联网安装,如http://mirrors.163.com/centos/5.8/os/i386/

mkdir /vm #新建VM目录
dd if=/dev/zero of=/vm/101.img bs=1M count=10240 #新建虚拟机硬盘文件,10G
virt-install -n vm101 -r 128 -f /vm/101.img --nographics -p -l http://mirrors.163.com/centos/5.8/os/i386/
-n #虚拟机名称
-r #虚拟机内存
-f #虚拟机文件
--nograhics #无X环境,以字符界面安装

Xen虚拟机管理:

xm list #列出VM列表
xm start vm101 #启动虚拟机
xm shutdown vm 101 #关闭虚拟机
xm console vm01 #打开虚拟机管理界面
分类
最新文章
最近回复
  • 海运: 恩山有很多。
  • swsend: 大佬可以分享一下固件吗,谢谢。
  • Jimmy: 方法一 nghtp3步骤需要改成如下才能编译成功: git clone https://git...
  • 海运: 地址格式和udpxy一样,udpxy和msd_lite能用这个就能用。
  • 1: 怎么用 编译后的程序在家里路由器内任意一台设备上运行就可以吗?比如笔记本电脑 m参数是笔记本的...
  • 孤狼: ups_status_set: seems that UPS [BK650M2-CH] is ...
  • 孤狼: 擦。。。。apcupsd会失联 nut在冲到到100的时候会ONBATT进入关机状态,我想想办...
  • 海运: 网络,找到相应的url编辑重发请求,firefox有此功能,其它未知。
  • knetxp: 用浏览器F12网络拦截或监听后编辑重发请求,修改url中的set为set_super,将POS...
  • Albert: 啊啊啊啊啊啊啊啊啊 我太激动了,终于好了英文区搜索了半天,翻遍了 pve 论坛没找到好方法,博...