CSR 1000v KVM SRIOV CentOS 7安裝設(shè)置指南

作者:Rao Weibo

版本:1.0

更新日期:20210203

本文提供在 CentOS 7 版本上安裝 KVM,并安裝和設(shè)置 CSR 1000v/Catalyst 8000v 的指南,內(nèi)容包括 SRIOV峭火,KVM 調(diào)優(yōu)以及 CSR1KV 初始化配置等內(nèi)容。

注:如果希望使用商用的NFV平臺和商業(yè)服務(wù)支持,可以考慮Cisco NFVIS平臺嘱么。Cisco NFVIS開機(jī)即用,使用Web圖形化界面進(jìn)行操作顽悼,支持對虛擬機(jī)全生命周期的管理拱撵,包括部署辉川、開關(guān)機(jī)操作、以及性能監(jiān)控等拴测。

CentOS7 安裝及設(shè)置

(1)BIOS 設(shè)置建議

Configuration Recommended Setting
Intel Hyper-Threading Technology Disabled
Number of Enable Cores ALL
Execute Disable Enabled
Intel VT Enabled
Intel VT-D Enabled
Intel VT-D coherency support Enabled
Intel VT-D ATS support Enabled
CPU Performance High throughput
Hardware Prefetcher Disabled
Adjacent Cache Line Prefetcher Disabled
DCU Streamer Prefetch Disable
Power Technology Custom
Enhanced Intel Speedstep Technology Disabled
Intel Turbo Boost Technology Enabled
Processor Power State C6 Disabled
Processor Power State C1 Enhanced Disabled
Frequency Poor Override Enabled
P-State Coordination HW_ALL
Energy Performance Performance

以上建議來自 CSR 1000v 的安裝指南。

(2)CentOS 7 的安裝

在安裝的時候選擇

  • Server with GUI
  • Virtualization Client
  • Virtualization Hypervisor
  • Virtualization Tools

啟動完畢以后關(guān)閉 selinux府蛇,重啟生效集索。

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

getenforce      //結(jié)果為:Enforcing(開啟狀態(tài))disabled(關(guān)閉狀態(tài))
# 安裝完后,SSH登錄可能顯示中文汇跨,可修改 .bash_profile

LANG="en_US.UTF-8"

export LANG

source .bash_profile

egrep -o '(vmx|svm)' /proc/cpuinfo | sort | uniq

# 注:在生產(chǎn)環(huán)境中务荆,需要在服務(wù)器連接的交換機(jī)以及出口防火墻上做好安全策略。

systemctl stop firewalld

systemctl disable firewalld

本文檔采用 NetworkManager 配置穷遂,故在此并不停用 NetworkManager函匕。

cat /etc/sysctl.conf

net.ipv4.ip_forward = 1

net.bridge.bridge-nf-call-ip6tables = 0

net.bridge.bridge-nf-call-iptables = 0

net.bridge.bridge-nf-call-arptables = 0

檢查 KVM 組件版本:

[root@centos7 ~]# libvirtd -V

libvirtd (libvirt) 4.5.0

[root@centos7 ~]# /usr/libexec/qemu-kvm --version

QEMU emulator version 1.5.3 (qemu-kvm-1.5.3-173.el7_8.3), Copyright (c) 2003-2008 Fabrice Bellard

[root@centos7 ~]# virt-manager --version

1.5.0

[root@centos7 ~]# modinfo kvm-intel

filename:       /lib/modules/3.10.0-1127.18.2.el7.x86_64/kernel/arch/x86/kvm/kvm-intel.ko.xz

[root@centos7 ~]# modinfo ixgbevf

filename:       /lib/modules/3.10.0-1127.18.2.el7.x86_64/kernel/drivers/net/ethernet/intel/ixgbevf/ixgbevf.ko.xz

version:        4.1.0-k-rh7.7

(3)創(chuàng)建本地 Yum 源(可選)

# 1、備份本地/etc/yum.repos.d 目錄下的yum源

cd /etc/yum.repos.d/

mkdir bak

mv C* bak/

# 2蚪黑、上傳CentOS-7-x86_64-Everything-2009.iso鏡像到/opt

# 3盅惜、掛載鏡像

mkdir -p /media/cdrom

mount -t iso9660 -o loop /opt/CentOS-7-x86_64-Everything-2009.iso /media/cdrom/

mount       //查看掛載信息

df -h

vi /etc/fstab

/opt/CentOS-7-x86_64-Everything-2009.iso    /media/cdrom    iso9660 loop 0 0

tail -1 /etc/fstab      //查看是否寫入/etc/fstab

# 4、配置本地yum源

cd /etc/yum.repos.d/

vi local.repo

[local]

name=local

baseurl=file:///media/cdrom    //前面的file://是協(xié)議,后面的/media/cdrom是光盤掛載點(diǎn)

gpgcheck=0      //1使用公鑰驗(yàn)證rpm包的正確性,0不驗(yàn)證

enabled=1       //1啟用yum源,0禁用yum源

yum install -y numactl telnet

運(yùn)行 virt-manager 啟動圖形化界面忌穿。

如果對 virsh CLI 命令熟悉抒寂,可以使用 virsh 命令創(chuàng)建虛擬機(jī)。

(4)服務(wù)器網(wǎng)卡配置—NetworkManager 配置

在終端界面掠剑,可以通過 nmtui 打開圖形化界面進(jìn)行設(shè)置屈芜;以下使用 nmcli 進(jìn)行設(shè)置。

nmcli connection add con-name eno1 type ethernet autoconnect yes ifname eno1

nmcli connection modify eno1 ipv4.method manual ipv4.addresses 10.75.58.43/24 ipv4.gateway 10.75.58.1 ipv4.dns 64.104.123.245

nmcli connection up eno1

nmcli connection show eno1

ping 10.75.58.1

上述命令完成后朴译,在/etc/sysconfig/network-scripts 中會生成網(wǎng)卡的 ifcfg 配置文件井佑。

cat /etc/sysconfig/network-scripts/ifcfg-eno1

HWADDR=70:7D:B9:59:5B:AE

TYPE=Ethernet

PROXY_METHOD=none

BROWSER_ONLY=no

BOOTPROTO=none

IPADDR=10.75.58.43

PREFIX=24

GATEWAY=10.75.58.1

DNS1=64.104.123.245

DEFROUTE=yes

IPV4_FAILURE_FATAL=no

IPV6INIT=yes

IPV6_AUTOCONF=yes

IPV6_DEFROUTE=yes

IPV6_FAILURE_FATAL=no

IPV6_ADDR_GEN_MODE=stable-privacy

NAME=eno1

UUID=2a1c8b39-7f44-321b-a65f-a93e70ab0616

ONBOOT=yes

AUTOCONNECT_PRIORITY=-999

DEVICE=eno1

此時,可以將 network.service 停止和關(guān)閉眠寿。

systemctl stop network

systemctl disable network

注意躬翁,如果 NetworkManager 未設(shè)置妥當(dāng),執(zhí)行 systemctl stop network 后澜公,會導(dǎo)致服務(wù)器無法管理姆另。

準(zhǔn)備開啟 SRIOV 的網(wǎng)卡設(shè)置,以 eno2 為例:

nmcli connection add con-name eno2 type ethernet autoconnect yes ifname eno2

nmcli connection modify eno2 ethernet.mtu 9216 ipv4.method disabled

nmcli connection up eno2

nmcli connection show eno2

ip link show dev eno2

注:上述 MTU 值設(shè)置為 9216 是借鑒自 Cisco NFVIS 平臺坟乾,如下:

CSP5228-1# show pnic-detail mtu

Name          MTU

=============================

eth0-1        9216

eth0-2        9216

eth1-1        9216

eth1-2        9216

(5)配置 Linux 網(wǎng)橋 (可選)

網(wǎng)橋 br1 配置示例:

nmcli connection add con-name br1 type bridge autoconnect yes ipv4.method disabled ethernet.mtu 9216 ifname br1

nmcli connection up br1

ip link show dev br1

網(wǎng)橋 br1 的物理網(wǎng)卡配置

nmcli connection add con-name eno5 type ethernet autoconnect yes ifname eno5

nmcli connection modify eno5 ethernet.mtu 9216 ipv4.method disabled master br1

nmcli connection up eno5

ip link show dev eno5

創(chuàng)建 net-br1 網(wǎng)絡(luò)

[root@centos7 ~]# cat net-br1.xml

<network>

 <name>net-br1</name>

 <forward mode="bridge"/>

 <bridge name="br1"/>

</network>
[root@centos7 ~]# virsh net-define net-br1.xml

Network net-br1 defined from net-br1.xml

[root@centos7 ~]# virsh net-start net-br1

Network net-br1 started

[root@centos7 ~]# virsh net-autostart net-br1

Network net-br1 marked as autostarted

配置 SR-IOV

(1)檢查網(wǎng)卡對 SR-IOV 的支持迹辐,并配置網(wǎng)卡

可使用 lshw 和 lspci 檢查網(wǎng)卡對 SR-IOV 的支持

lshw -c network -businfo

Bus info          Device      Class          Description

========================================================

pci@0000:1d:00.0  eno5        network        VIC Ethernet NIC

pci@0000:1d:00.1  eno6        network        VIC Ethernet NIC

pci@0000:1d:00.2  eno7        network        VIC Ethernet NIC

pci@0000:1d:00.3  eno8        network        VIC Ethernet NIC

pci@0000:3b:00.0  eno1        network        Ethernet Controller 10G X550T

pci@0000:3b:00.1  eno2        network        Ethernet Controller 10G X550T

lspci -vv -s 3b:00.1 | grep -A 5 -i SR-IOV

Capabilities: [160 v1] Single Root I/O Virtualization (SR-IOV)

  IOVCap:   Migration-, Interrupt Message Number: 000

    IOVCtl: Enable+ Migration- Interrupt- MSE+ ARIHierarchy-

    IOVSta: Migration-

    Initial VFs: 64, Total VFs: 64, Number of VFs: 8, Function Dependency Link: 01

    VF offset: 128, stride: 2, Device ID: 1565

(2)設(shè)置啟動參數(shù)

vi /etc/default/grub

GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet hugepagesz=1G hugepages=32 default_hugepagesz=1G intel_iommu=on iommu=pt isolcpus=1-8,37-44"

注:頁面數(shù)字不要過大,不然啟動失敗甚侣,如果后續(xù)不夠明吩,可以在運(yùn)行時添加。

grub2-mkconfig -o /boot/grub2/grub.cfg

grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

iommu=pt 參數(shù)是將SRIOV設(shè)備支持PCI Passthrough

重啟后驗(yàn)證

cat /proc/cmdline |grep intel_iommu=on

dmesg |grep -e DMAR -e IOMMU

dmesg | grep -e DMAR -e IOMMU -e AMD-Vi
  • default_hugepagesz=1G hugepagesz=1G hugepages=32 參數(shù)設(shè)置主機(jī)在啟動時分配 32 個 1GB 的內(nèi)存大頁殷费,這些是靜態(tài)內(nèi)存大頁印荔。 CSR 1000v 虛擬機(jī)將試用這些靜態(tài)大頁以獲得最優(yōu)性能低葫。
  • isolcpus=1-8,37-44 參數(shù)設(shè)置的作用是隔離 1-8,37-44 的 CPU 核仍律,使其獨(dú)立于內(nèi)核的平衡調(diào)度算法嘿悬,也就是內(nèi)核本身不會將進(jìn)程分配到被隔離的 CPU。之后我們可將指定的進(jìn)程 CSR 1000v 虛擬機(jī)綁定到被隔離的 CPU 上運(yùn)行水泉,讓進(jìn)程獨(dú)占 CPU善涨,使其實(shí)時性可得到一定程度的提高。

可參考 這個章節(jié)獲取主機(jī) CPU 核的相關(guān)信息草则。

root@centos7 ~]# cat /proc/cmdline |grep intel_iommu=on

BOOT_IMAGE=/vmlinuz-3.10.0-1127.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet hugepagesz=1G hugepages=32 default_hugepagesz=1G intel_iommu=on iommu=pt LANG=en_US.UTF-8

[root@centos7 ~]# dmesg |grep -e DMAR -e IOMMU

[    0.000000] ACPI: DMAR 000000005d6f5d70 00250 (v01 Cisco0 CiscoUCS 00000001 INTL 20091013)

[    0.000000] DMAR: IOMMU enabled

查看隔離的 CPU 核以及所有的 CPU 核钢拧。

[root@centos7 ~]# cat /sys/devices/system/cpu/isolated

1-8,37-44

[root@centos7 ~]# cat /sys/devices/system/cpu/present

0-71

(3)通過 nmcli 持久化 VFs 配置

nmcli 可以設(shè)置網(wǎng)卡的 sriov 參數(shù),如下:

nmcli connection modify eno2 sriov.total-vfs 4

還可以設(shè)置每一個 VF 設(shè)備的 MAC 地址炕横,便于管理:

nmcli connection modify eno2 sriov.vfs '0 mac=8E:DF:08:C1:D1:DE trust=true, 1 mac=5A:B9:2F:99:A6:CE trust=true, 2 mac=46:78:69:E3:71:3D trust=true, 3 mac=7E:A7:DB:3B:1B:B3 trust=true'

執(zhí)行上述命令后:

cat /etc/sysconfig/network-scripts/ifcfg-eno2

TYPE=Ethernet

NAME=eno2

UUID=64ffa204-0158-40c8-ba86-2b7aebf27619

DEVICE=eno2

ONBOOT=yes

MTU=9216

HWADDR=70:7D:B9:59:5B:AF

PROXY_METHOD=none

BROWSER_ONLY=no

IPV6INIT=no

SRIOV_TOTAL_VFS=4

SRIOV_VF0="mac=8E:DF:08:C1:D1:DE trust=true"

SRIOV_VF1="mac=5A:B9:2F:99:A6:CE trust=true"

SRIOV_VF2="mac=46:78:69:E3:71:3D trust=true"

SRIOV_VF3="mac=7E:A7:DB:3B:1B:B3 trust=true"

重啟后源内,檢查 dmesg:

dmesg | grep -i vf | grep -i eno2

[   11.953333] ixgbe 0000:3b:00.1 eno2: SR-IOV enabled with 4 VFs

[   12.541801] ixgbe 0000:3b:00.1: setting MAC 8e:df:08:c1:d1:de on VF 0

[   12.541805] ixgbe 0000:3b:00.1: Reload the VF driver to make this change effective.

[   12.541841] ixgbe 0000:3b:00.1 eno2: VF 0 is trusted

[   12.541846] ixgbe 0000:3b:00.1: setting MAC 5a:b9:2f:99:a6:ce on VF 1

[   12.541850] ixgbe 0000:3b:00.1: Reload the VF driver to make this change effective.

[   12.541883] ixgbe 0000:3b:00.1 eno2: VF 1 is trusted

[   12.541887] ixgbe 0000:3b:00.1: setting MAC 46:78:69:e3:71:3d on VF 2

[   12.541891] ixgbe 0000:3b:00.1: Reload the VF driver to make this change effective.

[   12.541923] ixgbe 0000:3b:00.1 eno2: VF 2 is trusted

[   12.541928] ixgbe 0000:3b:00.1: setting MAC 7e:a7:db:3b:1b:b3 on VF 3

[   12.541932] ixgbe 0000:3b:00.1: Reload the VF driver to make this change effective.

[   12.541965] ixgbe 0000:3b:00.1 eno2: VF 3 is trusted

(4)檢查 VF

可通過 lspci 和 ip link 檢查 VF,如下:

[root@centos7 ~]# lspci | grep -i Virtual

[root@centos7 ~]# ip link show | grep -B2 vf

尋找 Physical Function 和 Virtual Function 之間的對應(yīng)關(guān)系:

[root@centos7 ~]# ls -l /sys/class/net/eno1/device/ | grep virtfn

VF 被創(chuàng)建后份殿,NetworkManager 自動給新的設(shè)備創(chuàng)建 Connection膜钓,可以修改名稱,如下:

nmcli connection

NAME        UUID                                  TYPE      DEVICE

eno1        2a1c8b39-7f44-321b-a65f-a93e70ab0616  ethernet  eno1

eno2        64ffa204-0158-40c8-ba86-2b7aebf27619  ethernet  eno2

enp59s16f1  19c28a93-aa36-38e6-a556-55a922a0a332  ethernet  enp59s16f1

enp59s16f3  428d9707-1515-3475-b356-7eb229c3f937  ethernet  enp59s16f3

enp59s16f5  21a8dd5f-239f-37b2-9b09-24ce0e7413bc  ethernet  enp59s16f5

enp59s16f7  0ca0da65-64c4-314d-89a4-4213f9e4f478  ethernet  enp59s16f7

修改名稱:

nmcli connection modify uuid 19c28a93-aa36-38e6-a556-55a922a0a332 connection.id enp59s16f1

修改 MTU 值伯铣,并禁用 IPv4 和 IPv6呻此,網(wǎng)卡啟動更快

nmcli connection modify enp59s16f1 ifname enp59s16f1 ipv4.method disabled ipv6.method ignore ethernet.mtu 9216 ethernet.mac-address ""

nmcli connection up enp59s16f1

nmcli connection show enp59s16f1

上述命令生成的 ifcfg 配置文件如下:

[root@centos7 ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp59s16f1

TYPE=Ethernet

PROXY_METHOD=none

BROWSER_ONLY=no

DEFROUTE=yes

IPV4_FAILURE_FATAL=no

IPV6INIT=no

IPV6_AUTOCONF=no

IPV6_DEFROUTE=yes

IPV6_FAILURE_FATAL=no

IPV6_ADDR_GEN_MODE=stable-privacy

NAME=enp59s16f1

UUID=19c28a93-aa36-38e6-a556-55a922a0a332

ONBOOT=yes

AUTOCONNECT_PRIORITY=-999

DEVICE=enp59s16f1

MTU=9216

這樣,即便系統(tǒng)重啟腔寡,上述配置依然能生效焚鲜。

使用 KVM 的虛擬網(wǎng)絡(luò)適配器池

主機(jī)上創(chuàng)建一個 VF 網(wǎng)絡(luò)設(shè)備的資源池,資源池內(nèi)的設(shè)備可以自動地分配給虛擬機(jī)使用放前。

(1)創(chuàng)建一個 xml 文件忿磅。

[root@centos7 ~]# cat eno2_sriov_pool.xml

<network>

  <name>eno2_sriov_pool</name> <!-- This is the name of the file you created -->

  <forward mode='hostdev' managed='yes'>

   <pf dev='eno2'/> <!-- Use the netdev name of your SR-IOV devices PF here -->

  </forward>

</network>

(2)根據(jù) xml 定義一個網(wǎng)絡(luò),并設(shè)置為自動重啟

virsh net-define eno2_sriov_pool.xml

virsh net-start eno2_sriov_pool

virsh net-autostart eno2_sriov_pool

[root@centos7 ~]# virsh net-dumpxml eno2_sriov_pool

<network connections='1'>

 <name>eno2_sriov_pool</name>

 <uuid>e0842451-0137-4255-8783-305ca27f082d</uuid>

 <forward mode='hostdev' managed='yes'>

  <pf dev='eno2'/>

  <address type='pci' domain='0x0000' bus='0x3b' slot='0x10' function='0x1'/>

  <address type='pci' domain='0x0000' bus='0x3b' slot='0x10' function='0x3'/>

  <address type='pci' domain='0x0000' bus='0x3b' slot='0x10' function='0x5'/>

  <address type='pci' domain='0x0000' bus='0x3b' slot='0x10' function='0x7'/>

 </forward>

</network>

(3)從網(wǎng)絡(luò)適配器池中分配網(wǎng)卡給虛擬機(jī)

用這種方法添加 SRIOV 網(wǎng)卡比較簡單:

SRIOV Adapter Pool

按照如上方法添加網(wǎng)卡凭语,等同于以下 xml 配置:

  <interface type='network'>

   <mac address='52:54:00:2d:87:99'/>

   <source network='eno2_sriov_pool'/>

   <model type='virtio'/>

   <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>

  </interface>

開機(jī)后 dumpxml 如下:

  <interface type='hostdev' managed='yes'>

   <mac address='52:54:00:2d:87:99'/>

   <driver name='vfio'/>

   <source>

    <address type='pci' domain='0x0000' bus='0x3b' slot='0x10' function='0x1'/>

   </source>

   <model type='virtio'/>

   <alias name='hostdev0'/>

   <address type='pci' domain='0x0000' bus='0x00' slot='0x0f' function='0x0'/>

</interface>

使用 Virt-manager 安裝 CSR1000v

在 CentOS 圖形界面中葱她,打開 Terminal,運(yùn)行 virt-manager似扔,按照以下步驟創(chuàng)建 CSR1000v吨些;添加網(wǎng)卡,并選擇 en2_sriov_pool炒辉。

Step 1
選擇鏡像
Step 2
Step 3
Step 4

注:csr1kv-1 的第一個網(wǎng)口選擇macvtap Bridge模式豪墅,這樣就無需創(chuàng)建一個 Linux 網(wǎng)橋。但是黔寇,csr1kv-1 啟動以后不能通過該接口與 Linux 主機(jī)進(jìn)行通信偶器,僅能通過該接口訪問 Linux 主機(jī)外的網(wǎng)絡(luò)媳瞪。

Step 5
Step 6

添加完網(wǎng)卡后刑峡,點(diǎn)擊開始安裝房蝉,然后就可以關(guān)閉虛擬機(jī)了叔遂。上述操作完成后,virt-manager 會在/etc/libvirtd/qemu/目錄下創(chuàng)建csr1kv-1.xml霎苗。

KVM 調(diào)優(yōu)配置

KVM 的調(diào)優(yōu)比較復(fù)雜姆吭,主要是 NUMA、內(nèi)存大頁叨粘、vCPU PIN 等猾编,參考資料為 Redhat Linux 7 PERFORMANCE TUNING GUIDE。

(1)檢查平臺的能力

[root@centos7 ~]# virsh nodeinfo

CPU model:           x86_64

CPU(s):              72

CPU frequency:       999 MHz

CPU socket(s):       1

Core(s) per socket:  18

Thread(s) per core:  2

NUMA cell(s):        2

Memory size:         263665612 KiB
[root@centos7 ~]# virsh capabilities

<capabilities>

 <host>

  <uuid>4e53df1f-5b36-6842-99ee-1369d7c68730</uuid>

  <cpu>

   <arch>x86_64</arch>

   <model>Skylake-Server-IBRS</model>

   <vendor>Intel</vendor>

   <microcode version='33581318'/>

   <counter name='tsc' frequency='2294597000' scaling='yes'/>

   <topology sockets='1' cores='18' threads='2'/>

……

可檢查平臺的 CPU 核數(shù)升敲、分布,內(nèi)存的 NUMA 分布等轰传。

(2)NUMA 調(diào)優(yōu)

[root@centos7 ~]# numactl --hardware

available: 2 nodes (0-1)

node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53

node 0 size: 128491 MB

node 0 free: 112157 MB

node 1 cpus: 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

node 1 size: 128994 MB

node 1 free: 124120 MB

node distances:

node  0  1

 0: 10 21

 1: 21 10

兩顆 CPU驴党,每顆 CPU 各有 128GB 內(nèi)存港庄,分別是 node 0 和 node 1恕曲。

(3)內(nèi)存大頁 HugePage 以及透明大頁

cat /proc/meminfo | grep HugePages 查看當(dāng)前系統(tǒng)有多少個大頁:

[root@centos7 ~]# cat /proc/meminfo | grep Huge

AnonHugePages:   1685504 kB

HugePages_Total:      64

HugePages_Free:       60

HugePages_Rsvd:        0

HugePages_Surp:        0

Hugepagesize:    1048576 kB

在系統(tǒng)運(yùn)行時修改大頁數(shù)量:

[root@centos7 ~]# cat /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages

16

[root@centos7 ~]# echo 32 > /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages

[root@centos7 ~]# echo 32 > /sys/devices/system/node/node1/hugepages/hugepages-1048576kB/nr_hugepages

[root@centos7 ~]#

[root@centos7 ~]# numastat -cm | egrep 'Node|Huge'

`                 `Node 0 Node 1  Total

AnonHugePages     10962   1528  12490

HugePages_Total   32768  32768  65536

HugePages_Free    32768  32768  65536

HugePages_Surp        0      0      0

檢查透明大頁參數(shù),在 CentOS7 上缺省開啟把还;開啟了透明大頁,不影響靜態(tài)大頁的使用茸俭。

cat /sys/kernel/mm/transparent_hugepage/enabled

[always] madvise never

(4)vCPU 釘選

設(shè)置 CPU Affinity 的好處是提高 CPU 緩存效率,避免進(jìn)程在多個 CPU 核之間跳躍艇炎,切換 CPU 核均會導(dǎo)致緩存中的數(shù)據(jù)無效,緩存命中率大幅降低虹脯,導(dǎo)致數(shù)據(jù)獲取的開銷居高不下归形,損失性能厚棵。

virsh vcpuinfo csr1kv-1 可以查看 vCPU 的分配婆硬。

(5)編輯 CSR 1000v 的 XML 調(diào)優(yōu)參數(shù)

virsh edit csr1kv-1 可以編輯 XML 的參數(shù)彬犯,如下:

  <memoryBacking>
    <hugepages>
      <page size='1048576' unit='KiB'/>
    </hugepages>
    <locked/>
    <nosharepages/>
  </memoryBacking>
  <vcpu placement='static'>8</vcpu>
  <cputune>
    <vcpupin vcpu='0' cpuset='1'/>
    <vcpupin vcpu='1' cpuset='2'/>
    <vcpupin vcpu='2' cpuset='3'/>
    <vcpupin vcpu='3' cpuset='4'/>
    <vcpupin vcpu='4' cpuset='5'/>
    <vcpupin vcpu='5' cpuset='6'/>
    <vcpupin vcpu='6' cpuset='7'/>
    <vcpupin vcpu='7' cpuset='8'/>
    <emulatorpin cpuset='45-52'/> <!-- If Hyper-threading were enabled -->
  </cputune>
  <numatune>
    <memory mode='strict' nodeset='0'/>
  </numatune>
  <cpu mode='host-passthrough' check='none'/>
    <memballoon model='none'/>

注:<emulatorpin cpuset='37-44'/> 參數(shù)谐区,僅當(dāng) Hyper-Threating 開啟時使用宋列;有一些平臺并未關(guān)閉超線程炼杖,例如 Cisco 專門的 NFV 平臺 CSP熙含。通過 virsh chapabilities 查看 siblings='1,37'怎静,當(dāng) core 1 設(shè)置為 vcpupin 時消约,core 37 應(yīng)設(shè)置到 emulatorpin cpuset 中或粮。

以下關(guān)于 CPU 和內(nèi)存的參數(shù)設(shè)定建議來自于https://libvirt.org/formatdomain.htmlhttps://libvirt.org/kbase/kvm-realtime.html

<domain type='kvm'>
  <name>csr1kv-1</name>
  <uuid>59581018-6387-49df-ab09-2bcf40fc12ba</uuid>
  <memory unit='KiB'>8388608</memory>
  <currentMemory unit='KiB'>8388608</currentMemory>
  <memoryBacking>
    <hugepages>
      <page size='1048576' unit='KiB'/>
</hugepages>
<locked/>
    <nosharepages/>
  </memoryBacking>
  <vcpu placement='static'>8</vcpu>
  <cputune>
    <vcpupin vcpu='0' cpuset='1'/>
    <vcpupin vcpu='1' cpuset='2'/>
    <vcpupin vcpu='2' cpuset='3'/>
    <vcpupin vcpu='3' cpuset='4'/>
    <vcpupin vcpu='4' cpuset='5'/>
    <vcpupin vcpu='5' cpuset='6'/>
    <vcpupin vcpu='6' cpuset='7'/>
    <vcpupin vcpu='7' cpuset='8'/>
    <emulatorpin cpuset='37-44'/>
  </cputune>
  <numatune>
    <memory mode='strict' nodeset='0'/>
  </numatune>
  <os>
    <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
  </features>
  <cpu mode='host-passthrough' check='none'/>
  <clock offset='utc'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <pm>
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/home/root/images/csr1000v-universalk9.17.02.01v.qcow2'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </disk>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <master startport='2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <master startport='4'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pci-root'/>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </controller>
    <interface type='direct'>
      <mac address='52:54:00:36:95:f0'/>
      <source dev='eno1' mode='bridge'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <interface type='network'>
      <mac address='52:54:00:2d:87:99'/>
      <source network='eno2_sriov_pool'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target type='isa-serial' port='0'>
        <model name='isa-serial'/>
      </target>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <channel type='unix'>
      <target type='virtio' name='org.qemu.guest_agent.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <channel type='spicevmc'>
      <target type='virtio' name='com.redhat.spice.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='2'/>
    </channel>
    <input type='tablet' bus='usb'>
      <address type='usb' bus='0' port='1'/>
    </input>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <graphics type='spice' autoport='yes'>
      <listen type='address'/>
      <image compression='off'/>
    </graphics>
    <video>
      <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <redirdev bus='usb' type='spicevmc'>
      <address type='usb' bus='0' port='2'/>
    </redirdev>
    <redirdev bus='usb' type='spicevmc'>
      <address type='usb' bus='0' port='3'/>
    </redirdev>
    <memballoon model='none'/>
    <rng model='virtio'>
      <backend model='random'>/dev/urandom</backend>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
    </rng>
  </devices>
</domain>

上述參數(shù)整理自《Cisco CSR 1000v and Cisco ISRv Software Configuration Guide》

完成上述 XML 文件的編輯后,執(zhí)行

cd /etc/libvirtd/qemu

virsh define csr1kv-1.xml

virsh start csr1kv-1

(6)在 KVM 主機(jī)上訪問 CSR1000v 的 Console

在 virt-manager 創(chuàng)建 CSR1000v 虛擬機(jī)的時候冗尤,缺省會添加一個 Serial Device裂七。

[root@centos7 qemu]# virsh console 20

Connected to domain CSR1000v-1

Escape character is ^]

CSR 1000v 暫時不能通過 Console 配置背零,需要通過 virt-manager 的圖形化界面進(jìn)行初始化配置毛雇。

vCloud 的 Console 訪問正常灵疮。

(7)檢驗(yàn) CSR1000v 的調(diào)優(yōu)配置

[root@centos7 ~]# virsh list

Id  Name              State

----------------------------------------------------

 6   csr1kv-1            running



[root@centos7 ~]# virsh vcpuinfo 6

VCPU:      0

CPU:      1

State:     running

CPU time:    34.5s

CPU Affinity:  -y----------------------------------------------------------------------



VCPU:      1

CPU:      2

State:     running

CPU time:    32.0s

CPU Affinity:  --y---------------------------------------------------------------------



VCPU:      2

CPU:      3

State:     running

CPU time:    23.8s

CPU Affinity:  ---y--------------------------------------------------------------------



VCPU:      3

CPU:      4

State:     running

CPU time:    19.8s

CPU Affinity:  ----y-------------------------------------------------------------------



VCPU:      4

CPU:      5

State:     running

CPU time:    23.0s

CPU Affinity:  -----y------------------------------------------------------------------



VCPU:      5

CPU:      6

State:     running

CPU time:    23.4s

CPU Affinity:  ------y-----------------------------------------------------------------



VCPU:      6

CPU:      7

State:     running

CPU time:    28.5s

CPU Affinity:  -------y----------------------------------------------------------------



VCPU:      7

CPU:      8

State:     running

CPU time:    28.2s

CPU Affinity:  --------y---------------------------------------------------------------

以上顯示 CSR1000v 虛擬機(jī)的 CPU 親和性在 1-8 核上。

[root@centos7 ~]# numastat -c qemu-kvm

Per-node process memory usage (in MBs) for PID 46895 (qemu-kvm)

     Node 0 Node 1 Total

     ------ ------ -----

Huge    8192   0 8192

Heap    118   0  118

Stack     0   0   0

Private   144   7  151

------- ------ ------ -----

Total   8455   7 8461


以上顯示,內(nèi)存主要使用 Node 0剩胁。

[root@centos7 ~]# numastat -vm -p 13428 | grep HugePage

AnonHugePages       956.00     494.00     1450.00

HugePages_Total     16384.00    16384.00    32768.00

HugePages_Free      8192.00    16384.00    24576.00

HugePages_Surp       0.00       0.00      0.00

(8)在 CSR1KV 上檢查虛擬網(wǎng)卡

csr1kv-1#show platform software vnic-if interface-mapping

-------------------------------------------------------------

 Interface Name    Driver Name     Mac Addr

-------------------------------------------------------------

 GigabitEthernet2    net_ixgbe_vf    5254.002d.8799

 GigabitEthernet1    net_virtio     5254.0036.95f0

上述驅(qū)動名顯示為 net_ixgbe_vf 表明該虛擬網(wǎng)卡是一個 SR-IOV 池中分配的 VF 設(shè)備。

Linux 上抓取虛擬網(wǎng)卡的報文(參考)

查找虛擬機(jī)的網(wǎng)卡列表

[root@centos7 ~]# virsh domiflist 10

Interface Type    Source   Model    MAC

-------------------------------------------------------

vnet0   network  default  virtio   52:54:00:38:71:4a

macvtap0  direct   eno1    virtio   52:54:00:b2:70:90

vnet5   bridge   net-br1  virtio   52:54:00:69:93:23

抓取 vnet5 的報文

[root@centos7 ~]# tcpdump -i vnet5 -w ping.pcap

tcpdump: listening on vnet5, link-type EN10MB (Ethernet), capture size 262144 bytes

^C49 packets captured

51 packets received by filter

0 packets dropped by kernel

注:VF 如果被分配給虛擬機(jī),那么在 Linux 主機(jī)里觉至,通過 ip link 則查看不到該設(shè)備语御,無法通過上述辦法抓包应闯。

CSR 1000v 的初始化配置及 Smart License 注冊

(1)CSR 1000v 初始化配置示例

部分節(jié)略碉纺,其他為缺省配置骨田。

CSR1000v-1#show sdwan running-config

system

 system-ip       1.1.10.1

 site-id        101

 sp-organization-name CiscoBJ

 organization-name   CiscoBJ

 vbond 10.75.58.51 port 12346

!

hostname CSR1000v-1

username admin privilege 15 secret 9 $9$4/QL2V2K4/6H1k$XUmRNf.T7t3KDOj/FmoNexpEypCxr482dExXHDnohSI

ip name-server 64.104.123.245

ip route 0.0.0.0 0.0.0.0 10.75.59.1



interface GigabitEthernet1

 no shutdown

 arp timeout 1200

 ip address 10.75.59.35 255.255.255.0

 no ip redirects

 ip mtu  1500

 mtu 1500

 negotiation auto

exit



interface Tunnel1

 no shutdown

 ip unnumbered GigabitEthernet1

 no ip redirects

 ipv6 unnumbered GigabitEthernet1

 no ipv6 redirects

 tunnel source GigabitEthernet1

 tunnel mode sdwan

exit



clock timezone CST 8 0

ntp server 10.75.58.1 version 4

sdwan

 interface GigabitEthernet1

 tunnel-interface

  encapsulation ipsec

  allow-service sshd

 exit

(2)常用命令

  • show sdwan control local-properties
  • show sdwan control connections
  • show sdwan control connection-history
  • show sdwan running-config
  • show sdwan bfd sessions
  • show sdwan omp peers
  • show sdwan omp routes

(3)CSR 1000v Smart License 注冊

CSR 1000v 默認(rèn)限速為 250Mbps碎节,需要注冊 Smart License 才可解開限速狮荔。

CSR1000v-2#show platform hardware throughput level

The current throughput level is 250000 kb/s

注冊 Smart License 需要滿足以下條件:

1、 CSR 1000v 已經(jīng)注冊到 vManage雅采,控制面連接正常婚瓜;

2巴刻、 配置 ip http client source-interface GigabitEthernet2

3胡陪、 sdwan interface GigabitEthernet2 tunnel-interface allow-service all ---針對 16.12.x 版本;在新版本中僅需要 allow https

4妈经、 CSR 1000v 可以訪問 URL:https://tools.cisco.com/its/service/oddce/services/DDCEService

允許訪問 114.114.114.114狂塘,CSR 1000v 可解析域名 tools.cisco.com

替代辦法荞胡,增加一條命令 ip host tools.cisco.com 72.163.4.38

執(zhí)行 license smart register idtoken xxxxxx 進(jìn)行注冊

show license status 查看注冊結(jié)果

注冊完成后廊营,系統(tǒng)解開限速:

CSR1000v-1#show platform hardware throughput level

The current throughput level is 200000000 kb/s

性能和相關(guān)限制

(1)SRIOV 的性能

在上述 CSR1KV-1 安裝好后露筒,使用測試儀進(jìn)行性能測試慎式,測試條件中,設(shè)置丟包率為 0%掌眠,其性能如下:

Packet Site SDWAN Performance (Mbps) CEF Performance (Mbps)
128Byte 800 2843.75
256Byte 1431.26 6500.00
512Byte 2581.26 10578.13
1024Byte 3731.26 15500.00
1400Byte 4306.26 18171.88

[圖片上傳失敗...(image-a7cce9-1612597520115)]

注:上述測試結(jié)果非官方結(jié)果,不同服務(wù)器和網(wǎng)卡可能測試結(jié)果有區(qū)別渺尘,上述性能數(shù)據(jù)僅供參考沧烈。

(2)SRIOV 的限制

SRIOV 的主要限制是每一個 VF 設(shè)備支持的 VLAN 數(shù),ixgbevf 所支持的最大 VLAN 數(shù)為 64;因此侈贷,在 CSR1KV 中對應(yīng)的虛擬接口配置的活躍子接口數(shù)最大為 64俏蛮。

配置指南中有關(guān)于 SRIOV 子接口限制的說明:

Cisco CSR 1000v and Cisco ISRv Software Configuration Guide:

SR-IOV (ixgbevf)

Maximum VLANs: The maximum number of VLANs supported on PF is 64. Together, all VFs can have a total of 64 VLANs. (Intel limitation.)

SR-IOV (i40evf)

Maximum VLANs: The maximum number of VLANs supported on PF is 512. Together, all VFs can have a total of 512 VLANs. (Intel limitation.) Per-VF resources are managed by the PF (host) device driver.

附錄

(1)Virt-manager 設(shè)置虛機(jī)的 CPU 模式說明

Libvirt 主要支持三種 CPU mode:

  • host-passthrough: libvirt 令 KVM 把宿主機(jī)的 CPU 指令集全部透傳給虛擬機(jī)。因此虛擬機(jī)能夠最大限度的使用宿主機(jī) CPU 指令集辣恋,故性能是最好的伟骨。但是在熱遷移時继蜡,它要求目的節(jié)點(diǎn)的 CPU 和源節(jié)點(diǎn)的一致稀并。
  • host-model: libvirt 根據(jù)當(dāng)前宿主機(jī) CPU 指令集從配置文件 /usr/share/libvirt/cpu_map.xml 選擇一種最相配的 CPU 型號稻轨。在這種 mode 下,虛擬機(jī)的指令集往往比宿主機(jī)少线欲,性能相對 host-passthrough 要差一點(diǎn)李丰,但是熱遷移時,它允許目的節(jié)點(diǎn) CPU 和源節(jié)點(diǎn)的存在一定的差異嗜憔。
  • custom: 這種模式下虛擬機(jī) CPU 指令集數(shù)最少吉捶,故性能相對最差,但是它在熱遷移時跨不同型號 CPU 的能力最強(qiáng)珊拼。此外杆麸,custom 模式下支持用戶添加額外的指令集饼问。

三種 mode 的性能排序是:host-passthrough > host-model > custom

實(shí)際性能差異不大:100%> 95.84%>94.73%

引自:http://wsfdl.com/openstack/2018/01/02/libvirt_cpu_mode.html

(2)有關(guān)網(wǎng)卡模式的說明

使用 virt-manager 創(chuàng)建虛擬機(jī)莱革,在添加網(wǎng)卡時,有 3 中選擇闹击,分別是 e1000, rtl8139, virtio赏半。

“rtl8139”這個網(wǎng)卡模式是 qemu-kvm 默認(rèn)的模擬網(wǎng)卡類型,RTL8139 是 Realtek 半導(dǎo)體公司的一個 10/100M 網(wǎng)卡系列仲义,是曾經(jīng)非常流行(當(dāng)然現(xiàn)在看來有點(diǎn)古老)且兼容性好的網(wǎng)卡埃撵,幾乎所有的現(xiàn)代操作系統(tǒng)都對 RTL8139 網(wǎng)卡驅(qū)動的提供支持。

“e1000”系列提供 Intel e1000 系列的網(wǎng)卡模擬,純的 QEMU(非 qemu-kvm)默認(rèn)就是提供 Intel e1000 系列的虛擬網(wǎng)卡。

“virtio” 類型是 qemu-kvm 對半虛擬化 IO(virtio)驅(qū)動的支持苛谷。

這三個網(wǎng)卡的最大區(qū)別(此處指最需要關(guān)注的地方)是速度:

  • rtl8139 10/100Mb/s

  • e1000 1Gb/s

  • virtio 10Gb/s

注意 virtio 是唯一可以達(dá)到 10Gb/s 的腹殿。

virtio 是一種 I/O 半虛擬化解決方案刻炒,是一套通用 I/O 設(shè)備虛擬化的程序坟奥,是對半虛擬化 Hypervisor 中的一組通用 I/O 設(shè)備的抽象。提供了一套上層應(yīng)用與各 Hypervisor 虛擬化設(shè)備(KVM访敌,Xen寺旺,VMware 等)之間的通信框架和編程接口,減少跨平臺所帶來的兼容性問題叮姑,大大提高驅(qū)動程序開發(fā)效率。

(3)有關(guān) MACVTAP

以下內(nèi)容來自:https://www.ibm.com/developerworks/cn/linux/1312_xiawc_linuxvirtnet/index.html

MACVTAP 的實(shí)現(xiàn)基于傳統(tǒng)的 MACVLAN朱盐。和 TAP 設(shè)備一樣,每一個 MACVTAP 設(shè)備擁有一個對應(yīng)的 Linux 字符設(shè)備躯肌,并擁有和 TAP 設(shè)備一樣的 IOCTL 接口,因此能直接被 KVM/Qemu 使用嫡丙,方便地完成網(wǎng)絡(luò)數(shù)據(jù)交換工作拥刻。引入 MACVTAP 設(shè)備的目標(biāo)是:簡化虛擬化環(huán)境中的交換網(wǎng)絡(luò)泰佳,代替?zhèn)鹘y(tǒng)的 Linux TAP 設(shè)備加 Bridge 設(shè)備組合,同時支持新的虛擬化網(wǎng)絡(luò)技術(shù)黔宛,如 802.1 Qbg。

MACVTAP 設(shè)備和 VLAN 設(shè)備類似徽惋,是以一對多的母子關(guān)系出現(xiàn)的。在一個母設(shè)備上可以創(chuàng)建多個 MACVTAP 子設(shè)備宦棺,一個 MACVTAP 設(shè)備只有一個母設(shè)備,MACVTAP 子設(shè)備可以做為母設(shè)備呐芥,再一次嵌套的創(chuàng)建 MACVTAP 子設(shè)備。母子設(shè)備之間被隱含的橋接起來,母設(shè)備相當(dāng)于現(xiàn)實(shí)世界中的交換機(jī) TRUNK 口虾攻。實(shí)際上當(dāng) MACVTAP 設(shè)備被創(chuàng)建并且模式不為 Passthrough 時铡买,內(nèi)核隱含的創(chuàng)建了 MACVLAN 網(wǎng)絡(luò),完成轉(zhuǎn)發(fā)功能霎箍。MACVTAP 設(shè)備有四種工作模式:Bridge奇钞、VEPA、Private漂坏,Passthrough。

Bridge 模式下顶别,它完成與 Bridge 設(shè)備類似功能谷徙,數(shù)據(jù)可以在屬于同一個母設(shè)備的子設(shè)備間交換轉(zhuǎn)發(fā),虛擬機(jī)相當(dāng)于簡單接入了一個交換機(jī)驯绎。當(dāng)前的 Linux 實(shí)現(xiàn)有一個缺陷完慧,此模式下 MACVTAP 子設(shè)備無法和 Linux Host 通訊,即虛擬機(jī)無法和 Host 通訊剩失。----經(jīng)驗(yàn)證屈尼,屬實(shí)。

Passthrough 模式下拴孤,內(nèi)核的 MACVLAN 數(shù)據(jù)處理邏輯被跳過脾歧,硬件決定數(shù)據(jù)如何處理,從而釋放了 Host CPU 資源演熟。

[圖片上傳失敗...(image-ad3fa5-1612597520115)]

MACVTAP Passthrough 概念與 PCI Passthrough 概念不同鞭执,上圖詳細(xì)解釋了兩種情況的區(qū)別。

PCI Passthrough 針對的是任意 PCI 設(shè)備绽媒,不一定是網(wǎng)絡(luò)設(shè)備蚕冬,目的是讓 Guest OS 直接使用 Host 上的 PCI 硬件以提高效率。以 X86 平臺為例是辕,數(shù)據(jù)將通過需要硬件支持的 VT-D 技術(shù)從 Guest OS 直接傳遞到 Host 硬件上囤热。這樣做固然效率很高,但因?yàn)槟M器失去了對虛擬硬件的控制获三,難以同步不同 Host 上的硬件狀態(tài)旁蔼,因此當(dāng)前在使用 PCI Passthrough 的情況下難以做動態(tài)遷移。

MACVTAP Passthrough 僅僅針對 MACVTAP 網(wǎng)絡(luò)設(shè)備疙教,目的是繞過內(nèi)核里 MACVTAP 的部分軟件處理過程棺聊,轉(zhuǎn)而交給硬件處理。在虛擬化條件下贞谓,數(shù)據(jù)還是會先到達(dá)模擬器 I/O 層限佩,再轉(zhuǎn)發(fā)到硬件上。這樣做效率有損失,但模擬器仍然控制虛擬硬件的狀態(tài)及數(shù)據(jù)的走向祟同,可以做動態(tài)遷移作喘。

(4)SR-IOV 介紹

如果網(wǎng)卡支持 SRIOV,請使用 SRIOV PCI Passthrough晕城。

nic-type-010

軟件模擬是通過 Hypervisor 層模擬虛擬網(wǎng)卡泞坦,實(shí)現(xiàn)與物理設(shè)備完全一樣的接口,虛擬機(jī)操作系統(tǒng)無須修改就能直接驅(qū)動虛擬網(wǎng)卡砖顷,其最大的缺點(diǎn)是性能相對較差贰锁;

網(wǎng)卡直通支持虛擬機(jī)繞過 Hypervisor 層,直接訪問物理 I/O 設(shè)備滤蝠,具有最高的性能豌熄,但是在同一時刻物理 I/O 設(shè)備只能被一個虛擬機(jī)獨(dú)享;

SR-IOV 是 Intel 在 2007 年提出的解決虛擬化網(wǎng)絡(luò) I/O 的硬件技術(shù)方案几睛,該技術(shù)不僅能夠繼承網(wǎng)卡直通的高性能優(yōu)勢房轿,而且同時支持物理 I/O 設(shè)備的跨虛擬機(jī)共享,具有較好的應(yīng)用前景所森。

原文鏈接:https://blog.csdn.net/lsz137105/article/details/100752930

SR-IOV(Single Root I/O Virtualization)是一個將 PCIe 設(shè)備(如網(wǎng)卡)共享給虛擬機(jī)的標(biāo)準(zhǔn)囱持,通過為虛擬機(jī)提供獨(dú)立的內(nèi)存空間、中斷焕济、DMA 流纷妆,來繞過 VMM 實(shí)現(xiàn)數(shù)據(jù)訪問。

SR-IOV 引入了兩種 PCIe functions:

  • PF(Physical Function):包含完整的 PCIe 功能晴弃,包括 SR-IOV 的擴(kuò)張能力掩幢,該功能用于 SR-IOV 的配置和管理。
  • VF(Virtual Function):包含輕量級的 PCIe 功能上鞠。每一個 VF 有它自己獨(dú)享的 PCI 配置區(qū)域际邻,并且可能與其他 VF 共享著同一個物理資源。

SR-IOV 網(wǎng)卡通過將 SR-IOV 功能集成到物理網(wǎng)卡上芍阎,將單一的物理網(wǎng)卡虛擬成多個 VF 接口世曾,每個 VF 接口都有單獨(dú)的虛擬 PCIe 通道,這些虛擬的 PCIe 通道共用物理網(wǎng)卡的 PCIe 通道谴咸。每個虛擬機(jī)可占用一個或多個 VF 接口轮听,這樣虛擬機(jī)就可以直接訪問自己的 VF 接口,而不需要 Hypervisor 的協(xié)調(diào)干預(yù)岭佳,從而大幅提升網(wǎng)絡(luò)吞吐性能血巍。

(5)探索虛擬機(jī)進(jìn)程

每一個客戶機(jī)就是宿主機(jī)中的一個 QEMU 進(jìn)程,而一個客戶機(jī)的多個 vCPU 就是一個 QEMU 進(jìn)程中的多個線程珊随。

[root@centos7 ~]# ps -ef | grep qemu

qemu      52595      1 99 10:37 ?        01:24:12 /usr/libexec/qemu-kvm -name csr1kv-1 -S -machine pc-i440fx-rhel7.0.0,accel=kvm,usb=off,dump-guest-core=off,mem-merge=off -cpu host -m 8192 -mem-prealloc -mem-path /dev/hugepages/libvirt/qemu/7-csr1kv-1 -realtime mlock=on -smp 8,sockets=8,cores=1,threads=1 -uuid 59581018-6387-49df-ab09-2bcf40fc12ba -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-7-csr1kv-1/monitor.sock,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=delay -no-hpet -no-shutdown -global PIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1 -boot strict=on -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x6 -drive file=/home/root/images/csr1000v-universalk9.17.02.01v.qcow2,format=qcow2,if=none,id=drive-virtio-disk0 -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x7,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -netdev tap,fd=26,id=hostnet0,vhost=on,vhostfd=28 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:36:95:f0,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -chardev socket,id=charchannel0,path=/var/lib/libvirt/qemu/channel/target/domain-7-csr1kv-1/org.qemu.guest_agent.0,server,nowait -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=org.qemu.guest_agent.0 -chardev spicevmc,id=charchannel1,name=vdagent -device virtserialport,bus=virtio-serial0.0,nr=2,chardev=charchannel1,id=channel1,name=com.redhat.spice.0 -spice port=5900,addr=127.0.0.1,disable-ticketing,image-compression=off,seamless-migration=on -vga qxl -global qxl-vga.ram_size=67108864 -global qxl-vga.vram_size=67108864 -global qxl-vga.vgamem_mb=16 -global qxl-vga.max_outputs=1 -device vfio-pci,host=1d:00.0,id=hostdev1,bus=pci.0,addr=0x8 -device vfio-pci,host=3b:10.1,id=hostdev0,bus=pci.0,addr=0x4 -msg timestamp=on

使用 virsh 命令或 virt-manager 開啟虛擬機(jī)述寡,是通過調(diào)用/usr/libexec/qemu-kvm 并附帶虛擬配置的參數(shù)柿隙,來開啟 qemu-kvm 的進(jìn)程■晷祝可以看到上述的參數(shù)是非常復(fù)雜的优俘,libvirt 提供 XML 參數(shù)進(jìn)行簡化。

ps -efL | grep qemu 可以列出所有的線程掀序,但是輸出篇幅很長,不在此列出惭婿;使用 pstree 可列出其父進(jìn)程不恭、線程關(guān)系,如下:

Pstree

virt-top 可查看虛機(jī)運(yùn)行狀態(tài)和資源利用率:

[root@centos7 ~]# virt-top -1

Virt-top

參考資料連接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末财饥,一起剝皮案震驚了整個濱河市换吧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钥星,老刑警劉巖沾瓦,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異谦炒,居然都是意外死亡贯莺,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門宁改,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缕探,“玉大人,你說我怎么就攤上這事还蹲〉模” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵谜喊,是天一觀的道長潭兽。 經(jīng)常有香客問我,道長斗遏,這世上最難降的妖魔是什么山卦? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮最易,結(jié)果婚禮上怒坯,老公的妹妹穿的比我還像新娘。我一直安慰自己藻懒,他們只是感情好剔猿,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嬉荆,像睡著了一般归敬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天汪茧,我揣著相機(jī)與錄音椅亚,去河邊找鬼。 笑死舱污,一個胖子當(dāng)著我的面吹牛呀舔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播扩灯,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼媚赖,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了珠插?” 一聲冷哼從身側(cè)響起惧磺,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎捻撑,沒想到半個月后磨隘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡顾患,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年番捂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片江解。...
    茶點(diǎn)故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡白嘁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出膘流,到底是詐尸還是另有隱情絮缅,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布呼股,位于F島的核電站耕魄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏彭谁。R本人自食惡果不足惜吸奴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望缠局。 院中可真熱鬧则奥,春花似錦、人聲如沸狭园。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽唱矛。三九已至罚舱,卻和暖如春井辜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背管闷。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工粥脚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人包个。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓刷允,卻偏偏與公主長得像,于是被迫代替她去往敵國和親碧囊。 傳聞我的和親對象是個殘疾皇子恃锉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容