KVM虛擬化技術 筆記
[S1 虛擬化與雲計算]
通過網絡獲取所需服務
分為三類:
SaaS EndUsers 基礎設施類
PaaS ApplicationDeveloper 平臺服務
IaaS NetworkArchitects 軟件服務
私有雲:
1.部署在企業內部網絡
2.部署在雲服務商上
現大規模商用的廠家
亞馬遜IaaS 全球最大的公有雲服務提供商
威瑞VMware vSphere 私有雲占有率最高的虛擬化解決方案
思傑Citrix Xen
RHEV
IBM藍雲
虛擬化分類:
1.軟件虛擬化
2.硬件方案
或
1.準虛擬化 缺乏硬件支持情況
2.全虛擬化
KVM:Kernel Virtual Machine:內核虛擬機
優勢:
1.內存管理:Kernel Same-page Merging,KSM)
2.存儲
3.設備驅動程序
4.性能和可伸縮性:KVM宿主機支持4096個CPU核心,64TB內存
[S2KVM核心基礎功能]
硬件平臺和軟件版本說明
1.硬件平臺:硬件要支持輔助虛擬化(Intel VT-x)
2.KVM內核:在linux.git源碼倉庫中執行
# git tag
v3.4-rc6
v3.4-rc7
v3.5-rc1
...
#git checkout v3.5
在kvm.git中,沒有v標簽,可以
# git log
# git checkout 73bcc499
在qemu-kvm.git中,可以使用git tag
在編譯qemu時,configure加上 --disable-sdl
使用qemu命令行,默認開啟對KVM支持,# qemu-kvm 查看KVM默認打開,需要啟動QEMU命令行上加上-enable-kvm
CPU配置
QEMU/KVM為客戶機提供一套完整的硬件系統環境
客戶機所擁有的CPU是vCPU
在KVM環境中,每個客戶機都是一個標準的Linux進程(QEMU進程)
每一個vCPU在宿主機中是QEMU進程派生的一個普通線程
客戶機的命令模擬實現:
1.用戶模式
處理I/O模擬和管理,由QEMU代碼實現
2.內核模式
處理需要高性能和安全相關指令。處理客戶模式下I/O指令或其他特權指令引起的退出,處理影子內存管理
3.客戶模式
執行Guest中的大部分指令,I/O和一些特權指令除外(引起VM-Exit,被hypervisor截獲並模擬)
SMP支持
多處理,多進程
邏輯CPU個數
# cat /proc/cpuinfo | grep "pro"|wc -l
多線程支持
# cat /proc/cpuinfo | grep -qi "core id" |echo $?
實際CPU個數
# cat /proc/cpuinfo | grep "physical id" |sort | uniq | wc -l
每個物理CPU中邏輯CPU的個數
logical_cpu_per_phy_cpu=$(cat /proc/cpuinfo |grep "siblings"| sort | uniq | awk -F: '{print $2}')
echo $logical_cpu_per_phy_cpu
在qemu的命令行中,模擬客戶機的SMP系統,參數
-qemu n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets]
n 邏輯cpu數量
maxcpus 最大可被使用的cpu數量
cores 每個cpu socket上的core數量
threads 每個cpu core上的線程數
sockets 客戶機中看的總的cops socket數量
8個客戶機logical cpu即宿主機的8個線程
logical cpu 8
physical cpu 2
core cpu 2
logical cpu 4
8個邏輯cpu
2個物理
PUC socket 每個socket有兩個核,每個核有2個線程
CPU模型
查看當前qemu支持的所有CPU模型
# qemu-system-x86_64 -cpu ?
啟動鏡像時,可以使用上命令的結果的CPU模型啟動
# qemu-system-x86_64 /root/.../...img -cpu SandyBridge
隔離其他CPU不供客戶機使用
grub 文件
root=UUID.... isolcpus=2,3
查看隔離成功
# ps -eLo psr|grep 0|wc-l
然後改變0,檢查各個CPU的進程數
把一個有兩個的vCPU的客戶機綁定到宿主機的兩個CPU上
# qemu-system-x86_64 rhel6u3.img -smp 2 -m 512 -daemonize
查看代表vCPU的QEMU的線程
#ps -eLo ruser,pid,ppid,lwp,psr,args |grep qemgrep -v grep
綁定整個客戶機的QEMU進程,運行在CPU2上
#taskset -p 0x4 3963
#綁定第一個cCPU線程,使其運行在cpu2上
# taskset -p 0x4 3967
第二個
#taskset -p 0x8 3968
內存配置
QEMU啟動命令
-m megs 設置客戶機的內存為MB大小
# free -m 查看內存
# dmesg|grep Memory
內存轉換
客戶機->宿主機(GVA->GPA)執行者:客戶機操作系統
客戶機<-宿主機(GVA<-GPA)執行者:hypervisor
在EPT加入之後,直接在硬件上支持虛擬化內存地址轉換
查看支持EPT VPID
# grep ept /proc/cpuinfo
# cat /sys/module/kvm_intel/parameters/ept
# cat /sys/module/kvm_intel/parameters/vpid
加載ept vpid模塊
# modprobe kvm_intel ept=0,vpid=0
# rmmod kvm_intel
# modprobe kvm_intelept=1,vpid=1
大頁
x86默認提供4kb內存頁面
x86_64支持2MB大小的大頁
# getconf PAGESIZE
# cat /proc/meminfo
掛載大頁
# mount -t hugetlbfs hugetlbfs /dev/hugepages
# sysctl vm.nr_hugepages=1024
然後讓qemu啟動項內存參數使用大頁
-mem-path /dev/hugepages
掛載大頁內存可以顯著提高客戶機性能,但是,不能使用swap
內存過載使用
1.內存交換(swaping)
2.氣球(ballooning):通過virio_balloon驅動來實現宿主機Hyperviosr和宿主機的合作
3.頁共享(page sharing):通過KSMkernel Samepage Merging合並多個客戶機使用的相同內存頁。
存儲配置
存儲配置和啟動順序
存儲的基本配置選項
-hda file :將file作為客戶機第一個IDE設備,序號0,客戶機中表現/dev/hda或/dev/sda設備
-hdb /-hdc..
-fda file 軟盤
-cdrom,cdrom作為hdc,不能共同使用
-mtdblock file 作為客戶機自帶的一個flash存儲器 閃存
-sd file sd 卡
驅動器
-driver file=file 文件作為鏡像文件加載到客戶機的驅動器中
if=interface 指定驅動器使用的接口類型
bus=bus,unit=unit 總線編號,單元編號
index=index 索引編號
media=media 設置驅動器中沒接的類型
snapshot=snapshot on/off ~~~~~
....
配置客戶機啟動順序的參數
-boot order=drivers,once=drives,menu=on|off,splash=splashfile,splash-time=sp-time
ex:-boot order=dc,menu=on 按F12
存儲配置示例
啟動客戶機命令
# qemu-system-x86_64 -m 1024 -smp 2 rhel6u3.img
# qemu-system-x86_64 -m 1024 -smp 2-hda rhel6u3.img
# qemu-system-x86_64 -m 1024 -smp 2-drive file=rhl6u3.img,if=ide,cache=writehrough
qemu命令
qemu-img:qemu磁盤管理工具
check [-f fmt] filename
fmt:qcow2 qed vdi
create [-f fmt][-o options] filename [size] 創建鏡像文件
convert 鏡像轉換
# qemu-img convertmy-vmware.vmdk my-kvm.img #用這個轉換
# qemu-img convert -O qcow2 rhel6u3.img rhel6u3-a.gcow2
info [-f fmt] filename
展示filename鏡像文件信息
snapshot [-l|-a snapshot|-c snapshot|-d snapshot] filenamne
rebase
resize filename [+|-] size
QEMU支持的鏡像文件格式
1.raw
2.host_device
3.qcow2
4.qcow
cow,vid.vmdk,vpc,sheepdog
客戶機存儲方式
1.本地
2.物理磁盤或磁盤分區
3.LVM
4.NFS
5.ISCSI
6.本地或光纖通道LUN
7.GFS2
高性能IO使用半虛擬化virtio作為磁盤驅動程序
QEMU支持的網絡模式
1.基於網橋(bridge)的虛擬網卡
2.基於NAT(Network Address Translation)的虛擬網絡
3.QEMU內置的用戶模式網絡
4.直接分配網絡設備的網絡(包括VT-d 和 SR-IOV)
-net nic,model=? 會列出默認虛擬網卡
-net nic,model=e1000 會模擬出一個interl e1000的網卡供客戶使用
Tags:
文章來源: