• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于I/O前后端模型的密碼卡軟件虛擬化①

      2022-02-15 06:41:20唐樂爽竇同銳桑洪波張玉國
      關(guān)鍵詞:共享內(nèi)存宿主機(jī)調(diào)用

      唐樂爽,竇同銳,桑洪波,張玉國

      (三未信安科技股份有限公司,濟(jì)南 250098)

      隨著云計算的高速發(fā)展,業(yè)務(wù)上云已經(jīng)成為趨勢,這對云服務(wù)商保障云上數(shù)據(jù)的完整性、機(jī)密性和可用性提出了更高的要求,而密碼技術(shù)及密碼模塊正是保護(hù)重要信息和數(shù)據(jù)安全的核心技術(shù)[1].針對云計算環(huán)境安全應(yīng)用多樣化、功能復(fù)雜化,密碼設(shè)備提供商們設(shè)計開發(fā)了硬件密碼產(chǎn)品-云密碼機(jī),該產(chǎn)品結(jié)合密碼技術(shù)與虛擬化技術(shù),可以實(shí)現(xiàn)在一臺硬件密碼設(shè)備上運(yùn)行多個虛擬化的密碼機(jī)(VSM)[2],滿足云計算虛擬環(huán)境中存在的高速數(shù)據(jù)加解密、數(shù)字簽名等需求.云密碼機(jī)的核心密碼模塊是支持SR-IOV[3]虛擬化的高性能密碼卡,具備虛擬出8–16 個邏輯密碼卡的能力,云密碼機(jī)相對應(yīng)的提供8–16 個虛擬密碼機(jī)服務(wù).

      密碼卡虛擬化可以在一臺宿主機(jī)上實(shí)現(xiàn)多虛擬機(jī)共享一張密碼卡,提高密碼卡的利用率,國內(nèi)外在此方面做了相關(guān)工作.Berger 等[4]提出了可信平臺模塊(TPM)的虛擬化,對密碼卡設(shè)備的虛擬化有一定的指導(dǎo)意義,但缺少PCI-E 總線設(shè)備的實(shí)現(xiàn);楊永嬌等[5]提出了一個基于硬件輔助虛擬化的VT-d 技術(shù)在Xen 云平臺上的安全隔離框架,缺少具體的實(shí)現(xiàn);Sun 等[6]設(shè)計了一種密碼卡虛擬化框架用于實(shí)現(xiàn)密碼卡在虛擬化環(huán)境中使用,由于該框架性能閾值的調(diào)定與動態(tài)遷移的受限,距離實(shí)際應(yīng)用還需要進(jìn)一步研究;馬龍宇[7]設(shè)計與實(shí)現(xiàn)了基于 SR-IOV 虛擬化技術(shù)高速密碼卡,但是僅支持160 位的哈希密碼運(yùn)算;張嘉夫[8]提出一種基于密碼卡虛擬化的隱私保護(hù)方法,使用動態(tài)多安全級虛擬密碼卡隱私保護(hù)模型解決虛擬桌面下的隱私保護(hù)問題,為了最大化發(fā)揮虛擬密碼卡的性能,把多組請求組包發(fā)送,應(yīng)用范圍受限;任繼奎等[9]基于SR-IOV 理論設(shè)計實(shí)現(xiàn)了一種基于FPGA的虛擬化設(shè)備的數(shù)據(jù)交互模型,解決云計算平臺與虛擬設(shè)備間高速數(shù)據(jù)交互的需求,本質(zhì)上基于硬件虛擬化;蘇振宇[10]提出了3 種密碼卡虛擬化設(shè)計方案,并實(shí)現(xiàn)了基于SR-IOV 虛擬化技術(shù)的硬件虛擬化密碼卡和基于現(xiàn)場可編程門陣列(FPGA)的軟件虛擬化密碼卡,但是硬件虛擬化密碼卡方案仍然是基于硬件虛擬化,而軟件虛擬化方案需要重新設(shè)計密碼卡,并不適用于現(xiàn)有的密碼卡.

      綜上所述,目前國內(nèi)外在密碼卡虛擬化方面的研究仍然比較少,技術(shù)發(fā)展相對滯后,缺乏實(shí)際應(yīng)用[10],而且大部分集中在基于SR-IOV的硬件虛擬化方面,軟件虛擬化方面的研究更少.基于SR-IOV的密碼卡較常規(guī)密碼卡價格昂貴,對云密碼機(jī)的軟硬件有苛刻的兼容條件,同時受制于有限的設(shè)備電路資源,提供的虛擬邏輯密碼卡數(shù)量有限,可擴(kuò)展性較差.更為嚴(yán)重的問題是,SR-IOV 很難支持虛擬機(jī)的遷移和復(fù)制等操作[11].

      因此針對該類密碼卡在云密碼機(jī)使用中存在的兼容性差、擴(kuò)展性受限以及性價比低等問題,本研究從軟件虛擬化的角度出發(fā),提出了基于I/O 前后端模型的密碼卡軟件虛擬化方法,分別設(shè)計并實(shí)現(xiàn)了基于共享內(nèi)存的軟件虛擬化和基于virtio的軟件虛擬化方案,第1 種方案適用于X86 平臺云密碼機(jī),第2 種方案適用于ARM 平臺的云密碼機(jī).本文提出的技術(shù)不僅可以使得多虛擬機(jī)有效地共享普通密碼,很大程序降低云密碼機(jī)使用密碼卡的硬件門檻,而且能夠彈性擴(kuò)充虛密碼機(jī)的數(shù)量、實(shí)時遷移虛擬機(jī)并降低采購密碼卡的成本.

      1 I/O 虛擬化

      I/O 虛擬化可以提高系統(tǒng)運(yùn)行性能和簡化硬件要求,使得數(shù)量不多的物理設(shè)備被多個虛擬機(jī)共享,從而增加I/O 密集型虛擬機(jī)的數(shù)量.在系統(tǒng)虛擬化基本結(jié)構(gòu)中,虛擬機(jī)管理器(VMM)處于硬件資源與操作系統(tǒng)之間,負(fù)責(zé)完成CPU、內(nèi)存與I/O 等硬件資源的虛擬化,虛擬出來的I/O 設(shè)備可以與物理設(shè)備接口保持一致,也可以完全不同.一般而言,I/O 虛擬化可以分為全虛擬化、半虛擬化與硬件輔助虛擬化3 種.

      (1)全虛擬化技術(shù)

      該 I/O 虛擬化技術(shù)通過軟件方式模擬真實(shí)的硬件設(shè)備,虛擬機(jī)無法區(qū)分模擬硬件設(shè)備與物理設(shè)備,不需要修改虛擬機(jī)操作系統(tǒng)與驅(qū)動程序,可以直接使用物理設(shè)備的驅(qū)動程序驅(qū)動該虛擬設(shè)備,圖1展現(xiàn)了I/O全虛擬化模型.

      圖1 I/O 全虛擬化模型

      當(dāng)客戶機(jī)訪問模擬I/O 設(shè)備時,所有I/O 訪問請求都會被虛擬機(jī)管理器截獲,并把I/O 指令內(nèi)容寫入I/O 共享頁,接著事件通知模塊告知設(shè)備模擬器收集I/O 指令,設(shè)備模擬器負(fù)責(zé)完成本次 I/O 請求的模擬,最后將執(zhí)行結(jié)果傳遞給虛擬機(jī).全虛擬化的移植性與兼容性非常好,但是性能較差,軟件模擬I/O 請求的處理需要虛擬機(jī)監(jiān)視器與虛擬機(jī)多次交互,頻繁切換上下文,會造成很大的時間開銷.

      (2)半虛擬化技術(shù)

      該 I/O 虛擬化模型又稱為前后端模型,引入了 I/O環(huán)機(jī)制和事件機(jī)制,向虛擬機(jī)提供一組新的設(shè)備接口.虛擬機(jī)與虛擬機(jī)管理器調(diào)用這些設(shè)備接口,通過 I/O環(huán)機(jī)制進(jìn)行數(shù)據(jù)傳輸,并采用事件機(jī)制實(shí)現(xiàn)通信,減少了傳統(tǒng)的中斷機(jī)制引入的上下文切換頻率,提升了虛擬設(shè)備的性能,圖2展現(xiàn)了I/O 全虛擬化模型.

      圖2 I/O 半虛擬化模型

      半虛擬化比全虛擬化在性能上有很大的提高,但是半虛擬化需要修改虛擬機(jī)操作系統(tǒng)和驅(qū)動程序適配新的設(shè)備接口,因此在移植性與兼容性方面受限.

      (3)硬件輔助虛擬化技術(shù)

      該虛擬化技術(shù)可以在硬件層次提供物理設(shè)備的共享,常見的硬件虛擬化包括設(shè)備直傳與單根 I/O 虛擬化(SR-IOV).設(shè)備直傳需要額外的硬件支持,如Intel VT-d[12]、AMD IOMMU[13]等,可以直接把物理設(shè)備分配給虛擬機(jī),讓虛擬機(jī)獨(dú)占該設(shè)備,但是設(shè)備直傳技術(shù)只能把物理設(shè)備分配給一個虛擬機(jī),不能讓多個虛擬機(jī)共享此物理設(shè)備,因而在云計算環(huán)境并不常用.

      SR-IOV 虛擬化是在設(shè)備直傳技術(shù)的基礎(chǔ)上,引入了物理功能(PF)與虛擬功能(VF)的概念,在硬件層面對物理資源進(jìn)行映射,通過創(chuàng)建不同虛擬功能(VF)設(shè)備的方式,讓一個PCIe 物理設(shè)備可以對外顯示為多個不同的物理設(shè)備,虛擬機(jī)管理器可以把這些VF 設(shè)備直接分配給虛擬機(jī),虛擬機(jī)安裝特定的設(shè)備驅(qū)動對VF 進(jìn)行訪問,進(jìn)而實(shí)現(xiàn)虛擬機(jī)對物理設(shè)備的原生共享,訪問過程不需要虛擬機(jī)管理器的參與,圖3展現(xiàn)了SR-IOV模型.

      圖3 SR-IOV 模型

      在SR-IOV 設(shè)備中,PF 稱為完整的PCIe 功能,可以配置管理 SR-IOV 設(shè)備,控制I/O 數(shù)據(jù)讀取;VF 稱為輕量級的PCIe 功能,可以進(jìn)行 I/O 數(shù)據(jù)讀取,但在配置管理SR-IOV 設(shè)備方面受限.

      2 密碼卡軟件虛擬化

      密碼卡一方面作為I/O 設(shè)備,虛擬化后的性能會成為制約虛擬機(jī)密碼運(yùn)算性能的瓶頸,另一方面作為安全設(shè)備,虛擬機(jī)與設(shè)備交互的安全性是需要重點(diǎn)兼顧的內(nèi)容.因此實(shí)現(xiàn)密碼卡軟件虛擬化,需要充分考慮性能、共享、安全、易用等問題[10],借鑒I/O 半虛擬化的思想,本文提出并設(shè)計了兩種基于I/O 前后端模型的軟件虛擬化方案.

      (1)性能:實(shí)現(xiàn)虛擬機(jī)與密碼卡的高效通信,盡量減少性能損失,力求接近物理卡的性能.當(dāng)采用虛擬技術(shù)后,在虛擬機(jī)中存在的是模擬的邏輯密碼卡,邏輯設(shè)備對接物理設(shè)備要經(jīng)過一次 I/O 訪問過程,導(dǎo)致虛擬機(jī)中密碼卡的性能與直接使用物理密碼卡的性能相比存在 50%~90%的損失[14];

      (2)安全:必須保證數(shù)據(jù)傳輸?shù)陌踩€(wěn)定可靠,不能夠使用易受攻擊的通信方式,尤其是密碼卡這種進(jìn)行密碼運(yùn)算的設(shè)備,如TCP/IP 通信,大部分攻擊都是通過網(wǎng)絡(luò)進(jìn)行的[15];

      (3)易用:不能修改操作系統(tǒng)與軟件模擬器,使用通用版的操作系統(tǒng)與軟件模擬器才能保證密碼卡軟件虛擬化的易用性;

      (4)共享:提高密碼卡的共享能力,可以保證密碼卡為多虛擬機(jī)提供密碼運(yùn)算服務(wù).

      3 基于共享內(nèi)存的密碼卡軟件虛擬化

      3.1 總體設(shè)計

      基于共享內(nèi)存的密碼卡軟件虛擬化總體設(shè)計如圖4所示,虛擬機(jī)中的應(yīng)用程序通過接口庫調(diào)用ivshmem 設(shè)備驅(qū)動,設(shè)備驅(qū)動搬運(yùn)數(shù)據(jù)到共享內(nèi)存,然后向偽虛擬機(jī)發(fā)送請求,偽虛擬機(jī)接收到請求后,服務(wù)程序讀取共享內(nèi)存數(shù)據(jù)并調(diào)用密碼卡完成數(shù)據(jù)的密碼運(yùn)算處理,處理完成之后回寫共享內(nèi)存,最后通過唯一ID 通知虛擬機(jī),對應(yīng)的虛擬機(jī)收到中斷,操作共享內(nèi)存,完成一次通信.

      圖4 基于共享內(nèi)存的密碼卡軟件虛擬化總體設(shè)計圖

      Ivshmem 可以讓多虛擬機(jī)與宿主機(jī)通過共享內(nèi)存實(shí)現(xiàn)通信,啟動虛擬機(jī)時需要預(yù)先設(shè)置ivshmem設(shè)備的中斷數(shù)量、共享內(nèi)存名稱、共享內(nèi)存大小等,為了優(yōu)化軟件虛擬化的效率,消除共享內(nèi)存引入信號量帶來的性能影響,本方案對共享內(nèi)存采用統(tǒng)一申請、統(tǒng)一分配的方式,即使用服務(wù)程序申請一塊內(nèi)存,使用虛擬機(jī)的唯一ID 確定各虛擬機(jī)在該塊共享內(nèi)存的地址,在多個虛擬機(jī)同時申請調(diào)用密碼卡完成密碼運(yùn)算時,可以先把數(shù)據(jù)拷貝到根據(jù)ID 確定的共享內(nèi)存地址,通知偽虛擬機(jī)依次處理,以此實(shí)現(xiàn)多虛擬機(jī)調(diào)用密碼卡的異步請求,減少時間開銷,充分發(fā)揮密碼卡密碼卡的性能.

      其中,除了服務(wù)程序要設(shè)計之外,ivshmem 設(shè)備的前端驅(qū)動也需要重新設(shè)計.密碼卡驅(qū)動的特殊之處在于可以根據(jù)虛擬機(jī)的ID 定位在共享內(nèi)存中分配的位置,其余的本質(zhì)上都是通用的PCIe 驅(qū)動,這里就不在詳細(xì)描述,調(diào)用接口庫與密碼卡驅(qū)動是不需要做任何修改的.

      3.2 共享內(nèi)存的實(shí)現(xiàn)

      共享內(nèi)存,顧名思義就是指多個不相關(guān)的進(jìn)程可以訪問同一段物理內(nèi)存,這是一種非常有效地共享和傳遞數(shù)據(jù)的方式,節(jié)省了一次數(shù)據(jù)拷貝的時間.當(dāng)然,這要求使用共享內(nèi)存通信的多個不相關(guān)的進(jìn)程處于同一個計算機(jī)系統(tǒng)內(nèi),此外共享內(nèi)存沒有提供同步機(jī)制,為避免訪問中出現(xiàn)的同步和互斥問題,需要由操作共享內(nèi)存讀寫的進(jìn)程來控制同步訪問[16].因此,方案一采用共享內(nèi)存方式實(shí)現(xiàn)通信,同時選擇使用eventfd中斷實(shí)現(xiàn)同步.

      目前QEMU/KVM是最流行的虛擬化組合,也是絕大部分企業(yè)虛擬化方案的首先,QEMU 負(fù)責(zé)模擬各類輸入輸出設(shè)備,KVM 負(fù)責(zé)CPU 虛擬化與內(nèi)存虛擬化.IVSHMEM是QEMU 模擬的一個PCI 設(shè)備,支持eventfd中斷同步,通過共享內(nèi)存讓多虛擬機(jī)與宿主機(jī)實(shí)現(xiàn)通信.在虛擬機(jī)內(nèi),ivshmem 對應(yīng)的PCI ID為1af4:1110,支持3 個PCI 基地址寄存器,BAR 0為1 KB MMIO (memory-mapped I/O)區(qū)域的設(shè)備寄存器,包括中斷MASK 寄存器、中斷Status 寄存器、IVPosition寄存器與Doorbell 寄存器,其中IVPosition 寄存器為只讀寄存器,其值為虛擬機(jī)啟動時被分配的ID,BAR 1 用于MSI-X中斷,BAR 2為共享內(nèi)存映射基址.通過ivshmem 方式,虛擬機(jī)與虛擬機(jī)之間可以實(shí)現(xiàn)中斷模式下的通信,而宿主機(jī)與虛擬機(jī)之間支持非中斷模式的通信,通信流程如圖5所示.

      圖5 基于ivshemm的宿主機(jī)與虛擬機(jī)通信示意圖

      在重新設(shè)計基于ivshmem 內(nèi)存共享設(shè)備的前端驅(qū)動時,為避免不必要的系統(tǒng)調(diào)用與數(shù)據(jù)拷貝,本文使用UIO 機(jī)制的用戶態(tài)驅(qū)動替代常規(guī)的內(nèi)核態(tài)驅(qū)動,可以在用戶空間直接操作ivshmem 共享內(nèi)存,優(yōu)化了從虛擬機(jī)到宿主機(jī)之間的通信效率.

      3.3 服務(wù)程序的設(shè)計

      為了使用ivshmem 設(shè)備基于eventfd的中斷機(jī)制,需要設(shè)計一個服務(wù)程序,運(yùn)行在宿主機(jī),稱之為ivshmemserver.該服務(wù)程序可以調(diào)用密碼卡,啟動一個ID 固定為0的虛擬機(jī)(稱之為偽虛擬機(jī)),創(chuàng)建共享內(nèi)存,等待qemu的連接請求,每啟動一個虛擬機(jī),ivshmem-server 會自動分配給虛擬機(jī)eventfd 文件描述符與ID 號,并且把這兩個信息通知給其它虛擬機(jī),每退出一個虛擬機(jī),ivshmem-server 也會通知退出虛擬機(jī)的ID.每個虛擬機(jī)的ID 都是獨(dú)一無二的,在收發(fā)數(shù)據(jù)時用來標(biāo)識虛擬機(jī),虛擬機(jī)之間通過eventfd 機(jī)制通知中斷.每個虛擬機(jī)都在與本身ID 所綁定的eventfd 文件描述符上偵聽,并且使用其它虛擬機(jī)的eventfd 向其它guest 發(fā)送中斷,服務(wù)程序的處理流程如圖6所示.

      圖6 ivshmem-server 服務(wù)程序的處理流程圖

      在已檢索的文獻(xiàn)中,文獻(xiàn)[15]提出了一種比較通用的ivshmem-server 服務(wù)程序設(shè)計方法,一個偽虛擬機(jī)對應(yīng)一個虛擬機(jī),同時啟動一個守護(hù)線程響應(yīng)調(diào)用請求.與該方法相比,本文改進(jìn)的服務(wù)程序可以實(shí)現(xiàn)一個偽虛擬機(jī)對應(yīng)多個虛擬機(jī),后臺只需啟動一個守護(hù)線程就可以響應(yīng)不同虛擬機(jī)的調(diào)用請求,不僅可以降低對系統(tǒng)資源的消耗,還可以在守護(hù)線程中流水式的處理調(diào)用請求,減少多線程響應(yīng)請求帶來的時間開銷.

      4 基于vhost-vsock的密碼卡軟件虛擬化

      4.1 總體設(shè)計

      基于vhost-vsock的密碼卡軟件虛擬化總體設(shè)計如圖7所示,虛擬機(jī)中的應(yīng)用程序通過接口庫調(diào)用virtio 相關(guān)接口,數(shù)據(jù)經(jīng)由vhost-vsock 傳輸直接送達(dá)宿主機(jī)的內(nèi)核,密碼卡設(shè)備驅(qū)動從vhost-vsock 模塊獲取數(shù)據(jù)后交給密碼卡進(jìn)行密碼運(yùn)算處理,數(shù)據(jù)處理完成之后原路返回給虛擬機(jī),完成一次通信.

      圖7 基于vhost-vsock的密碼卡軟件虛擬化總設(shè)計圖

      其中,調(diào)用接口庫需要稍微做一下修改,密碼卡設(shè)備驅(qū)動需要重新設(shè)計,能夠從vhost-vsock 獲取數(shù)據(jù),并可以處理多虛擬機(jī)的并發(fā)調(diào)用.

      4.2 vhost-vsock

      virtio[17]是一種 I/O 半虛擬化優(yōu)化解決方案,提供了一整套虛擬化設(shè)備與上層應(yīng)用的通用虛擬化框架,不僅提高了I/O 虛擬化的性能,還提高了開發(fā)效率與跨平臺的兼容性,KVM中半虛擬化驅(qū)動實(shí)現(xiàn)的方式就是采用了針對 Linux的I/O 虛擬化框架virtio.

      在qemu中virtio 設(shè)備具體表現(xiàn)為一個模擬的PCIe設(shè)備,通過安裝 virtio的前端驅(qū)動,可以實(shí)現(xiàn)virtio 設(shè)備與后端(KVM/QEMU)的交互,采用virtio的網(wǎng)絡(luò)半虛擬化稱為virtio-net[18],優(yōu)化版的網(wǎng)絡(luò)半虛擬化稱為vhost-net[18],使用vhost 技術(shù),在內(nèi)核中加入了vhostnet.ko 模塊,使得網(wǎng)絡(luò)數(shù)據(jù)可以在內(nèi)核態(tài)得到處理,減少了用戶態(tài)/內(nèi)核態(tài)切換時間和包的拷貝次數(shù),進(jìn)一步提升了性能,如圖8virtio-net 與vhost-net 框圖所示.

      圖8 virtio-net 與vhost-net

      基于vhost-net的vhost-vsock[19],為虛擬機(jī)的網(wǎng)絡(luò)協(xié)議棧提供了新的后端,使用一對32 位的整數(shù)CID:PORT 來標(biāo)識進(jìn)程,類似TCP/IP 通信中的IP:PORT,可以直接與宿主機(jī)內(nèi)核中的vhost_vsock 模塊通信,宿主機(jī)固定使用2 作為CID,每個虛擬機(jī)在啟動時會被自動分配一個CID.vhost-vsock 定義了一套新的套接字地址族,支持socket API,沒有使用TCP/IP 協(xié)議,甚至不需要網(wǎng)絡(luò)接口,可以零配置實(shí)現(xiàn)虛擬機(jī)與宿主機(jī)間的高性能通信,如圖9vhost-vsock 通信示意圖所示.

      圖9 vhost-vsock 通信示意圖

      4.3 密碼卡驅(qū)動的設(shè)計

      原有的密碼卡設(shè)備驅(qū)動位于操作系統(tǒng)底層,負(fù)責(zé)密碼卡的初始化,透明傳輸密碼卡與系統(tǒng)之間的數(shù)據(jù),不解析、不截獲數(shù)據(jù).基于vhost-vsock的密碼卡驅(qū)動,不僅需要具備原有驅(qū)動的功能,還得具備vhost-vsock服務(wù)器端的功能,能夠響應(yīng)多虛擬機(jī)的并發(fā)請求,從vhost-vsock 獲取數(shù)據(jù).

      驅(qū)動程序的處理流程如圖10所示,重新設(shè)計后的驅(qū)動在初始化設(shè)備后,啟動了兩個處理線程,vhost-vsock服務(wù)線程用來響應(yīng)虛擬機(jī)的調(diào)用請求,工作任務(wù)處理線程用來處理工作鏈表中的任務(wù),當(dāng)虛擬機(jī)調(diào)用請求到達(dá),vhost-vsock 服務(wù)線程會為該請求啟動一個對應(yīng)的服務(wù)線程,把到達(dá)的任務(wù)加入任務(wù)鏈表,等待工作任務(wù)處理線程的處理.

      圖10 密碼卡設(shè)備驅(qū)動處理流程圖

      重新設(shè)計后的驅(qū)動可以預(yù)先接收待處理的數(shù)據(jù)到宿主機(jī)的內(nèi)核空間,把虛擬機(jī)的請求任務(wù)加入工作鏈表異步處理,減少了多虛擬機(jī)并發(fā)調(diào)用密碼卡的等待時間,提高了本方案軟件虛擬化的性能.

      5 實(shí)驗(yàn)與分析

      本次實(shí)驗(yàn)采用X86 與ARM 雙平臺,方案一(基于共享內(nèi)存的密碼卡軟件虛擬化)適用于x86 平臺,方案二(基于vhost-vsock的密碼卡軟件虛擬化) 適用于ARM 平臺,密碼卡采用三未信安股份有限公司生產(chǎn)的SJK1828(#2)系列密碼卡,可以處理0~16 KB 大小的數(shù)據(jù)包,測試性能時選擇SM1、SM2 與SM4 三種常用的國密算法,分別覆蓋對稱算法與非對稱算法,平臺硬件與軟件具體配置如表1所示.

      表1 實(shí)驗(yàn)配置

      5.1 實(shí)驗(yàn)一.性能測試

      本實(shí)驗(yàn)測試兩種方案在X86 平臺的性能表現(xiàn),測試數(shù)據(jù)在不經(jīng)過密碼卡處理的情況下從虛擬機(jī)應(yīng)用層到宿主機(jī)內(nèi)核層再到虛擬機(jī)內(nèi)核層(vm->vhost->vm)的系統(tǒng)吞吐量,數(shù)據(jù)包大小從1–16 KB,實(shí)驗(yàn)結(jié)果如圖11所示.

      由圖11可知:使用共享內(nèi)存的方式進(jìn)行數(shù)據(jù)傳輸,通信速度與數(shù)據(jù)包長度基本成線性正比關(guān)系,斜率變化不大,也即vm->vhost->vm 每秒通信次數(shù)變化不大,數(shù)據(jù)包長度越大意味著通信速度越高;而采用vhostvsock的方式進(jìn)行數(shù)據(jù)傳輸,斜率逐漸變小,也即隨著數(shù)據(jù)包長度變大,vm->vhost->vm 每秒通信次數(shù)變化逐漸變小;同時,相同數(shù)據(jù)包長度,使用共享內(nèi)存的方式的通信速度始終大于采用vhost-vsock的方式,在包長為4 KB 時,共享內(nèi)存通信速率可以達(dá)到2000 Mb/s 左右,vhost-vsock 可以達(dá)到1 600 Mb/s 左右,在包長為8 KB時,共享內(nèi)存通信速率可以達(dá)到4 000 Mb/s 左右,vhost-vsock 可以達(dá)到3 000 Mb/s 左右.

      圖11 密碼卡設(shè)備驅(qū)動處理流程圖

      本次實(shí)驗(yàn)證明,在傳輸數(shù)據(jù)方面共享內(nèi)存的方式優(yōu)勢非常明顯.由于在ARM 平臺使用ivshmem 模擬設(shè)備,會因共享內(nèi)存頁面屬性不一致進(jìn)而產(chǎn)生硬件不維護(hù)cache 一致性問題,導(dǎo)致虛擬機(jī)崩潰,因此只能退而求其次在ARM 使用vhost-vsock 通信方式.

      5.2 實(shí)驗(yàn)二.x86 平臺下算法性能

      本實(shí)驗(yàn)測試方案一在X86 平臺調(diào)用密碼卡的性能表現(xiàn),測試的算法分別包括SM1、SM4 與SM2,測試的數(shù)據(jù)包長度為4 KB,測試過程中逐漸增加虛擬機(jī)的數(shù)量,并在開啟不同的虛擬機(jī)數(shù)量時,測試方案2的算法性能做對比,圖中標(biāo)注了密碼卡在宿主機(jī)下的性能作為參考,具體測試結(jié)果如圖12所示.

      由圖12可知,對于方案一,只有一臺虛擬機(jī)調(diào)用密碼卡時,方案二的SM1 與SM2 驗(yàn)簽算法性能可以達(dá)到密碼卡在宿主機(jī)性能下的95%以上,隨著虛擬機(jī)并發(fā)調(diào)用密碼卡的數(shù)量增加,單臺虛擬機(jī)的算法性能逐漸下降,多臺虛擬機(jī)的整體算法性能超過宿主機(jī)算法性能,并緩慢增加最后逐漸保持穩(wěn)定;對于方案二,只有一臺虛擬機(jī)調(diào)用密碼卡時,方案二的SM1 算法性能可以達(dá)到密碼卡在宿主機(jī)性能下的60% 以上,SM4 算法性能可以達(dá)到密碼卡在宿主機(jī)性能下的40%以上,SM2 驗(yàn)簽算法性能可以達(dá)到密碼卡在宿主機(jī)性能下的90%以上,隨著虛擬機(jī)并發(fā)調(diào)用密碼卡的數(shù)量增加,單臺虛擬機(jī)的算法性能逐漸下降,多臺虛擬機(jī)的整體算法性能超過宿主機(jī)算法性能,并緩慢增加最后逐漸保持穩(wěn)定;對比兩種方案,無論是在單臺虛擬機(jī)還是多臺虛擬機(jī)的情況下,方案一的算法性能表現(xiàn)要優(yōu)于方案二,因此在x86 平臺采用方案一是最優(yōu)選擇.

      圖12 x86 平臺下SM1、SM4 與SM2 算法性能測試圖

      5.3 實(shí)驗(yàn)三.ARM 平臺下算法性能

      本實(shí)驗(yàn)測試方案二在ARM 平臺調(diào)用密碼卡的性能表現(xiàn),測試的算法分別包括SM1、SM4 與SM2,測試的數(shù)據(jù)包長度為4 KB,測試過程中逐漸增加虛擬機(jī)的數(shù)量,并同密碼卡在宿主機(jī)下的性能表現(xiàn)做對比,圖中標(biāo)注了密碼卡在宿主機(jī)下的性能作為參考,具體測試結(jié)果如圖13所示.

      由圖13可知,只有一臺虛擬機(jī)調(diào)用密碼卡做密碼運(yùn)算時,方案二的算法性能可以達(dá)到密碼卡在宿主機(jī)性能下的92%以上,隨著虛擬機(jī)并發(fā)調(diào)用密碼卡的數(shù)量增加,單臺虛擬機(jī)的算法性能逐漸下降,多臺虛擬機(jī)的整體算法性能超過宿主機(jī)算法性能,并緩慢增加最后逐漸保持穩(wěn)定.

      圖13 ARM 平臺下SM1、SM4 與SM2 算法性能測試圖

      6 結(jié)語

      本文設(shè)計實(shí)現(xiàn)了基于I/O 前后端模型的密碼卡軟件虛擬化方式,利用共享內(nèi)存或者virtio 作為通信方式,通過重新設(shè)計密碼卡前后端驅(qū)動或者服務(wù)程序,完成多虛擬機(jī)與宿主機(jī)的高效通信,實(shí)現(xiàn)常規(guī)密碼卡被多虛擬機(jī)共享,提出的方法降低了云密碼機(jī)的硬件門檻,以軟件的方式有效地解決了使用SR-IOV 密碼卡過程中存在的兼容性不好、擴(kuò)充性受限、遷移性差以及性價比低等問題,為密碼卡的軟件虛擬化研究提供了很好地借鑒思路.

      實(shí)驗(yàn)結(jié)果證明,兩種方案在各自平臺的性能表現(xiàn)方面很好,甚至在多虛擬機(jī)并發(fā)調(diào)用密碼卡時可以獲得超過宿主機(jī)下調(diào)用密碼卡的性能,完全能夠滿足實(shí)際應(yīng)用的需求.本文提出的技術(shù)不局限于云密碼機(jī)產(chǎn)品的開發(fā),對于使用SR-IOV 密碼卡的服務(wù)器或者云主機(jī)同樣適用,具有很好的使用前景,目前方案二已應(yīng)用于信創(chuàng)項(xiàng)目的云密碼機(jī)產(chǎn)品.

      當(dāng)然,本文提出的方法還有進(jìn)一步改進(jìn)的空間,根據(jù)兩種不同方案在不同數(shù)據(jù)包長下宿主機(jī)與虛擬機(jī)通信性能的表現(xiàn),通過負(fù)載均衡組包來提升本文方案的算法性能是值得研究的方向.同時,與密碼卡的SRIOV 硬件虛擬化相比,本文提出的技術(shù)存在一些不足之處,軟件虛擬化不能從硬件層次屏蔽各虛擬機(jī)對卡內(nèi)密鑰的訪問,只能在軟件層次設(shè)置密鑰的訪問權(quán)限.

      猜你喜歡
      共享內(nèi)存宿主機(jī)調(diào)用
      核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
      通過QT實(shí)現(xiàn)進(jìn)程間的通信
      LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
      虛擬網(wǎng)絡(luò)實(shí)驗(yàn)室在農(nóng)村職校計算機(jī)網(wǎng)絡(luò)技術(shù)教學(xué)中的應(yīng)用研究
      嵌入式計算機(jī)軟件測試關(guān)鍵技術(shù)的思考
      基于PCI總線的多處理器協(xié)同機(jī)制研究
      基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
      嵌入式計算機(jī)軟件測試關(guān)鍵技術(shù)研究
      QNX下PEX8311多路實(shí)時數(shù)據(jù)采集的驅(qū)動設(shè)計
      電子世界(2014年21期)2014-04-29 06:41:36
      一種高效RTAI 共享內(nèi)存管理層的研究與實(shí)現(xiàn)*
      孟连| 辽宁省| 察隅县| 建平县| 福建省| 法库县| 信宜市| 深水埗区| 喀什市| 黑龙江省| 新建县| 江西省| 肇东市| 吐鲁番市| 兴海县| 安顺市| 合作市| 阿勒泰市| 枣强县| 无极县| 台山市| 无锡市| 昭通市| 当阳市| 宜昌市| 交城县| 林周县| 清丰县| 龙胜| 溧水县| 郓城县| 山丹县| 云梦县| 美姑县| 清水河县| 泗水县| 辉南县| 浦江县| 六枝特区| 杭锦后旗| 和平县|