最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

A核與M核異構(gòu)通信過(guò)程解析

2023-06-30 14:35 作者:補(bǔ)給站Linux內(nèi)核  | 我要投稿

現(xiàn)在越來(lái)越多的產(chǎn)品具有M core和A core的異構(gòu)架構(gòu),既能達(dá)到M核的實(shí)時(shí)要求,又能滿足A核的生態(tài)和算力。比如NXP的i.MX8系列、瑞薩的RZ/G2L系列以及TI的AM62x系列等等。雖然這些處理器的品牌及性能有所不同,但多核通信原理基本一致,都是基于寄存器和中斷傳遞消息,基于共享內(nèi)存?zhèn)鬏敂?shù)據(jù)。

通信過(guò)程整體架構(gòu)說(shuō)明

一、 硬件層通信實(shí)現(xiàn)原理

通過(guò)物理內(nèi)存DDR分配,將硬件層分為了兩部分:TXVring Buffer(發(fā)送虛擬環(huán)狀緩沖區(qū))和RXVring Buffer(接收虛擬環(huán)狀緩沖區(qū));其中M核從TXVring區(qū)發(fā)送數(shù)據(jù),從RXVring區(qū)讀取接收數(shù)據(jù),A核反之。


處理器支持消息傳遞單元(MessagingUnit,簡(jiǎn)稱MU)功能模塊,通過(guò)MU傳遞消息進(jìn)行通信和協(xié)調(diào),M核和A核之間通過(guò)寄存器中斷的方式傳遞命令,最多支持4組MU雙向傳遞消息,既可通過(guò)中斷告知對(duì)方數(shù)據(jù)傳遞的狀態(tài),也可發(fā)送最多4字節(jié)數(shù)據(jù),還可在低功耗模式下喚醒對(duì)方,是保證雙核通信實(shí)時(shí)性的重要手段。


下面看下完成了1次從CoreA向CoreB 傳遞消息的具體過(guò)程:

寄存器輸入輸出通信模型


(1)CoreA寫(xiě)入數(shù)據(jù);
(2)MU將Tx 空位清0,Rx滿位置1;
(3)產(chǎn)生接收中斷請(qǐng)求,通知CoreB接收狀態(tài)寄存器中的接收器滿,可以讀取數(shù)據(jù);
(4)CoreB響應(yīng)中斷,讀取數(shù)據(jù);
(5)CoreB讀完數(shù)據(jù)后,MU將Rx滿位清0,Tx空位置1;
(6)狀態(tài)寄存器向CoreA生成發(fā)送中斷請(qǐng)求,告知CoreB讀完數(shù)據(jù),發(fā)送寄存器空。


二、驅(qū)動(dòng)層Virtio下RPMsg通信實(shí)現(xiàn)

virtio 是一個(gè)通用的 I/O 虛擬化框架,?位于設(shè)備之上的抽象層,負(fù)責(zé)前后端之間的通知機(jī)制和控制流程,為異構(gòu)多核間數(shù)據(jù)通信提供了層的實(shí)現(xiàn)。hypervisor 通過(guò)他模擬出一系列的虛擬化設(shè)備,例如:virtio-net、virtio-blk等,并使得這些設(shè)備在虛擬機(jī)內(nèi)部通過(guò) api 調(diào)用的方式變得可用。它包含4個(gè)部分:前端驅(qū)動(dòng)、后端驅(qū)動(dòng)、 vring 及通信間統(tǒng)一的接口。與其他的模擬 I/O 方式對(duì)比, virtio 減少了虛擬機(jī)的退出和數(shù)據(jù)拷貝,能夠極大地提高 I/O 性能。計(jì)算機(jī)中存在不同的總線標(biāo)準(zhǔn),而 virtio 采用的是 pci 總線(當(dāng)然也可以用其他總線來(lái)實(shí)現(xiàn))。每一個(gè) virtio 設(shè)備就是一個(gè) pci 設(shè)備。

  • virtio前端驅(qū)動(dòng)

virtio 前端驅(qū)動(dòng)位于 Linux 內(nèi)核中,運(yùn)行在虛擬機(jī) VM,針對(duì)不同類型的設(shè)備有不同類型的驅(qū)動(dòng)程序,包括virtio-net、virtio-blk、virtio-pci等,這些驅(qū)動(dòng)程序與后端驅(qū)動(dòng)交互的接口都是統(tǒng)一的。

  • virtio層

virtio層實(shí)現(xiàn)虛擬隊(duì)列接口,作為前后端通信的橋梁,不同類型的設(shè)備使用的虛擬隊(duì)列數(shù)量不同,例如 virtio-net 使用兩個(gè)虛擬隊(duì)列,一個(gè)用于接收,一個(gè)用于發(fā)送;virtio-blk 驅(qū)動(dòng)僅使用一個(gè)虛擬隊(duì)列。虛擬隊(duì)列實(shí)際上被實(shí)現(xiàn)為跨越客戶機(jī)操作系統(tǒng)和 hypervisor 的銜接點(diǎn),可以通過(guò)任意方式實(shí)現(xiàn),前提是客戶機(jī)操作系統(tǒng)和 virtio 后端程序都遵循一定的標(biāo)準(zhǔn),以相互匹配的方式實(shí)現(xiàn)它。

  • virtio-ring層

virtio-ring 是虛擬隊(duì)列的具體實(shí)現(xiàn),其中實(shí)現(xiàn)了環(huán)形緩沖區(qū)(ring buffer),用于保存前端驅(qū)動(dòng)和后端處理程序執(zhí)行的信息,并且它可以一次性保存前端驅(qū)動(dòng)的多次I/O請(qǐng)求,并且交由后端驅(qū)動(dòng)去批量處理,最后實(shí)際調(diào)用宿主機(jī)中設(shè)備驅(qū)動(dòng)實(shí)現(xiàn)物理上的I/O操作,這樣做就可以根據(jù)約定實(shí)現(xiàn)批量處理而不是客戶機(jī)中每次I/O請(qǐng)求都需要處理一次,從而提高客戶機(jī)與 hypervisor 信息交換的效率。

  • virtio后端驅(qū)動(dòng)

virtio 后端驅(qū)動(dòng)位于 qemu ,后端設(shè)備承擔(dān)的主體功能分為兩部分:

  1. virtio后端設(shè)備的模擬;

  2. 依據(jù)virtio協(xié)議處理來(lái)自虛擬機(jī)端發(fā)送的請(qǐng)求。

在 QEMU 的實(shí)現(xiàn)中, virtio 設(shè)備是 QEMU 為虛擬機(jī)模擬的 PCI 設(shè)備,遵循 PCI-SIG 定義的 PCI 規(guī)范,具有配置空間、中斷配置等功能;virtio 后端驅(qū)動(dòng)運(yùn)行在宿主機(jī)中,用于實(shí)現(xiàn) virtio 后端操作硬件設(shè)備,例如向內(nèi)核協(xié)議棧發(fā)送一個(gè)數(shù)據(jù)包完成虛擬機(jī)對(duì)網(wǎng)絡(luò)數(shù)據(jù)的操作。

RPMsg消息框架是Linux系統(tǒng)基于Virtio緩存隊(duì)列實(shí)現(xiàn)的主處理核和協(xié)處理核間進(jìn)行消息通信的框架,當(dāng)客戶端驅(qū)動(dòng)需要發(fā)送消息時(shí),RPMsg會(huì)把消息封裝成Virtio緩存并添加到緩存隊(duì)列中以完成消息的發(fā)送,當(dāng)消息總線接收到協(xié)處理器送到的消息時(shí)也會(huì)合理地派送給客戶驅(qū)動(dòng)程序進(jìn)行處理。


在驅(qū)動(dòng)層,對(duì)A核,Linux采用RPMsg框架+Virtio驅(qū)動(dòng)模型,將RPMsg封裝為了tty文件供應(yīng)用層調(diào)用;在M核,將Virtio移植,并使用簡(jiǎn)化版的RPMsg,因?yàn)樯婕暗交コ怄i和信號(hào)量,最終使用FreeRTOS完成過(guò)程的封裝,流程框圖如下方所示。

主處理核與協(xié)處理核數(shù)據(jù)傳遞流程圖


(1)Core0向Core1發(fā)送數(shù)據(jù),通過(guò)rpmsg_send函數(shù)將數(shù)據(jù)打包至Virtioavail鏈表區(qū);
(2)在avail鏈表尋找共享內(nèi)存中空閑緩存,將數(shù)據(jù)置于共享內(nèi)存中;
(3)通過(guò)中斷通知Core1數(shù)據(jù)到來(lái),共享內(nèi)存由avail鏈表區(qū)變至used區(qū);
(4)Core1收到中斷,觸發(fā)rpmsg的接收回調(diào)函數(shù),從used區(qū)獲取數(shù)據(jù)所在的共享內(nèi)存的物理地址,完成數(shù)據(jù)接收;
(5)通過(guò)中斷通知Core0數(shù)據(jù)接收完成,共享內(nèi)存緩存由used區(qū)變?yōu)閍vail區(qū),供下次傳輸使用。


【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【749907784】整理了一些個(gè)人覺(jué)得比較好的學(xué)習(xí)書(shū)籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書(shū)、實(shí)戰(zhàn)項(xiàng)目及代碼)? ?


三、應(yīng)用層雙核通信實(shí)現(xiàn)方式

在應(yīng)用層,對(duì)A核可使用open、write和read函數(shù)對(duì) /dev下設(shè)備文件進(jìn)行調(diào)用;對(duì)M核,可使用rpmsg_lite_remote_init、rpmsg_lite_send和rpmsg_queue_recv函數(shù)進(jìn)行調(diào)用,不做重點(diǎn)闡述。從整體架構(gòu)上看,關(guān)系如下:


原文作者:人人極客社區(qū)




A核與M核異構(gòu)通信過(guò)程解析的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
乡宁县| 阿合奇县| 青铜峡市| 栾城县| 潮安县| 娄底市| 宜宾县| 北海市| 昆山市| 赤城县| 榆中县| 南乐县| 旌德县| 神木县| 两当县| 宜阳县| 玉龙| 东丰县| 张掖市| 晋州市| 渭南市| 边坝县| 体育| 建宁县| 疏附县| 土默特右旗| 郴州市| 阳城县| 儋州市| 德安县| 克山县| 莆田市| 墨竹工卡县| 南昌县| 江永县| 鄯善县| 禄丰县| 四会市| 锦屏县| 宜城市| 大港区|