【CHI】(十二)Memory Tagging
目录
1. Introduction
2. Message extensions
3. Tag coherency
4. Read transaction rules
4.1 TagOp values
4.2 Permitted initial MTE tag states
5. Write transactions
5.1 Permitted TagOp values
6. Dataless transactions
7. Atomic transactions
1. Introduction
内存标签扩展(MTE:Memory Tagging Extension)是一种用于检查内存中数据的正确使用情况的机制。当内存位置分配给特定用途时,还可以为其分配一个存储器标签。
此内存标签与内存中的数据一起保存,称为“分配标签”。以后访问内存位置时,请求者使用位置的地址和它认为与位置相关联的标签值。
此标签称为物理地址标签(Physical Address Tag)或物理标签(Physical Tag)。
对于启用标签检查的任何访问,将根据分配标签检查物理标签。访问始终按正常进行,标签检查结果决定是否发出错误条件信号。
此机制可确保内存访问用于其预期目的,而不是错误或恶意访问。它可以在运行时用于识别许多常见的编程存储器错误,例如缓冲区溢出和use-after-free。
注:计算机安全领域中的"use-after-free"漏洞是一种常见的内存安全问题,指的是在释放(free)了某块内存后,程序继续使用了已释放的内存区域,可能导致严重的安全问题。漏洞发生的主要原因之一是内存管理不当。
存储器标签包括与内存中的每个16字节对齐数据相关联的4-bit标签。
支持以下行为:
- 只在请求Normal WriteBack内存时允许内存标记。
- Read transactions请求中有一个指示(TagOp),确定是否必须与数据一起返回分配标签值。
- 由请求者执行根据分配标签检查返回的物理标签。举个例子,如果缓存保存数据值但不保存分配标签值,则Read事务必须执行同时返回数据data和标签tag,返回的数据不要求有效。
- 需要提取标签的读取请求不得使用转发监听 Forwarding snoops。
- StashOnce transactions请求分配标签。分配标签预计会随着数据的存储而被积存。
- Write transactions有一个物理标签和必须根据分配标签检查的写数据一起提供。由Completer执行对分配标签进行检查物理标签。如果不匹配,则需要发出失败通知。
- Write transactions将分配标签更新为新值。这些写事务通常会同时更新数据。但是,允许没有字节使能置位,以便仅更新标签。
- Write transactions将Dirty或clean的cache line刷到下级cache line,无需更新或检查标签。这些写入事务始终包括数据,并指示分配标签值是否也随数据一起传递。
- 返回数据的Snoop transactions也可以返回关联的分配标签。如果标签是Dirty,则必须返回标签。如果标签为“Clean”,则返回标签是可选的。
- CMO缓存维护操作必须在数据和相应的内存标签上运行。
2. Message extensions
CHI消息定义的以下扩展用于支持Memory Tagging:
Tag | 提供4-bit标签集,每个标签都与16字节对齐的数据相关联。
|
TU | Tag Update。指示必须更新哪些分配标签。
|
TagOp | Tag Operation。指示要对相应DAT通道中存在的标签执行的操作。
|
TagOp的编码如下:
TagOp[1:0] | Tag operation |
0b00 | Invalid |
0b01 | Transfer |
0b10 | Update |
0b11 | Match or Fetch |
3. Tag coherency
本节总结标签一致性特性。
缓存的分配标签保持和硬件一致。一致性机制与数据一致性相同。
适用的标签缓存状态为:Invalid, Clean,Dirty。Clean,Dirty的缓存行都是有效的。
数据缓存状态和标签缓存状态组合的约束如下:
- 仅当数据为有效时,标签才能有效。
- 数据有效时标签可能无效。
- 当高速缓存行处于“Unique”状态时,它同时适用于数据和标签。
- 当高速缓存行处于“Shared”状态时,它同时适用于数据和标签。
- 当带有Dirty标签的缓存行被逐出 evict时,则:
——数据和标签都必须被视为Dirty。
——必须将标签回写到内存中,或者通过HNF将Dirty数据传递给其他缓存[_PD] 。
- 从缓存中evict干净标签时,可以将其发送到其他缓存,也可以静默丢弃。
- 当脏数据和干净标签一起被evict时,干净标签可以和脏数据一起传递到下游PoC。
4. Read transaction rules
Read可以选择随同数据提取标签。
根据请求中的TagOp值确定是否需要随读取的数据返回标签。
4.1 TagOp values
当请求中的TagOp值为Transfer(0b01)时:
- 标签必须随数据一起返回。
- 返回的标签的状态必须是正在使用的请求所允许的适当缓存状态。
- 要返回的标签数量取决于返回的数据大小。对于所有snoopable requests,每次访问必须返回4个标签。(即,对应一个cacheline的大小)
- 当访问需要时,requester将物理标签与随读取数据一起接收的分配标签进行匹配。
当请求中的TagOp值为Fetch(0b11)时:
- 标签必须随数据一起返回。
- 返回的数据不要求有效。无论标签匹配结果如何,请求者都必须忽略接收到的数据。
- 必须返回与缓存行相对应的所有标签。
- 返回的标签的状态必须是“干净”或“脏”。
- 如果返回Dirty标签,则必须保留这些标签,除非更新并写入内存。
请求中的TagOp值为无效时:
- 允许(但不要求)随数据一起返回标签。
- 如果标签与数据一起返回,则它们必须是“干净”。
转换标签从Shared到Unique
如果数据和标签都存在于“共享”状态的请求者处,并且请求者要求将缓存行移动到“Unique”状态,则应使用TagOp值为“Transfer”的MakeReadUnique事务。
允许请求者使用TagOp值为“Transfer”的ReadUnique事务。
Data存在时获取标签
如果请求者拥有缓存行的缓存副本且数据有效但分配标签无效,并且请求者要求执行标签匹配,则请求者必须使用读取请求来获取所需标签。
读取请求的类型和请求中的TagOp值取决于:
- 由请求者执行的操作,即Load或Store操作。
- Store操作的大小。
- 目标内存位置。
在上述场景中,Requester必须使用:
- 如果是Load操作,使用ReadClean with Transfer。请求可以从任何初始数据状态发送。初始MTE标签状态是无效的,但允许为任何状态。
- 如果是Store操作,使用ReadUnique with Transfer。请求可以从任何初始数据状态发送。初始MTE标签状态无效,但允许为任何状态。不论是否存在MTE,ReadUnique都可以从任何初始数据状态发送。
- 如果目标内存位置为Non-snoopable,而且无论Tag匹配结果如何,Requester都保证写入完整的cacheline,则使用ReadNoSnp with Fetch。必须删除返回的数据。返回的数据不要求有效。必须返回干净标签。缓存行内的所有标签都必须是有效的。
如果目标内存位置为Snoopable,而且无论Tag匹配结果如何,Requester都保证写入完整的cacheline,则使用ReadUnique with Fetch。必须删除返回的数据。返回的数据不要求有效。必须返回干净或脏标签。缓存行内的所有标签都必须是有效的。
当响应ReadClean时,使用Snoop Filter来跟踪请求者缓存状态的Home,不能基于响应请求者的状态降低Snoop Filter中缓存行的状态。
注意:
在以前的版本中,I和UCE是ReadClean事务的唯一允许初始高速缓存行状态。
使用Snoop Filter跟踪缓存状态的Home被允许根据响应中的状态设置缓存行状态。
允许的响应和tag状态
必须适当处理使用分配标签接收的缓存行的数据和状态,以免破坏一致性。
当请求TagOp值为Transfer时,允许的响应字段值为:
- Transfer. 指示返回的标签为“干净”。
- Update.指示返回的标签是Dirty。数据响应必须pass Dirty [_PD]。
当请求TagOp值为Fetch时,允许的响应字段值为:
- Transfer. 指示返回的标签为“干净”。
- Update.指示返回的标签是Dirty。数据响应必须pass Dirty [_PD]。
当请求TagOp值为“无效”时,允许的响应字段值为:
- Invalid. 表示返回的标签无效。
- Transfer. 指示返回的标签为“干净”。
当Read data中的TagOp值无效时,TU必须为全零。Tag不适用,并且可以是任意值。
在读事务中单独返回数据和响应时,TagOp字段仅在Data-only消息中适用,在Non-data响应消息中不适用,必须设置为零。
必须保持标签的缓存状态与读取请求的类型一致:
- 对于TagOp值为 Invalid的所有Read requests,Invalid 或Clean的标签必须返回。
- 对于TagOp值为Transfer或Fetch的ReadNoSnp,必须返回Clean标签。
- 对于TagOp值为Transfer的ReadClean、Readonce、ReadOnce CleanInvalid和ReadOnce MakeInvalid,必须返回Clean标签。
- 对于TagOp值为Transfer的ReadNotSharedDirty,必须返回Clean或Dirty标签。仅当缓存行状态为“ Unique”时,才允许返回Dirty标签。
- 对于TagOp值为Transfer的ReadShared,必须返回 Clean 或Dirty标签。
- 对于TagOp值为Transfer或Fetch的ReadUnique,必须返回Clean或Dirty标签。返回的缓存行状态必须是Unique的。
- 对于TagOp值为Invalid的MakeReadUnique,Invalid 或 Clean的标签必须返回。只允许在响应数据时使用Clean标签。
- 对于TagOp值为Transfer的MakeReadUnique,如果响应中包含数据,则必须返回Clean或Dirty标记。
——Clean标签允许在带数据的响应以及不带数据的响应 (Comp_UC andComp_SC)中使用。
——只有当响应是[UD_PD],才允许使用Dirty标签。
- 在返回Dirty标签的情况下,返回的缓存行必须包含pass Dirty[UD_PD]。
当目标地址不支持MTE时,响应必须使用TagOp of Invalid。
对于独占访问序列,在执行独占store事务之前,必须避免使用使缓存行的其他副本无效的请求来获取tag。这通常是通过在执行独占Load事务的同时提取标记来实现的。
4.2 Permitted initial MTE tag states
下表展示了允许的初始数据状态以及不同Read事务的标记状态和相应请求中允许的TagOp值。
5. Write transactions
在Write事务的Request和Data消息之间分配不同的支持MTE的字段。
Request和WriteData消息中都包含TagOp字段,指示要对WriteData消息中的标记执行的操作。Request还包括Tag GroupID字段,用于为需要标记匹配操作的请求提供通过/失败响应的标识符。
注意:TagGroupID字段是实现时自定义的,通常可用于标识响应相关的异常级别和TTBR。
WriteData消息中的TagOp值通常与Request消息中的值相同,但监听写入数据或取消写入时除外。当Write Data和Write请求中的Tag Op值不同时,必须根据Write Data中的Tag Op值来决定是否执行Tag Match。
WriteData消息还包括每个标签的标签更新(TU)位,适用于Tag Op为Update的情况。
5.1 Permitted TagOp values
本节描述写入请求消息中每个允许的TagOp值的Write Data TagOp值。
当请求中的TagOp字段为Invalid时,WriteData中的Memory Tagging字段必须设置为0,并被Completer忽略。
当Request请求中的TagOp字段为Transfer时,WriteData中的TagOp字段可以是:
- Transfer:标签是干净的,必须由Completer适当处理。
- Invalid:只有当缓存副本无效或写入事务被取消时才有可能。
在请求TagOp为Transfer的Write clean事务中,写入数据中的TagOp不允许更改为Update。
当请求中的TagOp字段为Update时,WriteData中的TagOp字段可以是:
- Update:Dirty标签必须缓存或写入内存。
- Transfer:标签是干净的。当Dirty标签已经被侦听出来,就可能发生这种情况。
- Invalid:只有当缓存副本无效或写入事务被取消时才有可能。
当请求中的TagOp字段为Match时,WriteData中的TagOp字段可以是:
- Match:必须在Completer中执行相应的标记匹配。
- Invalid:只有当Write事务被取消时才有可能。
5.2 TagOp, TU, and tags relationship
本节介绍不同write事务中TagOp、TU和Tag之间的关系。
- 对于TagOp为Invalid的所有Write请求,必须将Memory Tagging字段设置为0,并被Completer忽略。
- 对于WriteBackFull和WriteCleanFull的 TagOp:
——Transfer:必须返回干净标签。TU位不适用,必须设置为0。
——Update:必须置位所有TU位。
——Match:不允许
- 对于WriteBackPtl的TagOp:
——Transfer:不允许
——Update:不允许
——Match:不允许
- 对于WriteNoSnpFull的TagOp:
——Transfer:TU位不适用,必须为0。允许干净的标签传输从RN到HN和HN到SN。
——Update:必须置位所有TU位。
——Match:TU位不适用,必须设置为0。
- 对于WriteNoSnpDef的TagOP:
——Transfer:不允许
——Update:不允许
——Match:不允许
- 对于WriteUniqueFull和WriteUniqueFull Stash的TagOP:
——Transfer:不允许
——Update:必须置位所有TU位
——Match:TU位不适用,必须设置为0
- 对于带TagOpp的WriteNoSnpPtl、WriteUniquePtl和WriteUniquePtl Stash,
——Transfer:不允许
——Update:TU和BE位的任何组合,包括无或所有,都可以置位
——Match:TU位不适用,必须设置为0。当所有BE位为零时,不能执行标记匹配。
- 对于WriteEvict Full、WriteEvict OrEvict的TagOp:
——Transfer:必须返回干净标签。TU位不适用,必须设置为0
——Update:不允许
——Match:不允许
- 对于WriteNoSnpZero和WriteUniqueZero,TagOp只能是Invalid。
对于TagOp为Match的Write请求,tag在size范围内可以取任何值。
在Write DataCancel WriteData响应中,无论Write请求中的TagOp值如何,MTE字段都不适用,必须设置为0。
在写数据时,如果TagOp无效,则所有TU位和所有Tag位必须设置为0。
6. Dataless transactions
MakeUnique是唯一支持使用TagOp字段的dataless事务。
其他dataless事务,TagOp字段不适用,必须设置为0。
MakeUnique请求中的TagOp值只能为Invalid或Update。
Update的Request TagOp值指示请求者将随数据一起更新标记。当Request TagOp值为Update或Home知道Snoopee没有Dirty标记时,才允许Home使用SnpMakeInvalid响应MakeUnique。
响应MakeUnique的唯一允许的TagOp值为Invalid。
CMO必须在数据和相应的内存标签上运行。
MakeInvalid允许丢弃Dirty数据而不写入内存,但必须将Dirty标签写入内存。
7. Atomic transactions
TagOp适用于原子事务。此字段的允许值为“Invalid”和“Match”。
AtomicLoad, AtomicStore, and AtomicSwap事务要匹配的物理标签在写入数据中提供,并与有效数据字节相对应。
这些原子事务中只适用一组标记位,因为最大数据大小为8字节。其余标记位不适用,必须设置为0。
在数据达16字节的AtomicCompare中,有效数据仍然只对应于一组标记位。
在数据达32字节的AtomicCompare中,CMP和SWAP数据各自只有16字节。当Tag Op设置为Match有效时,只需要匹配一组Physical Tag位。必须复制物理标签,以覆盖比较和交换数据。允许completer使用一组物理标记执行标记匹配。
对于Non-store Atomic transactions,CompData响应中允许的TagOp值Invalid 和 Transfer。
TagOp为Invalid的原子事务的写数据必须具有所有TU位和所有Tag位设为0。
相关文章:

【CHI】(十二)Memory Tagging
目录 1. Introduction 2. Message extensions 3. Tag coherency 4. Read transaction rules 4.1 TagOp values 4.2 Permitted initial MTE tag states 5. Write transactions 5.1 Permitted TagOp values 5.2 TagOp, TU, and tags relationship 6. Dataless transact…...

Vue - 你知道Vue组件之间是如何进行数据传递的吗
难度级别:中级及以上 提问概率:85% 这道题还可以理解为Vue组件之间的数据是如何进行共享的,也可以理解为组件之间是如何通信的,很多人叫法不同,但都是说的同一个意思。我们知道,在Vue单页面应用项目中,所有的组件都是被嵌套在App.vue内…...

IP网络对讲广播系统审计
前言 这个系统是前两年在一个内网遇到的,当时顺手试了一个admin登陆之后再没有然后了,最近发现有大佬分享关于这个系统的漏洞,于是就把自己当初看的几个漏洞分享一下,系统比较简单,漏洞点很多,不要做坏事哦…...
蓝桥杯刷题--python38
197. 阶乘分解 - AcWing题库 def init(n): for i in range(2,n1): if not st[i]:primes.append(i) j0 while primes[j]*i<n: st[i*primes[j]]1 if i%primes[j]0: break j1 nint(input(…...
【LeetCode热题100】33. 搜索旋转排序数组(二分)
一.题目要求 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], …...

基于Leaflet.js的Marker闪烁特效的实现-模拟预警
目录 前言 一、闪烁组件 1、关于leaflet-icon-pulse 2、 使用leaflet-icon-pulse 3、方法及参数简介 二、闪烁实例开发 1、创建网页 2、Marker闪烁设置 3、实际效果 三、总结 前言 在一些地质灾害或者应急情况当中,或者热门预测当中。我们需要基于时空位置来…...

Vue-05
v-model 应用于其他表单元素 常见的表单元素都可以用v-model绑定关联 → 快速获取或设置表单元素的值 它会根据控件类型自动选取正确的方法来更新元素 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name…...
Mongodb中一个小巧的数据更新命令$inc
学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第55篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。 $inc是一个很小巧的命令。说它小巧,一个是因为短,只有三个字符。另一个是说…...

Java基于SpringBoot+Vue的专家医院预约挂号系统,附源码
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...

STM32一个地址未对齐引起的 HardFault 异常
1. 概述 客户在使用 STM32G070 的时候,KEIL MDK 为编译工具,当编译优化选项设置为Level0 的时候,程序会出现 Hard Fault 异常,而当编译优化选项设置为 Level1 的时候,则程序运行正常。表面上看,这似乎是 K…...

spring事务那些事
实际工作中还会面临千奇百怪的问题,看下面返个例子(注意MySql数据库测试): //1.hello1Service 调用 hello2Service Transactional(propagation Propagation.REQUIRED,rollbackFor Exception.class) public void doUpdate() {//…...

设计模式深度解析:AI大模型下的策略模式与模板方法模式对比解析
🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》《MYSQL应用》 💪🏻 制定明确可量化的目标,坚持默默的做事。 策略模式与模板方法模式对比解析 文章目录 🌟引言🌟Part 1:…...
贪婪算法python实现
贪婪算法(Greedy Algorithm)是一种解决问题的策略,它基于一种贪心的思想:在每一步选择中都采取当前状态下最好或最优的选择,从而希望最终能够得到全局最优解。 其核心思想可以简单概括为“当前局部最优选择”ÿ…...

(一)基于IDEA的JAVA基础12
一维数组 为什么使用数组: 当我们需要存储一系列数据的时候,就需要用到数组,如果不使用数组,我们就要需要一个一个的去声明变量,这样浪费内存空间,同时效率低下。 什么是数组: 数组本身就是一个变量,只…...
vue3中封装table表格
封装实例useTable import {ref } from vue export function useTable(api) {const data = ref([])const refre...

【Redis】Redis的使用
登录redis [roottest2 ~]# redis-cli 127.0.0.1:6379> 或[roottest2 ~]# redis-cli -h 192.168.67.12 -p 6379 192.168.67.12:6379> redis-benchmark 测试工具 redis-benchmark 是官方自带的Redis性能测试工具,可以有效的测试Redis服务的性能 基本的测试语…...
【机器学习300问】60、图像分类任务中,训练数据不足会带来什么问题?如何缓解图像数据不足带来的问题?
在机器学习中,绝大部分模型都需要大量的数据进行训练和学习(包括有监督学习和无监督学习),然而在实际应用中经常会遇到训练数据不足的问题。就比如图像分类这样的计算机视觉任务,确实依赖于大规模且多样化的训练数据以…...

鸿蒙内核源码分析 (内存管理篇) | 虚拟内存全景图是怎样的
初始化整个内存 OsSysMemInitOsMainmain从 main() 跟踪可看内存部分初始化是在 OsSysMemInit() 中完成的。 UINT32 OsSysMemInit(VOID) {STATUS_T ret;OsKSpaceInit();//内核空间初始化ret OsKHeapInit(OS_KHEAP_BLOCK_SIZE);// 内核动态内存初始化 512K if (ret ! LOS_OK…...

基于深度学习的电动自行车头盔佩戴检测系统
文章目录 1. 文档说明2. 运行环境说明2.1 硬件配置2.2 软件配置2.3 程序依赖库 3. 基本环境配置3.1 软件安装3.1.1 集成开发环境安装与配置3.1.2 数据库安装与配置3.1.3 编程语言安装3.1.4 CUDA和cuDNN安装与配置3.1.5 机器学习库安装 3.2 依赖库安装 4. 运行程序资源下载地 1.…...
GO - 泛型编程
go - 泛型编程 介绍 泛型即开发过程中编写适用于所有类型的模板,只有在具体使用的时候才能确定其真正的类型。随着Go 1.18版本的发布,泛型正式成为了Go语言的一部分。 在编写代码时,我们经常会遇到需要处理不同类型的数据的情况。传统上&am…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...