網(wǎng)絡(luò)I/O虛擬化是服務(wù)器虛擬化技術(shù)的重要組成部分,在服務(wù)器虛擬化技術(shù)領(lǐng)域,計算虛擬化(如CPU和內(nèi)存虛擬化)已經(jīng)日趨成熟,但是,網(wǎng)絡(luò)I/O虛擬化技術(shù)的發(fā)展相對比較滯后。當(dāng)前,主流的網(wǎng)絡(luò)I/O虛擬化技術(shù)有三種:軟件模擬、網(wǎng)卡直通和SR-IOV。這三種虛擬化技術(shù)在不同程度上實現(xiàn)了網(wǎng)絡(luò)I/O設(shè)備的虛擬化功能。其中,軟件模擬是通過虛擬化Hypervisor層模擬虛擬網(wǎng)卡,實現(xiàn)與物理設(shè)備完全一樣的接口,虛擬機(jī)操作系統(tǒng)無須修改就能直接驅(qū)動虛擬網(wǎng)卡,其最大的缺點是性能相對較差;網(wǎng)卡直通支持虛擬機(jī)繞過Hypervisor層,直接訪問物理I/O設(shè)備,具有最高的性能,但是,在同一時刻,物理I/O設(shè)備只能被一個虛擬機(jī)獨享;SR-IOV是Intel在2007年提出的解決虛擬化網(wǎng)絡(luò)I/O的硬件技術(shù)方案,該技術(shù)不僅能夠繼承網(wǎng)卡直通的高性能優(yōu)勢,而且同時支持物理I/O設(shè)備的跨虛擬機(jī)共享,具有較好的應(yīng)用前景。
2007年10月,PCI-SIG發(fā)布了PCI-SIG Single Root I/O Virtualization(SR-IOV)規(guī)范,其中詳細(xì)闡述了硬件供應(yīng)商在多個虛擬機(jī)中如何共享單個I/O設(shè)備硬件。
圖1 硬件SR-IOV虛擬化技術(shù)原理圖
SR-IOV引入了兩個新的功能類型:
一旦在PF中啟用了SR-IOV,就可以通過PF的總線、設(shè)備和功能編號(路由ID)訪問各個VF的PCIe配置空間。每個VF都具有一個PCIe內(nèi)存空間,用于映射其寄存器集。VF設(shè)備驅(qū)動程序?qū)拇嫫骷M(jìn)行操作以啟用其功能,并且顯示為實際存在的PCIe設(shè)備。創(chuàng)建VF后,可以直接將其指定給I/O來賓域或各個應(yīng)用程序。此功能使得虛擬功能可以共享物理設(shè)備,并在沒有CPU和虛擬機(jī)管理程序軟件開銷的情況下執(zhí)行I/O。
由此可見,SR-IOV網(wǎng)卡通過將SR-IOV功能集成到物理網(wǎng)卡上,將單一的物理網(wǎng)卡虛擬成多個VF接口,每個VF接口都有單獨的虛擬PCIe通道,這些虛擬的PCIe通道共用物理網(wǎng)卡的PCIe通道。每個虛擬機(jī)可占用一個或多個VF接口,這樣虛擬機(jī)就可以直接訪問自己的VF接口,而不需要Hypervisor的協(xié)調(diào)干預(yù),從而大幅提升網(wǎng)絡(luò)吞吐性能。 需要注意的是,SR-IOV作為一種新技術(shù),目前仍不完善的地方:
H3C CAS云計算管理平臺兼容多種支持硬件SR-IOV的網(wǎng)卡及虛擬機(jī)操作系統(tǒng)。下表為進(jìn)行了詳細(xì)兼容性驗證的硬件網(wǎng)卡類型及對應(yīng)操作系統(tǒng)的版本,對于未在列表中的網(wǎng)卡和操作系統(tǒng)可能可以支持,但在項目實施之前,需要進(jìn)行適當(dāng)?shù)倪m配與驗證工作。
說明:
- 如果虛擬機(jī)操作系統(tǒng)為Windows類型,都必須在操作系統(tǒng)內(nèi)安裝SR-IOV網(wǎng)卡的VF驅(qū)動程序,您可以聯(lián)系服務(wù)器或網(wǎng)卡供應(yīng)商獲取相應(yīng)的軟件驅(qū)動安裝文件。
- 如果虛擬機(jī)操作系統(tǒng)為Linux類型,對于Intel 82599網(wǎng)卡,只支持內(nèi)核版本為2.6以上的Linux操作系統(tǒng),對于BCM57810網(wǎng)卡,只支持內(nèi)核版本為3.9以上的Linux操作系統(tǒng)。
本文檔中的配置均是在實驗室環(huán)境下進(jìn)行的配置和驗證,配置前服務(wù)器和軟件的所有參數(shù)均采用出廠時的缺省配置。如果您已經(jīng)對被測試對象進(jìn)行了配置,為了保證配置效果,請確認(rèn)現(xiàn)有配置和以下舉例中的配置不沖突。
本文檔不嚴(yán)格與具體硬件服務(wù)器型號對應(yīng),如果使用過程中與產(chǎn)品實際情況有差異,請參考相關(guān)產(chǎn)品手冊,或以設(shè)備實際情況為準(zhǔn)。本文檔使用的服務(wù)器型號與配置如下表所示,該環(huán)境不作為實際部署時的強制環(huán)境或推薦環(huán)境,只需要服務(wù)器能夠兼容H3C CAS云計算管理平臺即可完成本配置。
圖2 硬件SR-IOV網(wǎng)卡邏輯組網(wǎng)圖
主要驗證項包括:
步驟1 檢查服務(wù)器的CPU是否啟用了VT-d技術(shù)。
啟動服務(wù)器 1,在啟動過程中,按[F9]鍵進(jìn)入BIOS設(shè)置。
在BIOS設(shè)置中,依次選擇“System Options”->“Processor Options”->“Intel(R) VT-d”,將其值設(shè)置為“Enabled”,表示開啟CPU的VT-d功能。
圖3 在服務(wù)器BIOS中開啟Intel VT-d技術(shù)
依次選擇“Advanced Options”->“SR-IOV”,將其值設(shè)置為“Enabled”,表示開啟物理網(wǎng)卡的SR-IOV功能。
圖4 在服務(wù)器BIOS中開啟SR-IOV功能
步驟2 保存BIOS配置后,重啟服務(wù)器。
系統(tǒng)管理員登錄H3C CAS CVM虛擬化管理平臺,在導(dǎo)航菜單中選中被測試虛擬機(jī)所在的服務(wù)器主機(jī),在右側(cè)配置窗口中點擊“高級設(shè)置”標(biāo)簽頁。
圖5 服務(wù)器IOMMU配置
默認(rèn)情況下,服務(wù)器主機(jī)的IOMMU狀態(tài)為“禁用”。點擊<修改>按鈕,在彈出的“IOMMU配置”對話框中,修改“IOMMU狀態(tài)”為“啟用”,并點擊<確定>按鈕。
圖6 修改服務(wù)器IOMMU狀態(tài)
將服務(wù)器主機(jī)進(jìn)入維護(hù)模式,并重啟服務(wù)器使IOMMU配置生效。
圖7 重啟服務(wù)器主機(jī)使IOMMU配置生效
注意
在配置IOMMU之后,由于必須重新啟動服務(wù)器生效,如果被測試服務(wù)器主機(jī)上已經(jīng)存在虛擬機(jī),強烈建議:服務(wù)器主機(jī)進(jìn)入維護(hù)模式,將處于運行狀態(tài)的虛擬機(jī)在線遷移到其它服務(wù)器主機(jī)上,然后再重啟服務(wù)器主機(jī),以最大程度規(guī)避因為主機(jī)重啟而導(dǎo)致虛擬機(jī)數(shù)據(jù)丟失。
服務(wù)器主機(jī)啟動完成之后,在H3C CAS CVM虛擬化管理平臺上將服務(wù)器主機(jī)退出維護(hù)模式,檢查其IOMMU配置是否為“啟用”狀態(tài)。
圖8 檢查服務(wù)器IOMMU配置狀態(tài)
步驟1創(chuàng)建虛擬機(jī)。
在H3C CAS CVK虛擬化內(nèi)核系統(tǒng)(服務(wù)器 #1)上創(chuàng)建2個新的虛擬機(jī),兩個虛擬機(jī)的虛擬硬件資源配置相同,如下表所示。
說明
上述虛擬機(jī)資源配置僅為測試環(huán)境下的配置,不作為生產(chǎn)環(huán)境中業(yè)務(wù)虛擬機(jī)的推薦配置。生產(chǎn)環(huán)境中的虛擬機(jī)配置應(yīng)該根據(jù)業(yè)務(wù)本身對CPU、內(nèi)存、磁盤和網(wǎng)卡等資源的實際需求進(jìn)行評估和測試后最終確定。
步驟2通過控制臺(VNC),分別為兩個虛擬機(jī)安裝Windows Server 2008 R2數(shù)據(jù)中心版64位操作系統(tǒng)和Red Hat Enterprise Linux Server 7.0 64位操作系統(tǒng)。
步驟3【可選】在H3C CAS CVM虛擬化管理平臺中,在線修改虛擬機(jī),分別為兩個虛擬機(jī)掛載CAStools工具,并在操作系統(tǒng)內(nèi)安裝CAStools工具。
步驟4在操作系統(tǒng)內(nèi)安全關(guān)閉虛擬機(jī)。
步驟1開啟物理主機(jī)物理網(wǎng)卡SR-IOV功能。
在H3C CAS CVM虛擬化管理平臺導(dǎo)航菜單中,選中被測試虛擬機(jī)所在的服務(wù)器主機(jī),在右側(cè)配置窗口中點擊“物理網(wǎng)卡”標(biāo)簽頁。
在“物理網(wǎng)卡”列表中,選中支持SR-IOV功能的物理網(wǎng)卡(本文檔以Broadcom公司的NetXtreme II BCM57810萬兆網(wǎng)卡為例),在“高級設(shè)置”中,點擊“SR-IOV”標(biāo)簽頁,修改“SR-IOV狀態(tài)”為“啟用”,輸入“虛擬網(wǎng)卡個數(shù)”為“2”個,點擊<保存>按鈕。
圖9 配置物理網(wǎng)卡的SR-IOV功能
步驟2為VM 1和VM 2配置SR-IOV網(wǎng)卡。
在“修改虛擬機(jī)”界面中,點擊<增加硬件>按鈕,準(zhǔn)備為虛擬機(jī)增加SR-IOV網(wǎng)卡。
在彈出的“增加新的虛擬機(jī)硬件”配置向?qū)е校x擇“硬件類型”為“網(wǎng)絡(luò)”,點擊<下一步>按鈕。
圖10 為虛擬機(jī)增加虛擬硬件配置向?qū)У谝徊?– 選擇硬件類型
選擇“設(shè)備型號”為“SR-IOV直通網(wǎng)卡”,驅(qū)動類型為“VFIO”,點擊“物理網(wǎng)卡”后的“ ”按鈕,選擇支持SR-IOV功能的網(wǎng)卡,點擊<下一步>按鈕。
圖11 為虛擬機(jī)增加虛擬硬件配置向?qū)У诙?– 選擇SR-IOV網(wǎng)卡
確認(rèn)配置之后,點擊<完成>按鈕。
圖12 為虛擬機(jī)增加虛擬硬件配置向?qū)У谌?– 配置確認(rèn)
說明
- KVM:基于KVM內(nèi)核的PCI設(shè)備分配方式,是一種較老的PCI設(shè)備分配方式,在較老的Linux操作系統(tǒng)內(nèi)核中支持。
- VFIO(Virtual Function I/O,虛擬化功能輸入輸出):基于VFIO的PCI設(shè)備分配方式。VFIO是一套用戶態(tài)驅(qū)動框架,在虛擬化場景下,可以用來在用戶態(tài)實現(xiàn)PCI設(shè)備分配,與基于KVM內(nèi)核的PCI設(shè)備分配方式相比,具有更好的兼容性,在實際部署時,建議配置為VFIO類型分配方式。
步驟3從HP官網(wǎng)下載BCM57810網(wǎng)卡在Windows類型操作系統(tǒng)下的VF驅(qū)動程序,下載網(wǎng)址為:http://h20564.www2.hpe.com/hpsc/swd/public/detail?sp4ts.oid=5282673&swItemId=MTX_06339e112ace404aaab82b2b0a&swEnvOid=4064。
注意
僅Windows類型操作系統(tǒng)需要安裝VF驅(qū)動程序,對于BCM57810網(wǎng)卡,Linux內(nèi)核版本3.9以上的操作系統(tǒng)都不需要安裝VF驅(qū)動程序。
步驟4 啟動虛擬機(jī)VM 1,并在虛擬機(jī)操作系統(tǒng)內(nèi)完成驅(qū)動程序的安裝。驅(qū)動程序安裝成功之后,在Windows操作系統(tǒng)的“設(shè)備管理器”中,可以看到SR-IOV網(wǎng)卡已經(jīng)被操作系統(tǒng)識別到。
圖13 在Windows Server 2008 R2虛擬機(jī)上識別到的SR-IOV網(wǎng)卡
步驟5 在VM 2虛擬機(jī)上,無需安裝VF驅(qū)動程序,Red Hat Enterprise Linux Server 7.0操作系統(tǒng)默認(rèn)已經(jīng)支持BCM57810的網(wǎng)卡驅(qū)動程序。在“Settings”->“Network”中,可以看到被操作系統(tǒng)識別到的SR-IOV網(wǎng)卡。
圖14 在Red Hat Enterprise Linux Server虛擬機(jī)上識別到的SR-IOV網(wǎng)卡
步驟1配置虛擬機(jī)SR-IOV網(wǎng)卡IP地址。
在Windows虛擬機(jī)操作系統(tǒng)內(nèi),配置SR-IOV網(wǎng)卡IP地址為192.168.100.101。
圖15 配置Windows Server 2008 R2虛擬機(jī)SR-IOV網(wǎng)卡IP地址
在Red Hat Enterprise Linux虛擬機(jī)操作系統(tǒng)內(nèi),配置SR-IOV網(wǎng)卡IP地址為192.168.100.102。
圖16 配置Red Hat Enterprise Linux 7.0虛擬機(jī)SR-IOV網(wǎng)卡IP地址
在VM1操作系統(tǒng)內(nèi)命令行窗口,Ping VM2的IP地址,觀察是否能Ping通。
圖17 驗證配置了SR-IOV網(wǎng)卡的虛擬機(jī)之間的IP互通性
步驟1從iperf官方網(wǎng)站下載Windows版本和Linux版本的iperf工具軟件,并分別在VM #1和VM #2虛擬機(jī)操作系統(tǒng)內(nèi)安裝。下載網(wǎng)址為:https://iperf.fr,本文檔使用2.5.0版本為例。
步驟2以VM1(Windows Server 2008 R2)為服務(wù)端,VM2(Red Hat Enterprise Linux Server 7.0)為客戶端,兩個虛擬機(jī)通過SR-IOV網(wǎng)卡進(jìn)行網(wǎng)絡(luò)吞吐量加壓測試。為了防止偶然因素影響測試結(jié)果,總共測試5次取均值,結(jié)果約為2.13Gbps,下圖為具體測試結(jié)果。
圖18 SR-IOV網(wǎng)卡性能測試結(jié)果
步驟3兩個虛擬機(jī)通過Virtio網(wǎng)卡進(jìn)行網(wǎng)絡(luò)吞吐量加壓測試,同樣測試5次取均值,結(jié)果約為614Mbps,下圖為具體測試結(jié)果。
圖19 Virtio網(wǎng)卡性能測試結(jié)果
步驟4兩個虛擬機(jī)通過Virtio網(wǎng)卡(開啟內(nèi)核加速)進(jìn)行網(wǎng)絡(luò)吞吐量加壓測試,同樣測試5次取均值,結(jié)果約為2.3Gbps,下圖為具體測試結(jié)果。
圖20-Virtio網(wǎng)卡(開啟內(nèi)核加速)性能測試結(jié)果
注意
Virtio類型虛擬網(wǎng)卡是通過軟件來模擬的網(wǎng)絡(luò)轉(zhuǎn)發(fā)模型,在實際運行時,請性能與服務(wù)器的CPU性能、當(dāng)前服務(wù)器物理CPU利用率、虛擬化內(nèi)核軟件處理效率都有關(guān)系。
根據(jù)上述測試結(jié)果,可以看出,在給定的服務(wù)器HP ProLiant DL380p Gen8(2路6核,Intel Xeon E5-2630 0 @ 2.30GHz)和物理SR-IOV網(wǎng)卡(Broadcom NetXtreme BCM57810 10 Gigabit Ethernet)條件下,在不同的虛擬網(wǎng)卡配置情況下的網(wǎng)絡(luò)I/O轉(zhuǎn)發(fā)性能對比如下圖所示。
圖21 SR-IOV與Virtio網(wǎng)卡IO吞吐量性能對比
作者:歐珊瑚
轉(zhuǎn)載自:虛擬化技術(shù)
MongoDB介紹
MongoDB是介于關(guān)系型數(shù)據(jù)庫與非關(guān)系型數(shù)據(jù)庫之間的一種NoSQL數(shù)據(jù)庫,由C++語言編寫,可以理解為它是介于Redis與Mysql之間的一種數(shù)據(jù)庫。MongoDB是一個文檔數(shù)據(jù)庫,旨在簡化開發(fā)和擴(kuò)展。地址:https://github.com/mongodb/mongo/
關(guān)系型數(shù)據(jù)庫與MongoDB對比
環(huán)境說明
操作系統(tǒng),CentOS7,非root用戶安裝。
下載地址:https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.17.tgz
$ tar -xvf mongodb-linux-x86_64-rhel70-4.4.17.tgz -C /opt/module/
$ mv mongodb-linux-x86_64-rhel70-4.4.17 mongodb-4.4
$ mkdir -p /opt/module/mongodb-4.4/data
$ mkdir -p /opt/module/mongodb-4.4/logs
環(huán)境變量準(zhǔn)備:
# MONGODB_HOME
export MONGODB_HOME=/opt/module/mongodb-4.4
export PATH=$PATH:$MONGODB_HOME/bin
配置文件內(nèi)容($MONGODB_HOM/mongod.cfg)
# 系統(tǒng)日志
systemLog:
destination: file
path: "/opt/module/mongodb-4.4/logs/mongod.log"
logAppend: false
# 存儲相關(guān)
storage:
journal:
enabled: false
dbPath: "/opt/module/mongodb-4.4/data"
directoryPerDB: false
engine: wiredTiger
# 網(wǎng)絡(luò)相關(guān)
net:
bindIpAll: true
# bindIp: 127.0.0.1
port: 27017
# 進(jìn)程相關(guān)
processManagement:
# 啟用在后臺運行mongos或mongod進(jìn)程的守護(hù)進(jìn)程模式
fork: true
# 指定用于保存mongos或mongod進(jìn)程的進(jìn)程ID的文件位置,mongos或mongod將寫入其PID
pidFilePath: "/opt/module/mongodb-4.4/logs/mongod.pid"
# 安全相關(guān)
security:
# 開啟授權(quán)認(rèn)證
authorization: enabled
配置及啟動
$ sudo vim /etc/profile.d/my_en.sh
$ source /etc/profile
$ mongod -f /opt/module/mongodb-4.4/mongod.cfg
$ ps -ef | grep mongod
$ mongo
> use admin
> db.createUser({user:"admin",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})
> db.auth("admin","123456")
> db.system.users.find()
環(huán)境說明
操作系統(tǒng),windows10,下載地址:https://fastdl.mongodb.org/windows/mongodb-windows-x86_64-4.4.17.zip
添加環(huán)境變量(電腦=>右鍵=>系統(tǒng)屬性=>高級=>環(huán)境變量):
MONGODB_HOME=D:\Apps\MongoDB\mongodb-4.4
PATH=%MONGODB_HOME%\bin
配置文件內(nèi)容(%MONGODB_HOME%\mongod.cfg):
# 系統(tǒng)日志
systemLog:
destination: file
path: "E:/AppsData/MongoDB/Logs/mongod.log"
logAppend: false
# 存儲相關(guān)
storage:
journal:
enabled: false
dbPath: "E:/AppsData/MongoDB/Data"
directoryPerDB: false
engine: wiredTiger
# 網(wǎng)絡(luò)相關(guān)
net:
bindIpAll: true
# bindIp: 127.0.0.1
port: 27017
# 進(jìn)程相關(guān)
#processManagement:
# # 啟用在后臺運行mongos或mongod進(jìn)程的守護(hù)進(jìn)程模式
# fork: true
# # 指定用于保存mongos或mongod進(jìn)程的進(jìn)程ID的文件位置,mongos或mongod將寫入其PID
# pidFilePath: "E:/AppsData/MongoDB/Logs/mongod.pid"
# 安全相關(guān)
security:
# 開啟授權(quán)認(rèn)證
authorization: enabled
啟動MongoDB數(shù)據(jù)庫(CMD命令行執(zhí)行):
mongod --dbpath "E:/AppsData/MongoDB/Data" --logpath "E:/AppsData/MongoDB/Logs/mongod.log"
停止cmd窗口,注冊成windows系統(tǒng)服務(wù)。
Windows安裝注冊MongoDB服務(wù)(CMD窗口,管理員)
mongod --config "D:/Apps/MongoDB/mongodb-4.4/mongod.cfg" --install --serviceName "MongoDB4.4"
對應(yīng)的移除MongoDB服務(wù):mongod.exe --remove --serviceName "MongoDB4.4"
啟動服務(wù):net start MongoDB4.4
客戶端登錄(mongo)創(chuàng)建認(rèn)證用戶