iT邦幫忙

2022 iThome 鐵人賽

DAY 7
2
Software Development

RISC-V: 深入淺出從入門到放棄系列 第 7

DAY7: RISC-V: 阿鬼你還是說中文吧之 AIA 介紹

  • 分享至 

  • xImage
  •  
tags: 鐵人賽

0. 前言

建議先觀看昨日 PLIC 介紹,會較恰當喔。
今日來介紹 AIA(Advanced Interrupt Architecture) 架構,如果觀看的人以為筆者是要介紹 AI 人工智慧,或甚麼深度學習巴拉巴拉之類的,那可能走錯棚了,請右轉離開,感謝提高點閱率XD,這個系列是要介紹 interrupt 的,所以目的是甚麼請先看清楚。

不定時更新 based on Version 1.0-RC3
AIA code 目前 upstream 已經到第六版啦,可能再改個幾版就正式合進 kernel 了,可以透過前方連結來看看目前的狀態唷

1. 目標

一開始先來講述 RISC-V AIA(Advanced Interrupt Architecture)的目標:

  • 以 RISC-V privileged 為基礎,盡量保持原有功能,並且擴充 interrupt 處理的功能。
  • 除了基本的有線中斷(wire interrupt)之外,還為 risc-v 系統提供 MSI(message-signaled interrupts),這是 PCI-E 和其他設備標準使用的。
  • 對於 wire interrupt 定義新的 Interrupt controller 也就是 advanced PLIC(APLIC),該 interrupt controller 為每個特權級別(machine level、supervisor level),都有一個獨立的控制介面可以將 wired interrupt 轉換成 MSI。
  • 擴展 RISC-V hart local interrupt 的 framework (timer interrupt、software interrupt)
  • 允許軟體將所有 interrupt priority 排序,而非只依靠單獨的 interrupt controller 對 external interrupt 進行priority 排序。(代表可以將所有的 interrupt 進行排序)
  • 當 hart 實現 hypervisor extension 時,可以為 virtual machine(VM)虛擬化的這些相同的 interrupt 設施提供足夠的幫助。
  • 透過I/O MMU (memory management unit)的幫助,運行在 VM 中的guest OS 有最大的機會和能力直接控制設備,避免讓 hardware interrupt 限制了 VM 數量的因素。
  • 在實現的彈性、效率和靈活性之間,盡可能保持最佳的折衷,從而實現上述所有目標

AIA 主要是關注高性能的 RISC-V 系統的需求,目前還未定義以下 interrupt 處理特性的支援,有些特性是有助於 real time(實時)系統,但不太適合高速處理的處理器,如下所示:

  • 為每個 interrupt source 提供一個單獨的 trap 入口地址
  • 在 interrupt trap 進入時自動堆疊 register的值,在退出時回復
  • 根據 priority 自動搶占 interrupt

2. 限制

在目前版本當中,RISC-V AIA 可支援 16,384個 harts 的對稱多處理器(SMP)系統,如果 harts 是64位(RV64)且實現了 hypervisor extension,並且 AIA 的所有功能都已實作,那麼對於每個實體 hart,最多可能有63個虛擬 hart 和數千個額外的閒置(已交換出的)虛擬 hart,其中每個虛擬 hart 都直接控制一個或多個實體設備。

下圖為數量的相關限制

3. 概述主要的物件

在完全支持 MSI 系統中,每個 hart 都有 IMSIC,可用來控制 external interrupt,相反的,傳統的 interrupt ,hart沒有IMSIC。通常較大的系統,如 PCI 設備的系統,通常會給 hart 提供 IMSIC,從而完全支援 MSI;而許多較小的系統可能仍然適合使用 wire interrupt 和沒有 IMSIC 的簡單 hart。

3.1 External interrupts 沒有 IMSIC

假設沒有 IMSIC,則會用 APLIC(Advanced Platform-Level Interrupt)
替代,在此情況下,APLIC 會當作 interrupt 控制中心,external interrupt 會透過專用路線將 interrupt 傳遞給 hart。

此外,即使 hart 有實現 hypervisor extension,如果沒有 IMSIC,目前 AIA 不支援 external interrupt 直接向 VM 發送 interrupt。相反的需要將 interrupt 送到相關的 hypervisor,hypervisor才可以將virtual interrupt 送給 VM。

下圖為傳統的 wired interrupt 傳送給 hart,不支援 MSI

external interruppt 有 IMSIC

為了能夠接收(message-signaled interrupt)MSI,每個 hart 會需要有 IMSIC 如下圖所示。

從根本上講,MSI 只是一種對特定的記憶體寫入,硬體接受該地址表示為 interrupt
因此,每個 IMSIC 在機器的地址空間中被分配了一個或多個不同的地址,當有東西對這些地址進行寫入時,接收的 IMSIC 就表示該行為為 external interrupt。
所有 IMSIC 在機器的實體地址空間中都有唯一的地址,所以每個 IMSIC 都可以接收 MSI。
IMSIC 針對 machine level 和 supervisor level 有獨立的地址,部分原因為通過不同地址寫入的權限,可以給予或拒絕每個級別發出 interrupt 信號的能力,另外的原因則為可以更好的支援虛擬化。
hart 的 MSI 紀錄在 IMSIC 的 interrupt file 當中,該 file 主要紀錄 interrupt pending bit 和 interrupt enable bit。

當 risc-v 系統中 hart 具有 IMSIC,且具有 APLIC時, APLIC 的角色將有所改變。
APLIC 會將所有 wired interrupt 轉換成 MSI,然後通過 IMSIC 送到 hart(如果沒有 IMSIC 則由 APLIC 充當,但只能使用 wired interrupt 不能用 MSI)。

如果 risc-v hart 實作了 hypervisor extension,IMSIC 可能可以額外提供 guest interrupt file,用來向虛擬機提供的 interrupt。

其他 interrupt

local interrupt

  • timer interrupt
  • software interrupt

global interrupt

  • external interrupt

local interrupt 仍然包含在 hart 中,因此 timer and software 不會通過 APLIC 以及 IMSIC。

Interrupt 在 hart的 ID

RISC-V privileged 架構為每個 hart 上的 interrupt cause 定義了不同的 ID number ,這是當 trap 發生時自動寫入 mcause 或是 scause 的 0 到 15 number 大於 16 則可自行定義,
而 AIA 進一步定義 16~23 和 32~47,而 23~31 的 number 以及大於 48 的 number 也是可自行定義使用

下圖為此次 AIA 主要的interrupt ID

大多數的 I/O 設備的 interrupt 是由 external interrupt controller(外部中斷處理器,可能是 IMSIC 或是APLIC )傳送到 hart

  • machine level 為 11
  • supervisor level 為 9
  • virtual supervisor(用於virtual machine) 為 10

local interrupt 的定義及處理則在後續會說明。

ISA extensions Smaia and Ssaia

AIA 定義了兩個 extension 名稱用於 risc-v ISA 分別為 Smaia 以及 Ssaia,一個用於 machine level 另一個則用於 supervisor level,對於 machine level extension, Smaia 包含 AIA 所附加的 CSR 以及相對應的 interrupt 行為,覆蓋所有特權級別。對於 supervisor level extension 基本 Ssaia 與 Smaia 相同,但排除 machine level 的 CSR。

Note

紀錄一下相關縮寫

  • AIA (Advanced Interrupt Architecture)
  • PLIC (Platform-Level Interrupt Controller)
  • APLIC (Advanced Platform-Level Interrupt Controller)
  • IMSIC (Incoming Message-Signaled Interrupt Controller)
  • MSI (message-signaled interrupt)
  • hart (hardware thread)

後記

該章節主要做一些基本介紹,如: IMSIC、MSI、APLIC 之類的,看完後面的章節在看前面會比較有感覺,這邊很單純簡單介紹一些而已,看不懂的部分,後面幾章也有比較詳細的說明,那就改天再見~


上一篇
DAY6: RISC-V: 三分鐘學會 PLIC 流程之外部中斷
下一篇
DAY8: RISC-V: AIA 架構下新增的 CSR
系列文
RISC-V: 深入淺出從入門到放棄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言