飞腾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

飞腾CPU体系结构(十)相关推荐

  1. 飞腾CPU体系结构(十二)

    飞腾CPU体系结构(十二) 1. CPU物理地址空间 飞腾CPU支持的物理地址宽度为44位,物理地址空间实际上只有16TB.系统主存(芯片外部内存)和IO外设(例如SoC设备.PCIe设备)都在这个物 ...

  2. 飞腾CPU体系结构(十四)

    飞腾CPU体系结构(十四) 1. MMU原理 MMU的大致工作原理是: 64位虚拟地址首先分成虚拟页帧号和页内偏移量两部分,虚拟页帧号即页表项索引:根据页表项索引,在进程的页表里查找到对应页表项,然后 ...

  3. 飞腾CPU体系结构简单介绍(一)

    第一章 飞腾CPU体系结构简介 ARM体系结构是一种精简指令集体系结构RISC,具有以下基本特点:通用寄存器数量较多:采用统一寻址模式,系统主存和外设分布在CPU物理地址空间的不同范围:采用load/ ...

  4. 飞腾CPU体系结构(五)

    飞腾CPU体系结构(五)-- 通用寄存器 1. 64位通用寄存器 在AArch64执行状态下,飞腾CPU提供31个64位通用寄存器Xn(n=0/1/-/30),其中X30用作跳转链接寄存器. 某些指令 ...

  5. 飞腾CPU体系结构(九)

    飞腾CPU体系结构(九) 向量访存指令主要包括LD1/ST1. LD2/ST2.LD3/ST3和LD4/ST4四种. LD1/ST1一般针对一个向量寄存器,也有两个.三个或四个向量寄存器的模式. LD ...

  6. 飞腾CPU体系结构(八)

    飞腾CPU体系结构(八)--标量访存指令 在阅读之前,请先查看<飞腾CPU体系结构(五)>的SIMD和浮点寄存器.飞腾CPU还提供了32个128 位SIMD和浮点寄存器,这32个128位寄 ...

  7. 飞腾CPU体系结构之虚拟地址

    飞腾CPU体系结构之虚拟地址 1. 基本概念 虚拟地址:程序运行时指令和数据对应的地址. 虚拟地址空间:一个进程运行时指令和数据能访问到的虚拟地址范围. 注意事项: 每个进程拥有自己的虚拟地址空间,进 ...

  8. 飞腾CPU体系结构之低功耗指令

    飞腾CPU体系结构之低功耗指令 WFE和WFI指令 当飞腾CPU核执行两类指令:WFE或WFI之后,CPU核会进入低功耗状态: 一旦CPU核进入低功耗状态,就要一直保持低功耗状态直到相应的唤醒事件发生 ...

  9. 飞腾CPU体系结构(十三)

    飞腾CPU体系结构(十三) 1. 虚拟地址到物理地址的映射 程序员编程一般都是使用虚拟地址,无论是否用到高速缓存,飞腾CPU的内存管理单元MMU都会把虚拟地址翻译成物理地址,然后根据物理地址进行数据的 ...

最新文章

  1. fisher's exact test
  2. 自己添加ODBC数据源的Access驱动
  3. Android 6.0以上运行权限及RxPermissions的使用
  4. 不同特权级间代码段的跳转{ 门 + 跳转(jmp + call) + 返回(ret) }
  5. python多线程编程
  6. 创建variant二维数组
  7. 【贪心 和 DP + 卖股票】LeetCode 122. Best Time to Buy and Sell Stock II
  8. Java基础练习之流程控制(三)
  9. 隐马尔可夫模型三个问题的求解(一)
  10. 以前的东西-Mvp2
  11. (2)评价算法-TOPSIS算法
  12. 数学建模与数学实验 (MATLAB)
  13. 决策树的预剪枝与后剪枝
  14. Pycharm 金融Python实战二:用Python编写一个金融计算器——编写函数 调用命令 实例年金现值 利率换算 净现值法 投资回报期 内部收益率及其法则(带程序和结果)
  15. 车载监控需求日益上升, 浅析车载远程视频监控解决方案
  16. 华为自研发操作系统鸿蒙,你知华为芯片“麒麟”之意,又可知自研系统“鸿蒙”之深意?...
  17. 【Django】图书管理
  18. 宋宝华: kvmalloc ——倚天剑屠龙刀两大神器合体?
  19. TaxThemis: Interactive Mining and Exploration of Suspicious Tax Evasion Groups
  20. 数据库系统概论(第四版)习题解答

热门文章

  1. 加入产品推广市场,是搭建SaaS产品营销推广体系的第一步!
  2. 【LeetCode】714. 买卖股票的最佳时机含手续费 【动态规划】
  3. python最最最重要的数据分析工具之pandas
  4. ArgoCD 简明教程
  5. php 访问phpinfo,PHP无法执行 phpinfo()
  6. 创建phpinfo.php,如何创建phpinfo查看php信息
  7. 银行招聘考试怎么备考
  8. 入职中国银行内审部门
  9. SQLServer优化-实践经验
  10. Bootstrap Affix和过渡效果插件的详细使用【前端Bootstrap框架】