欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

StratoVirt 中的 balloon 設(shè)備介紹

openEuler ? 來(lái)源:openEuler ? 作者:openEuler ? 2021-12-21 14:56 ? 次閱讀

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

背景介紹:

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

解決方案:

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

balloon 設(shè)備簡(jiǎn)介:

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

balloon 實(shí)現(xiàn):

balloon 的具體代碼實(shí)現(xiàn)位于 StratoVirt 項(xiàng)目的/virtio/src/balloon.rs 文件中,相關(guān)細(xì)節(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 是一個(gè) virtio 設(shè)備,所以在前后端通信時(shí)也使用了 virtio 框架提供的 virtio queue。當(dāng)前 StratoVirt 支持兩個(gè)隊(duì)列:inflate virtio queue(ivq)和 deflate virtio queue(dvq)。這兩個(gè)隊(duì)列分別負(fù)責(zé) balloon 設(shè)備的“充氣”和“放氣”。

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

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

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

inflate

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

deflate

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

下面結(jié)合代碼進(jìn)行說(shuō)明:

定義 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,
/*省略*/
}

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

fnprocess_balloon_queue(&mutself,req_type:bool)->Result<()>{
letqueue=ifreq_type{
&mutself.inf_queue
}else{
&mutself.def_queue
};//獲得對(duì)應(yīng)的隊(duì)列
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(){
//進(jìn)行內(nèi)存標(biāo)記
req.mark_balloon_page(req_type,&self.mem_space,&self.mem_info);
}
/*省略*/
}
Err(e)=>{
/*省略錯(cuò)誤處理*/
}
}
}
/*省略*/
}

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

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

標(biāo)記內(nèi)存在mark_balloon_page函數(shù)中進(jìn)行實(shí)現(xiàn),起初的實(shí)現(xiàn)思路為:將虛擬機(jī)傳送過(guò)來(lái)的地址逐個(gè)進(jìn)行標(biāo)記。即,從隊(duì)列中取出一個(gè)元素,轉(zhuǎn)化為地址后立即進(jìn)行標(biāo)記。后來(lái)經(jīng)過(guò)測(cè)試發(fā)現(xiàn):balloon 設(shè)備在對(duì)頁(yè)地址進(jìn)行一頁(yè)一頁(yè)標(biāo)記內(nèi)存時(shí)花費(fèi)時(shí)間巨大。而同時(shí)也發(fā)現(xiàn)通過(guò)虛擬機(jī)傳回來(lái)的地址中有大段的連續(xù)內(nèi)存段。于是通過(guò)改變標(biāo)記方法:由原來(lái)的一頁(yè)一頁(yè)標(biāo)記改為將這些連續(xù)的內(nèi)存統(tǒng)一標(biāo)記。大大節(jié)省了標(biāo)記時(shí)間。下面代碼為具體實(shí)現(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);
}
//對(duì)hvaset進(jìn)行從小到大排序。
hvaset.sort_by_key(|&b|Reverse(b));
/*略*/
//將hvaset中連續(xù)的內(nèi)存段進(jìn)行標(biāo)記
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 隊(duì)列中的地址全部取出,并保存在 vec 中,然后將該 vec 進(jìn)行從小到大的排序。有利于快速找出連續(xù)的內(nèi)存段并進(jìn)行標(biāo)記。由于 hvaset 中的地址是按照從小到大排列的,因此可以從頭開(kāi)始遍歷 hvaset,遇到不連續(xù)的地址后將前面的連續(xù)段進(jìn)行標(biāo)記。這樣就完成了由原來(lái)逐頁(yè)標(biāo)記到連續(xù)內(nèi)存段統(tǒng)一標(biāo)記的優(yōu)化。

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

原文標(biāo)題:StratoVirt 基于 Rust 的 balloon 功能實(shí)踐

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

審核編輯:彭菁

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

    關(guān)注

    12

    文章

    9338

    瀏覽量

    86158
  • 虛擬機(jī)
    +關(guān)注

    關(guān)注

    1

    文章

    949

    瀏覽量

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

    關(guān)注

    2

    文章

    686

    瀏覽量

    30028

原文標(biāo)題:StratoVirt 基于 Rust 的 balloon 功能實(shí)踐

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    電源設(shè)備噪聲濾波器的作用介紹

    在電源設(shè)備這片關(guān)鍵領(lǐng)域中,噪聲濾波器扮演著不可或缺的守護(hù)者角色,肩負(fù)著保障電源純凈、穩(wěn)定運(yùn)行以及與之相連電子設(shè)備正常工作的重任,其作用體現(xiàn)在多個(gè)關(guān)鍵層面。 電源設(shè)備的輸入源往往并非理想的純凈電源
    的頭像 發(fā)表于 02-04 11:48 ?77次閱讀

    芯科科技Z-Wave設(shè)備測(cè)試工具介紹

    本篇技術(shù)博文將介紹SiliconLabs(芯科科技)提供的Z-Wave設(shè)備測(cè)試工具,通過(guò)使用一個(gè)舊的Z-Wave DUT項(xiàng)目來(lái)測(cè)試Z-Wave設(shè)備,以確保設(shè)備可以正常工作。
    的頭像 發(fā)表于 01-17 09:39 ?134次閱讀
    芯科科技Z-Wave<b class='flag-5'>設(shè)備</b>測(cè)試工具<b class='flag-5'>介紹</b>

    電源管理技術(shù)在移動(dòng)設(shè)備的應(yīng)用

    隨著移動(dòng)設(shè)備的普及,電源管理技術(shù)在確保設(shè)備續(xù)航能力和性能方面發(fā)揮著關(guān)鍵作用。本文將介紹電源管理技術(shù)在移動(dòng)設(shè)備的幾種典型應(yīng)用,并分析其優(yōu)勢(shì)和
    的頭像 發(fā)表于 01-13 14:38 ?166次閱讀

    工控主板在數(shù)控機(jī)床設(shè)備的應(yīng)用

    工控主板作為數(shù)控機(jī)床的核心組件之一,發(fā)揮著至關(guān)重要的作用。以下是工控主板在數(shù)控機(jī)床設(shè)備應(yīng)用的詳細(xì)介紹
    的頭像 發(fā)表于 01-09 15:33 ?137次閱讀

    電子成像的耦合介紹

    本文介紹了直接耦合、間接耦合、反射耦合和光學(xué)耦合這幾種電子成像的耦合方式,并介紹了它們各自的適用場(chǎng)景以及優(yōu)缺點(diǎn)。 在電子成像的閃爍體耦合學(xué)習(xí)過(guò)程,我們經(jīng)??吹健榜詈稀?、“閃爍體”、
    的頭像 發(fā)表于 12-17 14:25 ?248次閱讀

    IO模塊助力PLC,全面提升水處理設(shè)備能效

    隨著我國(guó)環(huán)保事業(yè)的不斷發(fā)展,水處理技術(shù)在工業(yè)、生活等領(lǐng)域發(fā)揮著越來(lái)越重要的作用。如何提高中水處理設(shè)備的能效,成為行業(yè)關(guān)注的焦點(diǎn)。本文將為您介紹明達(dá)技術(shù)高效解決方案——利用自主研發(fā)的分布式IO模塊配合PLC,實(shí)現(xiàn)
    的頭像 發(fā)表于 12-16 14:57 ?168次閱讀
    IO模塊助力PLC,全面提升<b class='flag-5'>中</b>水處理<b class='flag-5'>設(shè)備</b>能效

    半導(dǎo)體封裝技術(shù)的發(fā)展階段和相關(guān)設(shè)備

    本文介紹了半導(dǎo)體工藝及設(shè)備的封裝工藝和設(shè)備。
    的頭像 發(fā)表于 11-05 17:26 ?544次閱讀
    半導(dǎo)體封裝技術(shù)的發(fā)展階段和相關(guān)<b class='flag-5'>設(shè)備</b>

    大型設(shè)備的小型電機(jī)

    電子發(fā)燒友網(wǎng)站提供《大型設(shè)備的小型電機(jī).pdf》資料免費(fèi)下載
    發(fā)表于 09-29 10:02 ?0次下載
    大型<b class='flag-5'>設(shè)備</b><b class='flag-5'>中</b>的小型電機(jī)

    思科設(shè)備常用的巡檢命令介紹

    思科(Cisco)設(shè)備在網(wǎng)絡(luò)領(lǐng)域具有廣泛的應(yīng)用,其可靠性和功能強(qiáng)大使其成為許多企業(yè)網(wǎng)絡(luò)基礎(chǔ)設(shè)施的核心。然而,確保這些設(shè)備始終高效運(yùn)行,定期進(jìn)行巡檢是必不可少的。這篇文章將詳細(xì)介紹思科設(shè)備
    的頭像 發(fā)表于 08-12 18:16 ?740次閱讀

    Juniper設(shè)備常用的巡檢命令介紹

    在網(wǎng)絡(luò)管理設(shè)備巡檢是確保網(wǎng)絡(luò)設(shè)備運(yùn)行正常、性能最佳的重要環(huán)節(jié)。Juniper Networks設(shè)備廣泛應(yīng)用于各類(lèi)網(wǎng)絡(luò)環(huán)境,其特有的JUNOS操作系統(tǒng)提供了一系列強(qiáng)大而實(shí)用的命令工具
    的頭像 發(fā)表于 08-12 18:14 ?793次閱讀

    華為設(shè)備的OSPF命令詳解

    OSPF網(wǎng)絡(luò)。這篇文章將詳細(xì)介紹華為設(shè)備的OSPF命令,包括基本配置、路由策略、鄰居關(guān)系和故障排除等方面,幫助讀者全面了解和掌握這些命令。
    的頭像 發(fā)表于 08-12 18:13 ?2093次閱讀

    華為設(shè)備的BGP命令詳解

    的主要路由協(xié)議,用于在不同自治系統(tǒng)(AS)之間交換路由信息。掌握華為設(shè)備的BGP命令對(duì)于網(wǎng)絡(luò)工程師至關(guān)重要,因?yàn)檫@不僅涉及日常的網(wǎng)絡(luò)運(yùn)維,還影響到網(wǎng)絡(luò)的整體性能和安全性。本文將詳細(xì)介紹華為設(shè)備
    的頭像 發(fā)表于 08-12 18:11 ?1269次閱讀

    藍(lán)牙模塊在無(wú)線游戲設(shè)備的應(yīng)用

    隨著科技的飛速發(fā)展,無(wú)線游戲設(shè)備已經(jīng)成為游戲產(chǎn)業(yè)的重要組成部分,為用戶(hù)提供了更加便捷、自由的游戲體驗(yàn)。藍(lán)牙模塊作為無(wú)線游戲設(shè)備的核心技術(shù)之一,其創(chuàng)新應(yīng)用不僅提升了游戲的互動(dòng)性和實(shí)時(shí)性,還為玩家?guī)?lái)
    的頭像 發(fā)表于 07-19 14:00 ?321次閱讀

    工控主板在環(huán)保智能設(shè)備的應(yīng)用

    工控主板在環(huán)保智能設(shè)備的應(yīng)用,對(duì)于環(huán)境監(jiān)測(cè)、資源管理、污染控制等方面起到了至關(guān)重要的作用。以下是工控主板在環(huán)保智能設(shè)備的一些具體應(yīng)用:
    的頭像 發(fā)表于 07-17 15:54 ?379次閱讀
    工控主板在環(huán)保智能<b class='flag-5'>設(shè)備</b><b class='flag-5'>中</b>的應(yīng)用

    排線磁環(huán):電子設(shè)備的電磁屏蔽衛(wèi)士

    在電子設(shè)備的密集環(huán)境,電磁干擾(EMI)是一個(gè)不容忽視的問(wèn)題。為了應(yīng)對(duì)這一挑戰(zhàn),排線磁環(huán)作為一種高效的電磁屏蔽解決方案,被廣泛應(yīng)用于各種電子設(shè)備。本文維愛(ài)普小編將
    的頭像 發(fā)表于 05-21 09:50 ?786次閱讀