飞腾CPU体系结构(十)

飞腾CPU体系结构(十)

1.高速缓存模型

为了优化整体性能,飞腾CPU芯片内部提供L1高速缓存和L2高速缓存,有些飞腾CPU也提供芯片内部的L3高速缓存,本节不对这个情况进行赘述。

靠近流水线的高速缓存具有低延迟,高代价的特点;离流水线更远的高速缓存,实现代价通常会低一些,容量通常会更大些,但是延迟也更长些。

缓存延迟关系

  1. L1缓存延迟一般在几拍左右;
  2. L2缓存延迟一般是L1缓存延迟的2~3倍;
  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提供的常规高速缓存指令分为:

  1. 面向指令缓存的IC指令
    仅仅提供invalidate操作
  1. 面向数据缓存的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函数分析

输入参数

  1. kaddr 内核起始地址
  2. 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

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值