91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

StratoVirt 中的 balloon 設備介紹

openEuler ? 來源:openEuler ? 作者:openEuler ? 2021-12-21 14:56 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

StratoVirt 是計算產(chǎn)業(yè)中面向云數(shù)據(jù)中心的企業(yè)級虛擬化 VMM,實現(xiàn)了一套架構(gòu)統(tǒng)一支持虛擬機、容器、Serverless 三種場景。StratoVirt 在輕量低噪、軟硬協(xié)同、Rust 語言級安全等方面具備關(guān)鍵技術(shù)競爭優(yōu)勢。

背景介紹:

通常,在同一臺服務器上存在著不同的用戶,而多數(shù)用戶對內(nèi)存的使用情況是一種間斷性的使用。也就是說用戶對內(nèi)存的使用率并不是很高。在服務器這種多用戶的場景中,如果很多個用戶對于內(nèi)存的使用率都不高的話,那么會存在服務器實際占用的內(nèi)存并不飽滿這樣一種情況。實際上各個用戶使用內(nèi)存的分布圖可能如下圖所示(黃色部分表示 used 部分,綠色部分表示 free 的部分)。

解決方案:

為了解決上述服務器上內(nèi)存使用率低的問題,可以將虛擬機中暫時不用的內(nèi)存回收回來給其他虛擬機使用。而當被回收內(nèi)存的虛擬機需要內(nèi)存時,由 host 再將內(nèi)存歸還回去。有了這樣的內(nèi)存伸縮能力,服務器便可以有效提高內(nèi)存的使用率。在 StratoVirt 中,我們使用 balloon 設備來對虛擬機中的空閑內(nèi)存進行回收和釋放。下面詳細了解一下 StratoVirt 中的 balloon 設備。

balloon 設備簡介:

由于 StratoVirt 只是負責為虛擬機分配內(nèi)存,只能感知到每個虛擬機總的內(nèi)存大小。但是在每個虛擬機中如何使用內(nèi)存,內(nèi)存剩余多少。StratoVirt 是無法感知的,也就無法得知該從虛擬機中回收多少內(nèi)存了。為此,需要在虛擬機中放置一個“氣球(balloon)”設備。該設備通過 virtio 半虛擬化框架來實現(xiàn)前后端通信。當 Host 端需要回收虛擬機內(nèi)部的空閑內(nèi)存時,balloon 設備“充氣”膨脹,占用虛擬機內(nèi)部內(nèi)存。而將占用的內(nèi)存交給 Host 使用。如果虛擬機的空閑內(nèi)存被回收后,虛擬機內(nèi)部由于業(yè)務要求突然需要內(nèi)存時。位于虛擬機內(nèi)部的 balloon 設備可以選擇“放氣”縮小。釋放出更多的內(nèi)存空間給虛擬機使用。

balloon 實現(xiàn):

balloon 的具體代碼實現(xiàn)位于 StratoVirt 項目的/virtio/src/balloon.rs 文件中,相關(guān)細節(jié)可閱讀代碼理解。代碼架構(gòu)如下:

virtio
├──Cargo.toml
└──src
├──balloon.rs
├──block.rs
├──console.rs
├──lib.rs
├──net.rs
├──queue.rs
├──rng.rs
├──vhost
│├──kernel
││├──mod.rs
││├──net.rs
││└──vsock.rs
│└──mod.rs
├──virtio_mmio.rs
└──virtio_pci.rs

由于 balloon 是一個 virtio 設備,所以在前后端通信時也使用了 virtio 框架提供的 virtio queue。當前 StratoVirt 支持兩個隊列:inflate virtio queue(ivq)和 deflate virtio queue(dvq)。這兩個隊列分別負責 balloon 設備的“充氣”和“放氣”。

氣球的充放氣時,前后端的信息是通過一個結(jié)構(gòu)體來傳遞。

structVirtioBalloonConfig{
///NumberofpageshostwantsGuesttogiveup.
pubnum_pages:u32,
///Numberofpageswe'veactuallygotinballoon.
pubactual:u32,
}

因此后端向前端要內(nèi)存的時候,只需要修改這個結(jié)構(gòu)體中的 num_pages 的數(shù)值,然后通知前端。前端讀取配置結(jié)構(gòu)體中的 num_pages 成員。并與本身結(jié)構(gòu)體中的 actual 對比,判斷是進行 inflate 還是 deflate。

inflate

如果是 inflate,那么虛擬機以 4k 頁為單位去申請?zhí)摂M機內(nèi)存,并將申請到的內(nèi)存地址保存在隊列中。然后通過 ivq 將保存了分配好的頁面地址的數(shù)組分批發(fā)往后端處理(virtio queue 隊列長度最大 256,也就是一次最多只能傳輸 1M 內(nèi)存信息,對于大于 1M 的內(nèi)存只能分批傳輸)。后端通過得到信息后,找到相應的 MemoryRegion,將對應的 page 標記為”WILLNEED“。然后通知前端,完成配置。

deflate

如果是 deflate 則從保存申請到的內(nèi)存地址隊列中彈出一部分內(nèi)存的地址。通過 dvq 分批次傳輸給后端處理。后端將 page 標記為“DONTNEED"。

下面結(jié)合代碼進行說明:

定義 BalloonIoHandler 結(jié)構(gòu)體作為處理 balloon 事件的主體。

structBalloonIoHandler{
///Thefeaturesofdriver.
driver_features:u64,
///Addressspace.
mem_space:Arc,
///Inflatequeue.
inf_queue:Arc>,
///InflateEventFd.
inf_evt:EventFd,
///Deflatequeue.
def_queue:Arc>,
///DeflateEventFd.
def_evt:EventFd,
/*省略*/
}

其中包含上述的兩個 virtio 隊列inf_queue和def_queue,以及對應的觸發(fā)事件描述符(EventFd)inf_evt和def_evt。兩個隊列均使用了Mutex鎖,保證了隊列在同一時刻只有一個使用者對該隊列進行操作。保證了多線程共享的數(shù)據(jù)安全。

fnprocess_balloon_queue(&mutself,req_type:bool)->Result<()>{
letqueue=ifreq_type{
&mutself.inf_queue
}else{
&mutself.def_queue
};//獲得對應的隊列
letmutunlocked_queue=queue.lock().unwrap();
whileletOk(elem)=unlocked_queue
.vring
.pop_avail(&self.mem_space,self.driver_features)
{
matchRequest::parse(&elem){
Ok(req)=>{
if!self.mem_info.has_huge_page(){
//進行內(nèi)存標記
req.mark_balloon_page(req_type,&self.mem_space,&self.mem_info);
}
/*省略*/
}
Err(e)=>{
/*省略錯誤處理*/
}
}
}
/*省略*/
}

當相應的EventFd被觸發(fā)后process_balloon_queue函數(shù)將會被調(diào)用。通過判斷請求類型確定是“充氣”還是”放氣“,然后再從相應的隊列中取數(shù)據(jù)進行內(nèi)存標記。其中while let是 Rust 語言提供的一種循環(huán)模式匹配機制。借助該語法可以將隊列中 pop 出來的所有數(shù)據(jù)遍歷取出到elem中。

內(nèi)存標記及優(yōu)化:

標記內(nèi)存在mark_balloon_page函數(shù)中進行實現(xiàn),起初的實現(xiàn)思路為:將虛擬機傳送過來的地址逐個進行標記。即,從隊列中取出一個元素,轉(zhuǎn)化為地址后立即進行標記。后來經(jīng)過測試發(fā)現(xiàn):balloon 設備在對頁地址進行一頁一頁標記內(nèi)存時花費時間巨大。而同時也發(fā)現(xiàn)通過虛擬機傳回來的地址中有大段的連續(xù)內(nèi)存段。于是通過改變標記方法:由原來的一頁一頁標記改為將這些連續(xù)的內(nèi)存統(tǒng)一標記。大大節(jié)省了標記時間。下面代碼為具體實現(xiàn):

fnmark_balloon_page(
&self,
req_type:bool,
address_space:&Arc,
mem:&BlnMemInfo,
){
letadvice=ifreq_type{
libc::MADV_DONTNEED
}else{
libc::MADV_WILLNEED
};
/*略*/
foriovinself.iovec.iter(){
letmutoffset=0;
letmuthvaset=Vec::new();
whileletSome(pfn)=iov_to_buf::(address_space,iov,offset){
offset+=std::()asu64;
letgpa:GuestAddress=GuestAddress((pfnasu64)<addr,
None=>{
/*略*/
}
};
//將hva地址保存在hvaset的vec中
hvaset.push(hva);
}
//對hvaset進行從小到大排序。
hvaset.sort_by_key(|&b|Reverse(b));
/*略*/
//將hvaset中連續(xù)的內(nèi)存段進行標記
whileletSome(hva)=hvaset.pop(){
iflast_addr==0{
free_len+=1;
start_addr=hva;
}elseifhva==last_addr+BALLOON_PAGE_SIZE{
free_len+=1;
}else{
memory_advise(
start_addras*constlibc::c_voidas*mut_,
(free_len*BALLOON_PAGE_SIZE)asusize,
advice,
);
free_len=1;
start_addr=hva;
}

ifcount_iov==iov.iov_len{
memory_advise(
start_addras*constlibc::c_voidas*mut_,
(free_len*BALLOON_PAGE_SIZE)asusize,
advice,
);
}
count_iov+=std::()asu64;
last_addr=hva;
}
/*略*/
}
}
}

首先將 virtio 隊列中的地址全部取出,并保存在 vec 中,然后將該 vec 進行從小到大的排序。有利于快速找出連續(xù)的內(nèi)存段并進行標記。由于 hvaset 中的地址是按照從小到大排列的,因此可以從頭開始遍歷 hvaset,遇到不連續(xù)的地址后將前面的連續(xù)段進行標記。這樣就完成了由原來逐頁標記到連續(xù)內(nèi)存段統(tǒng)一標記的優(yōu)化。

經(jīng)過測試,StratoVirt 的 balloon 速度也有了極大的提高。

原文標題:StratoVirt 基于 Rust 的 balloon 功能實踐

文章出處:【微信公眾號:openEuler】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

審核編輯:彭菁

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 服務器
    +關(guān)注

    關(guān)注

    14

    文章

    10261

    瀏覽量

    91526
  • 虛擬機
    +關(guān)注

    關(guān)注

    1

    文章

    972

    瀏覽量

    30492
  • 數(shù)據(jù)安全
    +關(guān)注

    關(guān)注

    2

    文章

    769

    瀏覽量

    30855

原文標題:StratoVirt 基于 Rust 的 balloon 功能實踐

文章出處:【微信號:openEulercommunity,微信公眾號:openEuler】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    initrd 沒有帶有自編譯內(nèi)核的 nvme 設備

    你好!我使用 nvme 的 -starfive 內(nèi)核在 visionfive2 上運行 debian。當我根據(jù)內(nèi)核升級我總是在缺少 root 設備的情況下進入 initrd。 因此,從本質(zhì)上講
    發(fā)表于 02-10 06:40

    半導體制造晶圓清洗設備介紹

    在半導體制造過程,晶圓清洗是一道至關(guān)重要的工序。晶圓經(jīng)切割后,表面常附著大量由聚合物、光致抗蝕劑及蝕刻雜質(zhì)等組成的顆粒物,這些物質(zhì)會對后續(xù)工序芯片的幾何特征與電性能產(chǎn)生不良影響。隨著半導體
    的頭像 發(fā)表于 01-27 11:02 ?555次閱讀
    半導體制造<b class='flag-5'>中</b>晶圓清洗<b class='flag-5'>設備</b><b class='flag-5'>介紹</b>

    太誘產(chǎn)品在通用電子設備的使用指南及技術(shù)剖析

    ,我們需要全面了解相關(guān)的注意事項、產(chǎn)品規(guī)格以及性能特點等內(nèi)容,以確保設計出的設備能夠穩(wěn)定、高效地運行。本文將基于太誘產(chǎn)品的相關(guān)文檔,為大家詳細介紹其在通用電子設備的使用要點。 文件下
    的頭像 發(fā)表于 01-18 16:55 ?1118次閱讀

    如何在Linux列出USB設備

    Linux操作系統(tǒng)提供了許多命令來列出系統(tǒng)連接的USB設備,這些命令非常有用,無論是查看已連接設備的信息,還是進行系統(tǒng)調(diào)試。 在本文中,我們將介紹一些常用的命令以及它們的使用方法,
    發(fā)表于 12-24 08:19

    SP系列連接器在呼吸機與麻醉設備的應用

    思特安SP系列連接器在醫(yī)療設備方面具體應用廣泛,其設計特性與醫(yī)療場景需求高度契合,今天讓我們來進一步介紹思特安SP系列連接器在呼吸機與麻醉劑相關(guān)醫(yī)療設備的應用,具體應用分析如文件
    發(fā)表于 08-07 17:46 ?0次下載

    SNMP協(xié)議在設備監(jiān)控的使用

    介紹,并提供使用SNMP進行網(wǎng)絡管理的基本指南。 1.簡介 SNMP(Simple Network Management Protocol)是一個基于互聯(lián)網(wǎng)協(xié)議族(IP)的網(wǎng)絡管理標準,用于在IP網(wǎng)絡的管理節(jié)點與被管理節(jié)點之間進行通信,以實現(xiàn)對網(wǎng)絡
    的頭像 發(fā)表于 06-27 11:48 ?675次閱讀
    SNMP協(xié)議在<b class='flag-5'>設備</b>監(jiān)控<b class='flag-5'>中</b>的使用

    CAN轉(zhuǎn)PROFINET網(wǎng)關(guān)設備基本功能介紹

    設備簡介 本研究介紹設備為一款集成了Profinet (PN) 和Controller Area Network (CAN) 通信協(xié)議的網(wǎng)關(guān),其工作原理基于數(shù)據(jù)映射技術(shù)。在Profinet網(wǎng)絡架構(gòu)
    的頭像 發(fā)表于 06-08 10:36 ?762次閱讀
    CAN轉(zhuǎn)PROFINET網(wǎng)關(guān)<b class='flag-5'>設備</b>基本功能<b class='flag-5'>介紹</b>

    智能設備Leadway電源模塊的應用案例

    智能設備Leadway電源模塊的應用案例Leadway電源模塊在智能設備憑借其高穩(wěn)定性、高性價比和小型化設計,被廣泛應用于工業(yè)控制、通信設備
    發(fā)表于 05-22 09:18

    振動馬達在VR設備的應用優(yōu)點分析

    振動馬達作為一種重要的觸覺反饋技術(shù),在虛擬現(xiàn)實(VR)設備的應用越來越廣泛。它通過模擬觸覺反饋,增強用戶在虛擬環(huán)境的沉浸感。振動馬達的應用不僅僅是為了提高設備的互動性,更是提升了V
    的頭像 發(fā)表于 05-17 00:07 ?778次閱讀

    高校智慧教室多媒體教學設備介紹

    在當今的教育環(huán)境,隨著信息技術(shù)的快速發(fā)展和應用,智慧教室已成為高校教育改革的重要標志。廣凌科技(廣凌股份)深知在智慧教室建設方案,多媒體教學設備的重要性,這不僅關(guān)系到教學質(zhì)量的提升,也直接影響
    的頭像 發(fā)表于 05-06 09:20 ?1620次閱讀
    高校智慧教室多媒體教學<b class='flag-5'>設備</b><b class='flag-5'>介紹</b>

    SMA連接器在醫(yī)療設備的應用

    SMA連接器在醫(yī)療設備的應用
    的頭像 發(fā)表于 04-26 09:24 ?683次閱讀
    SMA連接器在醫(yī)療<b class='flag-5'>設備</b><b class='flag-5'>中</b>的應用

    YAGEO與Pulse產(chǎn)品在物聯(lián)網(wǎng)設備的應用

    隨著物聯(lián)網(wǎng)(IoT)技術(shù)的快速發(fā)展,設備之間的高效、可靠連接成為關(guān)鍵課題。在物聯(lián)網(wǎng)系統(tǒng),集成連接器模塊、功率器件與保護器件的協(xié)同應用,不僅能確保數(shù)據(jù)與電力傳輸?shù)姆€(wěn)定性,還能提升系統(tǒng)的安全性與耐用性
    的頭像 發(fā)表于 04-25 15:00 ?1152次閱讀

    芯片制造的應變硅技術(shù)介紹

    本文介紹了在芯片制造的應變硅技術(shù)的原理、材料選擇和核心方法。
    的頭像 發(fā)表于 04-15 15:21 ?3184次閱讀
    芯片制造<b class='flag-5'>中</b>的應變硅技術(shù)<b class='flag-5'>介紹</b>

    不同設備電源濾波器接線方式的差異

    本文闡述了電源濾波器在不同設備的重要性,并針對家用電器、工業(yè)設備、醫(yī)療設備以及通信設備分別介紹
    的頭像 發(fā)表于 03-28 17:16 ?953次閱讀
    不同<b class='flag-5'>設備</b><b class='flag-5'>中</b>電源濾波器接線方式的差異

    集成電路制造的電鍍工藝介紹

    本文介紹了集成電路制造工藝的電鍍工藝的概念、應用和工藝流程。
    的頭像 發(fā)表于 03-13 14:48 ?2780次閱讀
    集成電路制造<b class='flag-5'>中</b>的電鍍工藝<b class='flag-5'>介紹</b>