l298n电机驱动模块使用方法_SPDK virtio 驱动模块介绍及使用
簡介
CONTENTS
SPDK ?virtio模塊介紹
SPDK ?virtio 用戶模式使用示例
SPDK ?virtio PCI模式使用示例
總結
第一章
SPDK virtio模塊介紹
眾所周知,Virtio協議定義了兩個塊設備驅動,virtio-blk和virtio-scsi。SPDK Vhost target提供了VM中virtio-blk/scsi半虛擬化IO請求的加速器,相比較原來的QEMU virtio-blk方案以及kernel vhost-scsi方案極大的提高了性能,VM內置的內核半虛擬化驅動即可使用。
現在SPDK在使用相同的vhost target基礎上,更進一步的提供了一個用戶態的virtio bdev模塊,有兩個傳輸層:
?* PCI:在VM中使用,該模塊提供了在VM中使用用戶態驅動訪問后端塊設備的能力,用戶需要卸載掉原內核的virtio-blk/scsi驅動,綁定virtio控制器到uio模塊
?* Vhost-user模式:提供進程間使用virtio-blk/scsi協議訪問vhost target的塊設備驅動,可以直接集成到用戶的獨立進程中使用,例如container。
目前SPDK virtio驅動模塊只實現了virtio 1.0 版本。
下圖是SPDK virtio整體介紹:
第二章?
SPDK virtio 用戶模式使用示例
SPDK virtio用戶模式的使用場景可以參考下圖:
如上圖所示,SPDK vhost socket和使用virtio塊設備的SPDK進程在同一臺機器。
參考步驟如下:
在host機器中,使用如下命令配置和編譯SPDK:
[root@]./configure --with-vhost --with-virtio && make啟動vhost主進程:[root@] ./app/vhost/vhost -i 0
創建vhost controller,以下是vhost blk示例:
[root@]./scripts/rpc.py bdev_malloc_create 128 512
[root@]./scripts/rpc.py vhost_create_blk_controller vhostblk0 Malloc0
啟動spdk bdevperf進程:
[root@] ./test/bdev/bdevperf/bdevperf-q 128 -o 4096 -w randread -t 300 -z -r /var/tmp/newspdk.sock -m 0x2 -g
Vhost-user需要連續的內存,如果使用2MiB的hugepage時,注意要加-g參數,只創建一個hugetlbfs文件。因為是第二個進程,所以要加-r參數,創建新的rpc 監聽地址。同時要采用和vhost進程不同的core。
接著是創建virtio bdev:
[root@]./scripts/rpc.py? -s? /var/tmp/newspdk.sock?? bdev_virtio_attach_controller -t user -a /home/storage/spdk/vhostblk0 -d blk virtioblk0
這樣,就創建了user模式的virtio塊設備。
我們還可以運行bdevperf,測試一下virtio塊設備的性能:
[root@]PYTHONPATH=$PYTHONPATH:./scripts/? test/bdev/bdevperf/bdevperf.py -s/var/tmp/newspdk.sock? -t 1000perform_tests
經過五分鐘,bdevperf工具就會打印測試結果:
?Logical core: 1
?virtioblk0????????? : 1500453.10 IO/s??? 5861.14 MB/s
?=====================================================
?Total?????????????? : 1500453.10 IO/s??? 5861.14 MB/s
第三章
SPDK virtio PCI模式使用示例
PCI模式使用于虛擬機中。這種模式會避免QENU和虛擬機內核的中斷和上下文切換開銷,能夠顯著提高IO性能。經過驗證, 標準的SPDK vhost 和kernel vhost scsi都可以通過SPDK virtio PCI模式加速。官方qemu倉庫主分支代碼實現的virtio-blk PCI設備也可以使用SPDK virtio PCI模塊。
使用場景參考下圖:
示例步驟如下:
在host機器中,使用如下命令配置和編譯SPDK:
[root@]./configure --with-vhost && make
啟動vhost主進程:
[root@] ./app/vhost/vhost
創建vhost controller,以下是vhost blk示例:
[root@]./scripts/rpc.py bdev_malloc_create 128 512
[root@]./scripts/rpc.py vhost_create_blk_controller vhostblk0 Malloc0
運行如下命令啟動QEMU:
[root@]/home/storage/qemu/build/x86_64-softmmu/qemu-system-x86_64 -cpu host -smp 8 -m 10240 -object memory-backend-file,id=mem,size=10G,mem-path=/dev/hugepages,share=on -numa node,memdev=mem -drive file=/home/storage/fedora.qcow2,if=none,id=disk -device ide-hd,drive=disk,bootindex=0 -net user,hostfwd=tcp::10021-:22 -net nic -chardev socket,id=char0,path=/home/storage/spdk/vhostblk0 -device vhost-user-blk-pci,chardev=char0,id=blk0 -vnc 0.0.0.0:3 --enable-kvm
運行ssh命令登錄到虛擬機中:
[root@]ssh -p 10021 root@localhost
在虛擬機中克隆并配置spdk代碼:
[root@]git clone https://github.com/spdk/spdk
[root@]cd spdk && git submodule update --init
[root@]./configure --with-virtio && make配置SPDK運行環境:
[root@]./scripts/setup.sh
運行spdk target:
[root@]./app/spdk_tgt/spdk_tgt &
創建virtio PCI模式塊設備:
[root@]./scripts/rpc.py?? bdev_virtio_attach_controller -t pci -a 00:04.0 -d blk virtioblk0
00:04.0是SPDK vhost設備在VM中的PCI bus number, 可以根據實際情況變更。這樣virtio塊設備就創建成功了。我們就可以在虛擬機中使用這個virtio 塊設備了。
我們還可以運行SPDK測試工具bdevperf直接測試virtio 塊設備。步驟如下。
如果使用配置文件的方式的話, 首先要創建bdev.conf文件,內容如下:
[VirtioPci]
Enable Yes
運行bdevperf命令, 參考命令如下:
[root@] ./test/bdev/bdevperf/bdevperf -c bdev.conf -q 128 -o 4096 -w randread -t 300
命令結果如下:
?Logical core: 0
?VirtioBlk0????????? : 1438365.17 IO/s??? 5618.61 MB/s
?=====================================================
?Total?????????????? : 1438365.17 IO/s??? 5618.61 MB/s
作為對比,我們可以運行bdevperf測試內核驅動virtio設備。創建bdev.conf:
[AIO]
AIO /dev/vda AIO0
運行bdevperf命令,參考命令如下:
[root@]./test/bdev/bdevperf/bdevperf -c bdev.conf -q 128 -o 4096 -w randread -t 300
命令結果如下:
?Logical core: 0
?AIO0??????????????? :? 254381.20 IO/s???? 993.68 MB/s
?=====================================================
?Total?????????????? :? 254381.20 IO/s???? 993.68 MB/s
第四章?
總結
下面的表格是三種運行方式的結果對比:
Bdevperf運行方式 | SPDK virtio 用戶模式 | SPDK virtio PCI模式 | VM 內核AIO性能 |
隨機讀帶寬 | 1500453.10 IO/s??? | 1438365.17 IO/s??? | 254381.20 IO/s???? |
上面章節運行bdevperf采用的SPDKcommit是1b6d1c80f96dab381db066c9c5f7852ea327eb75。
初步性能實驗數據,僅供參考,更多官方數據,參考https://spdk.io/doc/相關性能測試報告。大家如果想深入了解SPDK virtio驅動,可以聯系SPDK 社區。?
? ? 轉載須知 ??
DPDK與SPDK開源社區公眾號文章轉載聲明
推薦閱讀?SPDK線程模型解析試試SPDK的trace
在虛擬機上部署SPDK NVME測試案例
總結
以上是生活随笔為你收集整理的l298n电机驱动模块使用方法_SPDK virtio 驱动模块介绍及使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 远程图片合拼,PHP实现将几张照
- 下一篇: ipv6 ospf配置方法_【思唯网络学