ARM64中的ASID地址空间标识符

news/2024/10/7 16:20:15

1. 从ARM32到ARM64

从ARM32到ARM64不止将处理器从32位升级到了64位,还有许多性能的技术也得到了极大的提升,光是个头长了可不行啊!能耐也得跟着长啊!哈哈哈

1.1 ARM32的TLB机制

image

如上图所示,上一讲我们讲了TLB的每一条表项都有一个bit用来表示自己是全局的(内核空间)还是本地的(用户空间)。当进程发生切换是,操作系统必须将TLB中缓存用户空间转换关系的表项全部清空,以保证下一个进程不会使用上一个进程的地址转换关系。

这样,在ARM32中每切换一次进程就需要刷一次TLB表中的本地表项,如果进程切换的频繁,处理器损失的性能是比较大的。

1.2 ASID(地址空间标识符)

上一篇文章我们提到了鸡肋的FCSE技术,其实从ARMv6开始,ARM就反对使用任何FCSE机制。到了ARMv7时代,FCSE是可选的,直到ARMv7多处理架构才彻底淘汰了FCSE(起码从白皮书上搜这个关键字是找不到了),到了ARMv8,处理器迎来了64位的时代,ASID技术已经早已成熟。

ASID这项技术在ARMv7多处理器架构就开始使用了,只不过在ARMv7里,ASID是8位的,也就是256就溢出了,而在ARMv8架构中,ASID可以配置为16位,也就是计到65536才会溢出,ASID位数扩大的好处文章后面会讲。为每一个进程分配一个ASID的话,256个就溢出了,所以在Linux中ASID溢出后就要重新洗牌了。

说到ASID,还要从ARM的TTBR寄存器开始说起,前面文章我们讲过了MMU的TTBR寄存器,但是并没有给出TTBR寄存器的bit描述,这里列出ARM32和ARM64的TTBR寄存器格式描述

1.2.1 ARM32的TTBR0寄存器格式

image

1.2.2 ARM64的TTBR0寄存器格式

image
可以看出在ARM32的TTBR寄存器里是没有ASID这个属性的,粗暴点的说,操作系统切换进程其实就是切页表,切页表就是改写TTBR寄存器的值,那么很容易知道Linux会为每一个进程分配一个独用的ASID码,Linux为每个为进程分配的ASID值都不相同。

这么一来,MMU再做页表转换时也会把当前的ASID值缓存到TLB快表里,

ARM64的TLB机制

image

有了ASID后,TLB跟以前也不一样了,在进程切换的时候,操作系统也不需要去刷TLB了,因为MMU在做地址转换时会将TLB表项里的ASID和当前进程的ASID值做比较,只有ASID值相等,MMU才认为这条表项是我需要的。

所以和没有ASID技术的ARM32相比,ARM64在进程切换上提升了较大的性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/42753.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

[linux]mark-tool

编写shell终端的目录收藏工具前言 在远程连接到linux进行操作时,经常要切换目录,有些目录切换频次较高,因此写了个shell工具,用于收藏目录、切换目录等。也不需要安装,直接添加脚本即可。配置 首先声明脚本是基于bash shell,zsh和fish未经测试。编辑文件~/.bash_custom_f…

大模型在传统行业应用再思考

前言 上周去杭州开人工智能研讨会之前,写了一篇文章《大模型是连接主义的胜利吗?》。这篇文章实验了大模型对复杂规则的推理能力,总结了两个观点:不能过于迷信大模型的能力,它并不是万能的。大模型基于相关性,不是因果性。它需要传统的机理模型、符号推理等弥补自身缺陷。…

2. Mybatis 入门程序

1. Mybatis 入门程序开发步骤 1.1 数据库表的创建准备数据库表:数据库:north_mybatis , 汽车表 t_car,字段包括:id:主键(自增)【bigint】 car_num:汽车编号【varchar】 brand:品牌【varchar】 guide_price:厂家指导价【decimal类型,专门为财务数据准备的类型】 prod…

加入我们:死神永生服

微信:ClassIn:洛谷: https://www.luogu.com.cn/team/79116

ACCESS 窗体的模式属性只能同时存在一个

这是我实际工作中遇到的问题.两个窗体同时设置了"模式"属性为"是",预想中的结果是左边最后弹出的数据表窗体为最上层窗体.结果左右两个窗体同级了,能点左,也能点右.当然主窗体不能点是正确的. 解决思路:这明显就是"模式"冲突了.所以我们设置成只…

避免 OOMKilled:在 Kubernetes 环境中优化 Java 进程的内存配置

避免 OOMKilled:在 Kubernetes 环境中优化 Java 进程的内存配置 DevOps云学堂译 奇妙的Linux世界 2024-06-10 09:53 重庆 听全文 公众号关注 「奇妙的 Linux 世界」设为「星标」,每天带你玩转 Linux !管理 Kubernetes Pod 中运行的 Java 进程的内存使用情况比人们想象的更具…

手绘二维码

从头把一个字符串变成二维码看到二维码,很容易猜到黑白相间的小方格就是二进制比特。那么这些比特是怎么得到的?小方格又是按照什么规则排布的?今天咱们就从零开始将一个 url 画成二维码。 考虑到大多数人可能不太了解二维码,所以先讲下基础概念。你也可以先看看左耳朵耗子…

1.Mybatis概述

1. Mybatis历史 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下, iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github。iBatis一词来源于“internet”和“abatis”的…