飞腾CPU体系结构(十)
飞腾CPU体系结构(十)
1.高速缓存模型
为了优化整体性能,飞腾CPU芯片内部提供L1高速缓存和L2高速缓存,有些飞腾CPU也提供芯片内部的L3高速缓存,本节不对这个情况进行赘述。
靠近流水线的高速缓存具有低延迟,高代价的特点;离流水线更远的高速缓存,实现代价通常会低一些,容量通常会更大些,但是延迟也更长些。
缓存延迟关系
- L1缓存延迟一般在几拍左右;
- L2缓存延迟一般是L1缓存延迟的2~3倍;
- 内存墙延迟一般是L2缓存的10倍以上。
飞腾CPU的外部内存和L1/L2缓存是以缓存块为单位进行数据传输的,每个缓存块长度为64字节,L1缓存块是L2缓存块副本,L2缓存块是芯片外内存的副本。
2.FT2000+/64服务器
FT2000+/64服务器芯片
每个核具有各自独立的32KB的L1数据缓存和32KB的L1指令缓存。其中四个核为一个核簇,每个核簇共享2MB的L2缓存。全芯片64核一共有32MB的L2缓存。L2缓存是统一缓存,不区分指令和数据。而芯片内的处理核共享芯片内的L2缓存;对每个处理核而言,L2缓存块在硬件设计上保证数据一致性。
虽然是L1的数据和指令是L2的副本,但飞腾CPU的硬件设计上并不保证,缓存块副本和原数据会时刻保持完全一致。
3.常规高速缓存指令
一般来说,对高速缓存的操作有三种:
操作 | 常规说明 | 备注 |
---|---|---|
invalidate | 直接将缓存块失效 | 飞腾将invalidate实现为clean and invalidate |
clean | 将缓存块更新到L2缓存块或着内存 | - |
clean and invalidate | 先做clean,再执行invalidate | - |
飞腾CPU提供的常规高速缓存指令分为:
- 面向指令缓存的IC指令
仅仅提供invalidate操作
- 面向数据缓存的DC指令。
clean操作主要是将L1数据缓存块内容更新到L2缓存块或者芯片外部内存中;
invalidate操作主要是先执行clean操作然后将数据缓存块释放。
指令 | 操作说明 |
---|---|
IC IALLU | 释放全部L1指令缓存 |
IC IVAU,Xn | 释放L1指令缓存块 |
DC CVAU,Xn | 将L1数据缓存块更新到L2缓存块中 |
DC CVAC,Xn | 将L1数据缓存块更新到内存中 |
DC CIVAC,Xn | 将L1数据缓存块更新到内存中,然后将相关缓存块失效 |
4.__inval_dcache_area函数分析
输入参数
- kaddr 内核起始地址
- size 长度
函数描述
将[kaddr, kadr+size)地址范围内的缓冲块失效。要注意,如果地址不对齐的时候,也保证两端不完整的缓冲块数据更新到内存中,然后再失效。
4.1 准备好相关参数
add x1, x1, x0
dcache_line_size x2, x3
sub x3, x2, #1
此时:
x0为起始地址
x1为结束地址
x2为缓冲块掩码,即缓冲块长度-1
x3为缓冲块长度
4.2 处理尾部不对齐情况
tst x1, x3
bic x1, x1, x3
b.eq 1f
dc civac, x1
1:
这一部分需要采用clean and invalidate操作,保证数据被更新到内存。
4.3 处理头部不对齐情况
tst x0, x3
bic x0, x0, x3
b.eq 2f
dc civac, x0
b 3f
2:
这一部分需要采用clean and invalidate操作,保证数据被更新到内存。
4.3 处理中间对齐情况
dc ivac, x0
3: add x0, x0, x2
cmp x0, x1
b.lo 2b
这段并不更新数据到内存,而是直接将缓冲块失效。注意:飞腾CPU依然会将数据更新到内存。
4.4结束退出
dsb sy
ret
飞腾CPU体系结构(十)相关推荐
- 飞腾CPU体系结构(十二)
飞腾CPU体系结构(十二) 1. CPU物理地址空间 飞腾CPU支持的物理地址宽度为44位,物理地址空间实际上只有16TB.系统主存(芯片外部内存)和IO外设(例如SoC设备.PCIe设备)都在这个物 ...
- 飞腾CPU体系结构(十四)
飞腾CPU体系结构(十四) 1. MMU原理 MMU的大致工作原理是: 64位虚拟地址首先分成虚拟页帧号和页内偏移量两部分,虚拟页帧号即页表项索引:根据页表项索引,在进程的页表里查找到对应页表项,然后 ...
- 飞腾CPU体系结构简单介绍(一)
第一章 飞腾CPU体系结构简介 ARM体系结构是一种精简指令集体系结构RISC,具有以下基本特点:通用寄存器数量较多:采用统一寻址模式,系统主存和外设分布在CPU物理地址空间的不同范围:采用load/ ...
- 飞腾CPU体系结构(五)
飞腾CPU体系结构(五)-- 通用寄存器 1. 64位通用寄存器 在AArch64执行状态下,飞腾CPU提供31个64位通用寄存器Xn(n=0/1/-/30),其中X30用作跳转链接寄存器. 某些指令 ...
- 飞腾CPU体系结构(九)
飞腾CPU体系结构(九) 向量访存指令主要包括LD1/ST1. LD2/ST2.LD3/ST3和LD4/ST4四种. LD1/ST1一般针对一个向量寄存器,也有两个.三个或四个向量寄存器的模式. LD ...
- 飞腾CPU体系结构(八)
飞腾CPU体系结构(八)--标量访存指令 在阅读之前,请先查看<飞腾CPU体系结构(五)>的SIMD和浮点寄存器.飞腾CPU还提供了32个128 位SIMD和浮点寄存器,这32个128位寄 ...
- 飞腾CPU体系结构之虚拟地址
飞腾CPU体系结构之虚拟地址 1. 基本概念 虚拟地址:程序运行时指令和数据对应的地址. 虚拟地址空间:一个进程运行时指令和数据能访问到的虚拟地址范围. 注意事项: 每个进程拥有自己的虚拟地址空间,进 ...
- 飞腾CPU体系结构之低功耗指令
飞腾CPU体系结构之低功耗指令 WFE和WFI指令 当飞腾CPU核执行两类指令:WFE或WFI之后,CPU核会进入低功耗状态: 一旦CPU核进入低功耗状态,就要一直保持低功耗状态直到相应的唤醒事件发生 ...
- 飞腾CPU体系结构(十三)
飞腾CPU体系结构(十三) 1. 虚拟地址到物理地址的映射 程序员编程一般都是使用虚拟地址,无论是否用到高速缓存,飞腾CPU的内存管理单元MMU都会把虚拟地址翻译成物理地址,然后根据物理地址进行数据的 ...
最新文章
- fisher's exact test
- 自己添加ODBC数据源的Access驱动
- Android 6.0以上运行权限及RxPermissions的使用
- 不同特权级间代码段的跳转{ 门 + 跳转(jmp + call) + 返回(ret) }
- python多线程编程
- 创建variant二维数组
- 【贪心 和 DP + 卖股票】LeetCode 122. Best Time to Buy and Sell Stock II
- Java基础练习之流程控制(三)
- 隐马尔可夫模型三个问题的求解(一)
- 以前的东西-Mvp2
- (2)评价算法-TOPSIS算法
- 数学建模与数学实验 (MATLAB)
- 决策树的预剪枝与后剪枝
- Pycharm 金融Python实战二:用Python编写一个金融计算器——编写函数 调用命令 实例年金现值 利率换算 净现值法 投资回报期 内部收益率及其法则(带程序和结果)
- 车载监控需求日益上升, 浅析车载远程视频监控解决方案
- 华为自研发操作系统鸿蒙,你知华为芯片“麒麟”之意,又可知自研系统“鸿蒙”之深意?...
- 【Django】图书管理
- 宋宝华: kvmalloc ——倚天剑屠龙刀两大神器合体?
- TaxThemis: Interactive Mining and Exploration of Suspicious Tax Evasion Groups
- 数据库系统概论(第四版)习题解答