KVM虛擬化技術 筆記(一)

分類:IT技術 時間:2017-01-28

KVM虛擬化技術 筆記

[email protected]

[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:

文章來源:


ads
ads

相關文章
ads

相關文章

ad