陳華才_龍芯架構與Linux內核_16_9.pdf

編號:129175 PDF 23頁 2.57MB 下載積分:VIP專享
下載報告請您先登錄!

陳華才_龍芯架構與Linux內核_16_9.pdf

1、龍芯新架構龍芯新架構LoongArchLoongArch與與LinuxLinux內核內核陳華才2023.03目錄目錄2LoongArch 簡介內核故事未來展望其他LoongArchLoongArch簡介簡介3 從從CISCCISC與與RISCRISC談起談起中央處理器(CPU)分為CISC(Complex Instruction Set Computer,復雜指令集計算機)和RISC(Reduced Instruction Set Computer,精簡指令集計算機)兩大類CISC的特征是指令集復雜而龐大、指令字不等長、尋址方式復雜、計算指令操作數可以是內存等,典型代表有X86 RISC的特征

2、是指令集精簡而高效、指令字等長、尋址方式簡明、計算指令操作數必須是寄存器等,典型代表有ARM、MIPS和Power CISC和RISC各有優劣,在發展過程中也并非井水不犯河水,而是互相吸收對方的優點。X86在內部早已實現RISC化(所謂微指令),而RISC也引入了SIMD等功能比較強大而復雜的指令(所謂向量化)LoongArchLoongArch簡介簡介4 龍芯處理器(龍芯處理器(LoongsonLoongson)與龍芯指令系統()與龍芯指令系統(LoongArchLoongArch)LoongISALoongISA:基于:基于MIPSMIPS指令系統指令系統擴展擴展(舊龍芯)舊龍芯)MIPS

3、基礎指令 龍芯擴展指令:LoongEXT 向量擴展指令:LoongSIMD 二進制翻譯擴展指令:LoongBTLoongArchLoongArch:龍芯自主指令系統(新龍芯):龍芯自主指令系統(新龍芯)龍芯基礎指令 128位向量擴展指令:LSX 256位向量擴展指令:LASX 虛擬化擴展指令:LVZ 二進制翻譯擴展指令:LBTMIPS32/MIPS64 R2/R6MIPS32/MIPS64 R2/R6LoongISALoongISALoongEXTLoongEXTLoongSIMDLoongSIMDLoongBTLoongBTLoongArchLoongArchLoongBaseLoongBa

4、seLBTLBTLVZLVZLSXLSXLASXLASXLoongArchLoongArch簡介簡介5 龍芯處理器三大家族龍芯處理器三大家族龍芯1號32位單核CPU(小CPU)MIPS32指令集或LA32指令集主要面向工業控制、數據采集、消費電子等龍芯2號低端64位單核/雙核CPU(中CPU)MIPS64指令集或LA64指令集(龍芯2K500/2K1000/2K2000)主要面向工業控制、移動終端、嵌入式計算機等龍芯3號高端64位多核CPU(大CPU)MIPS64指令集(龍芯3A1000/3B1500/3A2000/3A3000/3A4000)或LA64指令集(龍芯3A5000/3C5000/

5、3D5000)主要面向電腦(桌面計算機、服務器、高性能計算機)等LoongArchLoongArch簡介簡介6 LoongArchLoongArch的主要特征的主要特征典型的RISC:32位定長指令,32個通用寄存器,32個浮點/向量寄存器4個特權級:PLV03,其中PLV0最高(內核態),PLV3最低(用戶態)主要特權資源:控制狀態寄存器(CSR)地址空間:支持可配置的直接映射和頁表映射TLB:可變頁大小的MTLB+固定頁大小的STLBCache:一級指令Cache(ICache)、一級數據Cache(DCache)、二級犧牲Cache(VCache)、三級混合Cache(SCache)Co

6、re-0V-CacheD-CacheI-CacheCore-2V-CacheD-CacheI-CacheCore-1V-CacheD-CacheI-CacheCore-3V-CacheD-CacheI-CacheS-CacheLoongArchLoongArch簡介簡介-通用寄存器通用寄存器7寄存器編號寄存器名稱寄存器用途$r0zero常數0$r1ra返回地址$r2tpTLS(線程局部存儲)指針$r3sp棧指針$r4$r11a0a7參數寄存器$r4$r5v0v1返回值寄存器(復用a0/a1)$r12$r20t0t7臨時寄存器$r21x保留未定義$r22fp幀指針$r23$r31s0s7靜態寄存

7、器參數寄存器參數寄存器a0/a1a0/a1與返回值寄存器與返回值寄存器v0/v1v0/v1復用復用$r21$r21在用戶態未定義,在內核態用于每在用戶態未定義,在內核態用于每CPUCPU變量基地址變量基地址子函數需要自己保存子函數需要自己保存/恢復恢復S S系列寄存器,但可以隨便使用系列寄存器,但可以隨便使用T T系列寄存器系列寄存器LoongArchLoongArch簡介簡介-特權寄存器特權寄存器8寄存器編號寄存器名稱寄存器功能簡介0 x0CRMD當前模式信息,包括特權級、中斷狀態等0 x1PRMD異常前模式信息,位域定義類似于CRMD0 x2EUEN擴展部件使能,如FPU、LSX、LASX

8、、LBT等0 x4ECFG異常配置0 x5ESTAT異常狀態0 x6ERA異常返回地址0 xCEENTRY異常入口地址0 x10TLBIDXTLB索引(包含MTLB頁大?。? x11TLBEHITLB表項高位內容0 x12、0 x13TLBELO0/1TLB表項低位內容(雙頁)0 x18ASID地址空間標識符0 x1BPGD頁全局目錄(頁表根目錄)基址0 x1ESTLBSIZESTLB頁大小0 x20CPUIDCPU核編號0 x41TCFG定時器配置0 x42TVAL定時器剩余值0 x180183DMW03直接映射配置窗口LoongArchLoongArch簡介簡介9 LoongArchLoo

9、ngArch指令格式(共指令格式(共9 9種)種)2R-type:Opcode+Rj+Rd#OpName Rd,Rj3R-type:Opcode+Rk+Rj+Rd#OpName Rd,Rj,Rk4R-type:Opcode+Ra+Rk+Rj+Rd#OpName Rd,Rj,Rk,Ra2RI8-type:Opcode+I8+Rj+Rd#OpName Rd,Rj,I82RI12-type:Opcode+I12+Rj+Rd#OpName Rd,Rj,I122RI14-type:Opcode+I14+Rj+Rd#OpName Rd,Rj,I142RI16-type:Opcode+I16+Rj+Rd#O

10、pName Rd,Rj,I161RI21-type:Opcode+I21L+Rj+I21H#OpName Rj,I21I26-type:Opcode+I26L+I26H#OpName I26Opcode是指令操作碼,是指令操作碼,Rj和和Rk是源操作數(寄存器),是源操作數(寄存器),Rd是目標操作數(寄存器),是目標操作數(寄存器),Ra是是4R-type特有的附特有的附加操作數(寄存器)。加操作數(寄存器)。I8/I12/I14/I16/I21/I26分別是分別是8位位/12位位/14位位/16位位/21位位/26位的立即數。其中位的立即數。其中21位和位和26位位立即數在指令字中被分割為

11、高位部分與低位部分,所以格式描述中有立即數在指令字中被分割為高位部分與低位部分,所以格式描述中有I21L/I21H和和I26L/I26H這樣的表述。這樣的表述。LoongArchLoongArch簡介簡介10 內存管理:概述內存管理:概述 字節序:只支持小尾端(LittleEndian)虛擬地址-物理地址轉換規則 支持直接映射和分頁映射兩種方式 直接映射虛擬內存通過CSR.DMWn(n=03)進行配置,虛擬地址(VA)和物理地址(PA)之間有簡單的映射關系:VA=PA+固定偏移 分頁映射的虛擬地址(VA)和物理地址(PA)有任意的映射關系,這種關系記錄在TLB和頁表中。TLB包括一個全相聯的M

12、TLB和一個組相聯的STLB。頁面大小可配置(4KB/16KB/64KB)MTLB(Multiple Page Size TLB)的頁大小隨時可變,由CSR.TLBIDX.PS決定 STLB(Single Page Size TLB)的頁大小啟動時可配置(由CSR.STLBSIZE決定),運行時固定不變LoongArchLoongArch簡介簡介11 內存管理:直接映射內存管理:直接映射KVRANGE(11)KPRANGE0/1(10)UVRANGE(00/01)0 x000000000 x400000000 x800000000 xC0000000XKVRANGE(11)0 xC000000

13、000000000XKPRANGE(10)XSPRANGE(01)XUVRANGE(00)0 x00000000000000000 x40000000000000000 x8000000000000000左為32位地址空間右為64位地址空間前綴(10)MAT6362 6160 59有效虛擬地址VA064位線性地址MATMAT:內存訪問類型(:內存訪問類型(CacheCache屬性)屬性)MAT=00MAT=00:強序非緩存:強序非緩存 MAT=01MAT=01:一致可緩存:一致可緩存 MAT=10MAT=10:弱序非緩存:弱序非緩存 MAT=11MAT=11:保留未使用:保留未使用LoongA

14、rchLoongArch簡介簡介12 內存管理:分頁映射內存管理:分頁映射 V V:有效位:有效位D D:寫臟位:寫臟位 P P:存在位:存在位W W:可寫位:可寫位 PLVPLV:特權級:特權級MATMAT:CacheCache屬性屬性 RPLVRPLV:特權級嚴格匹配標志:特權級嚴格匹配標志G G:全局位:全局位 PNPN:NUMANUMA的的ProtNoneProtNone標志標志SPSP:特殊頁標志:特殊頁標志頁幀號PFNRPLVNXNR63910SP60MATPN12W117GP65432V08PLVD164位頁表條目62610內內 核核 故故 事事13 V5.19V5.19:Loo

15、ngArchLoongArch體系結構主體部分于進入上游體系結構主體部分于進入上游 2 2萬萬1 1千行代碼,歷時千行代碼,歷時2020個月,迭代個月,迭代1515個版本個版本 V6.0V6.0:中斷控制器驅動、中斷控制器驅動、PCIPCI控制器驅動和控制器驅動和VDSOVDSO優化進入上游優化進入上游 V6.1V6.1:EFISTUBEFISTUB啟動、啟動、QspinlockQspinlock、PerfEventsPerfEvents、Kexec/KdumpKexec/Kdump、BPF JITBPF JIT等功能進入上游等功能進入上游 V6.2V6.2:FDTFDT啟動、掛起(啟動、掛起

16、(S3S3,SuspendSuspend)、休眠()、休眠(S4S4,HibernationHibernation)、)、Ftrace Ftrace 等功能進入上游等功能進入上游內內 核核 故故 事事14 中斷控制器驅動的故事中斷控制器驅動的故事問題:問題:FDT具有描述具有描述irqchip級聯的能力,級聯的能力,ACPI沒有這種描述能力,而龍芯沒有這種描述能力,而龍芯LoongArch采用的采用的是是ACPI規范。規范。內內 核核 故故 事事15 中斷控制器驅動的故事(續)中斷控制器驅動的故事(續)內內 核核 故故 事事16 中斷控制器驅動的故事(續)中斷控制器驅動的故事(續)內內 核核

17、故故 事事17 EFISTUBEFISTUB啟動方式的故事啟動方式的故事 BootLoaderBootLoader(EFISTUB/GrubEFISTUB/Grub)傳遞給內核的信息:)傳遞給內核的信息:memmapmemmap、initrdinitrd、cmdline cmdline 第一版:第一版:a0=argca0=argc,a1=argva1=argv,a2=boot_paramsa2=boot_params boot_paramsboot_params包含了包含了memmapmemmap和和initrdinitrd等信息等信息 EFISTUBEFISTUB實現復雜,實現復雜,類似于類

18、似于X86X86 第二版:第二版:a0=efi_boota0=efi_boot,a1=fdt_pointera1=fdt_pointer fdt_pointerfdt_pointer包含了包含了memmapmemmap、initrdinitrd和和cmdlinecmdline等信息等信息 采用通用采用通用EFISTUBEFISTUB實現,同實現,同ARM64/RISCARM64/RISC-V V,但重度依賴,但重度依賴FDTFDT 第三版:第三版:a0=efi_boota0=efi_boot,a1=cmdlinea1=cmdline,a2=system_tablea2=system_table

19、 EFIEFI維護者親自實現,維護者親自實現,LoongArchLoongArch領先于領先于ARM64/RISCARM64/RISC-V V內內 核核 故故 事事18 采用通用實現,避免盲目創新采用通用實現,避免盲目創新 集眾人之智,特別先進、特別整潔,特別優雅集眾人之智,特別先進、特別整潔,特別優雅 通用系統調用表(通用系統調用表(unistd.h)include/uapi/asm-generic/unistd.h采用架構:采用架構:ARM64、OpenRISC、RISC-V、C-SKY、LoongArch 通用異常中斷入口(通用異常中斷入口(generic entry)kernel/en

20、try/common.c采用架構:采用架構:X86、S390、LoongArch 通用自旋鎖通用自旋鎖classic spinlock ticket spinlock qspinlockLoongArch現在采用通用現在采用通用ticket spinlock、以后將采用通用、以后將采用通用qspinlock未未 來來 展展 望望19 基本功能 重定位內核(PIE)、向量、虛擬化、二進制翻譯 電源管理 動態調頻(CPUFreq,DVFS)、溫度調控 調測工具 Kprobe/Uprobe、WatchPoint、kgdb 更多處理器支持 目前僅支持大CPU:龍芯3A5000/3C5000/3D500

21、0,使用ACPI 未來要支持小CPU:龍芯1X/2K500/2K1000/2K2000,使用FDTLoongArchLoongArch開源生態開源生態20 UEFI規范:規范:2.10版本開始支持版本開始支持LoongArch ACPI規范:規范:6.5版本開始支持版本開始支持LoongArch Automake:1.18版本開始支持版本開始支持LoongArch Cmake:3.20開始支持開始支持LoongArch Meson:0.57開始支持開始支持LoongArch Binutils:2.38版本開始支持版本開始支持LoongArch GCC:12版本開始支持版本開始支持LoongAr

22、ch Linux:5.19版本開始支持版本開始支持LoongArch Glibc:2.36版本開始支持版本開始支持LoongArch Systemd:250版本開始支持版本開始支持LoongArch FFmpeg:5.0版本開始支持版本開始支持LoongArch QEMU:7.1版本開始支持版本開始支持LoongArch GoLang:1.19開始支持開始支持LoongArch LLVM:15版本開始支持版本開始支持LoongArch.NET:7.0版本將支持版本將支持LoongArch OpenJDK/Rust/Musl:正在努力進行上游工作:正在努力進行上游工作鳴鳴 謝謝21李雪峰 龍芯中

23、科內核組組長,龍芯Linux內核代碼的管理者和領頭人毛碧波 呂建民 楊鐵柱 唐友靈 何金陽 張卿 龍芯中科主要社區內核開發者(郵件列表里面常見)以及在幕后默默奉獻的無名英雄。王雪瑞 楊嘉勛 席若堯 龍芯社區主要貢獻者,龍芯架構常態Reviewer,開發與溝通能力一流,在代碼貢獻之外起到了龍芯公司與社區及各內核子系統Maintainer連接的紐帶作用。我和我和用芯探核用芯探核22 我是誰?陳華才,龍芯中科內核開發者,Linux內核中MIPS/龍芯3號、KVM/MIPS以及龍芯新架構(LoongArch)的Maintainer 用芯探核是什么書?立足龍芯而包羅萬象 第一本基于龍芯處理器的內核書籍 第二本基于Linux-5.x版本的內核書籍 創造性地使用“樹形視圖”和“鏈式視圖”來解析源代碼的

友情提示

1、下載報告失敗解決辦法
2、PDF文件下載后,可能會被瀏覽器默認打開,此種情況可以點擊瀏覽器菜單,保存網頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站報告下載后的文檔和圖紙-無水印,預覽文檔經過壓縮,下載后原文更清晰。

本文(陳華才_龍芯架構與Linux內核_16_9.pdf)為本站 (2200) 主動上傳,三個皮匠報告文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對上載內容本身不做任何修改或編輯。 若此文所含內容侵犯了您的版權或隱私,請立即通知三個皮匠報告文庫(點擊聯系客服),我們立即給予刪除!

溫馨提示:如果因為網速或其他原因下載失敗請重新下載,重復下載不扣分。
客服
商務合作
小程序
服務號
折疊
午夜网日韩中文字幕,日韩Av中文字幕久久,亚洲中文字幕在线一区二区,最新中文字幕在线视频网站