CHI中的System Debug, Trace, and Monitoring

news2024/9/20 14:27:22

========Data Source indication======
□ Read request的completer,可以在CompData, DataSepResp, SnpRespData, and SnpRespDataPtl response中的datasource域段中指定data的来源;即使响应中带有错误,该datasource也是有效的;
□ 该域段也可复用为传递SLC replacement policy;

□ DataSource的值必须按如下赋值:
        □ 当数据来源于memory的话,是采用固定值来指示如下信息:
                □ 0b110:PrefetchTgt memory的预取是有用的;
                   读数据以更低latency从Slave获得,是由于PrefetchTgt request已经读取或触发从memory读取数据;
                □ 0b111:PrefetchTgt memory的预取是无用的;
                   Read request仍然经历整个memory访问过程,因此没有因为之前PrefetchTgt的作用而使得有latency的缩小;
                   具体为啥没有效果的精确原因是由具体实现决定的。
                   注意:有几个原因可能导致PrefetchTgt request无效。
                        1. prefet命令被Slave丢掉;
                        2. prefetch数据被buffer替换掉;
                        3. Read request比PrefetchTgt先到达Slave。

        □ 对于不是来自memory的response,即来自cache,DataSource的值由具体实现决定的。
        CHI协议推荐但不要求在以下情况使用设置DataSource的值。
        component允许软件编程来重写DataSource的值:
                1. 将分组更改为更合适的指定配置设置;
                2. 将错误的值改变;

□ Responder允许返回的DataSource值无效,但是要遵从下面两条:
        1. 除了访问memory SN-F,responder必须返回0b000值;
        2. memory SN-F组件必须返回0b111作为默认值;
        这种例外情况必须得到系统认定。

======Crossing a chip-to-chip interface=====
□ 如果存在across chip,需要将到来的Data packet的DataSource值映射成不同的值,用于标识响应是来自remote chip cache,这个功能应该是由chip interface module来完成的。
        □ chip interface module可能采用的方法示例为:
                □ 将remote cache打包成单一编码,如图1所示;
                □ 实现一个最大8个入口的查找表,用于将到来Data packet的DataSource域段的实现值映射成新值。
一个实例如下:

        
□ 图1展示了multichip配置和对于系统中不同组件的DataSource映射建议值的例子:
□ 系统中每个chip的每个cluster有两个processors,并带有三级cache;
□ chip-to-chip接口module的cache和ICN内cache一致;
□ remote peer chip的所有cache分成一组;
□ non-memory组件不能编程去标识它自己,由于它可以返回的DataSource默认为0b000;

□ 为什么要知道datasource?
        □ 用于确定PrefetchTgt触发memory controller prefetch上是否有用;
        □ 通过监控SN-F memory返回数据的DataSource值,Requester可以确定PrefetchTgt的有效性,然后调整PrefetchTgt的发送速率;
        □ 可以用于性能分析和调试软件用于优化数据共享模式 ;

=====SLC replacement hint=====
□ 引入这个操作的原因是,当一个cache line放到了RNF之后,这个cache line的使用状态,其实这个RNF最清楚,比如经常使用,或者很少使用;
□ 如果这个cache line经常使用,当SLC在进行cache line替换的时候,如果把这个cache line替换掉了,则会invalid掉RNF中的cache line,但是这个line又在RNF中经常使用,因此,这样操作显然是不合理的;
□ 为此,引入这个filed, 用来告诉SLC, 那些cacheline是我常用的,那些不是,这样SLC进行替换的时候,就可以采取更加高效的手段,从而避免这样的问题发生;

□ 此特性是在req channel增加7bit的域段,该域段又被分为两个sub域段;        

□ 该特性虽然是在copyback req中最有用(RN借助这些copyback操作,可以把当前对该cacheline的使用情况带下来),但是协议也没有限制其使用,可以在如下的命令之外的所有请求中使用:
        • Atomics 
        • Stash transactions when StashNIDValid is 1 
        • PrefetchTgt 
        • PCrdReturn 
        • DVMOp

 


========MPAM========
□ 内存系统性能资源分区和监控(MPAM)是一种在用户之间有效利用内存资源并监控这些资源利用率的机制。
□ 内存资源,按照Partition ID (PartID) and Performance Monitoring Group (PerfMonGroup)进行分区;RN 发送的request包含该信息后,HN/SN根据此信息进行资源分配;
□ MPAM域段只在REQ/SNP 通道有效;
        □ REQ channel, 当发送者不想使用MPAM时,填写默认值;
        □ SNP channel, MPAM只在stash snoop中使用;其他snoop type, 填写默认值;
           Stash snp, 其包含data pull请求时,MPAM值和原始请求中的MPAM要一致;
□ MPAM域段的分配;
        — PartID = 9 bits 
        — PerfMonGroup = 1 bit 
        — MPAMNS = 1 bit

 

MPAMNS
□ 此域段表示是否是secure的分区,和请求中的ns不是一个概念;
□ MPAMNS/NS的四种组合都被允许;

MPAM value propagation
□ 接收者可以支持所有的partition和performance monitor group, 但是不强制;
□ 在系统配置阶段,可以先看下当前支持多少partition和performance monitor group,然后进行适配;

===========Completer Busy=============

□ 此标记,用来指示当前completer的繁忙程度;
□ 3bit, 在DAT/RSP channel使用;
□ 当分开返回data/rsp时,两个的busy可以单独置位;
□ 协议没有规定cbusy的取值含义,以及RN收到之后,如何结束各个值的含义,这是实现决定的;
简单的例子;
        CBusy[2], 多个core正在发送请求;
        CBusy[1:0],表示当前completer处,tracker的空满度;
                • 00 = Less than 50% full. 
                • 01 = Greater than 50% full. 
                • 10 - Greater than 75% full. 
                • 11 = Greater than 90% full.
□ RN处的Prefetcher,也可以根据cbusy的值,调整预取器的工作模式;

                --11,此时负载非常大,不再发送预取操作;
                --10,采用非常保守的预取方式;
                --01,正常的预取方式;
                --00,可以发送大量的预取;

========Trace Tag========
□ 协议规定,每个channel都有一个tracetag域段,用来增强debug能力;
TraceTag usage and rules
□ 何时设置TraceTag和怎样传输TraceTag域段的值按如下规则:
        □ TraceTag bit是由transaction的发起者或ICN组件设置的;
        □ 如果组件收到TraceTag置位的packet,必须将保留和反射该域值给任何响应的packet或衍生的packet;
                □ 例如,compack 和多个compdata之间的对应;
                □ Dvm和两个snp resp之间的对应;
        □ 如果接收到的置位的TraceTag packets衍生了许多response,那么每个衍生的response的TraceTag域段都要求置位。例如:
                □ 对于写操作,Separate comp和dbidresp;
                □ 对于读操作,separate datasepresp/respsepdata;
        □ 如果衍生的packet没有将TraceTag置位,那么该衍生packet和其它相关衍生packets是无关的;
        □ 如果一个组件可以收到和一笔transaction的多个packets,此时这个RN将要发送的trans, 其trace tag是否置位,只和收到的相关packet有关,例如:
                □ 如果Comp和DBIDResp是分开返回的,那么RN的write transaction流程可能有WriteData和CompAck两个响应。由于CompAck是作为接收到Comp的响应,它的值必须和Comp packet的 TraceTag的值有依赖关系,对于DBIDResp和WriteData的同样适用;
                □ 如果Requester收到分离的DataSepResp和RespSepData响应,然后产生CompAck,那么CompAck的TraceTag只和DataSepResp有关。
                □ 如果Comp或DBIDResp的任何一个将TraceTag置位,那么NCBWrDataCompAck响应必须将TraceTag置位。
        □ 如果ICN收到一笔TraceTag置位的packet,那它必须要保留该值且不能将复位该值。

注意点:
    □ 怎么来跟踪和使用trace tag,是实现决定的,协议不做描述;
    □ 精确的机制来trigger和使用tracetag, 是实现决定的;
    □ Tracetag bit任何时候,都会被限制在单一系统的维度进行使用,例如:
                □ 通过tracing trans flow, 来进行debug;
                □ 进行性能统计;
                □ 测试latency;

注意,以下列出一些Request-Response对的例子:
        □ Snoop request和snoop resp;
        □ Snoop resp和snpdvmop;
        □ Read requst和data resp;
        等等;

 

=======Memory Tagging========
□ Memory Tagging Extension (MTE)是一种用来检查memory中数据使用方式是否正确的机制;
□ 当某个地址的数据,是专门用来做某种用途时,可以给他分配一个memory tag;
□ 这个tag是和数据一起存在memory中的,这个tag称之为分配标签(allocation tag);
□ 当这个地址后面再次进行访问时,RN除了要指定访问的地址外,还需要指明跟这个地址相匹配的tag的值;该tag称之为PA tag;
□ 只要是tag check enable的访问,PA tag就需要和allocation tag进行比较;命令处理都按照正常进行,只是tag check的结果,需要用来指示是否需要返回error;
□ 这个机制,保证了对memory的访问,是按照预期来处理的,而不是错误的,或者是恶意访问; 它可以在运行时用于识别许多常见的编程内存错误,例如缓冲区溢出和释放后使用;
□ 该tag, 每16B数据,对应4bit tag;


支持如下的一些行为:
□ 只有normal writeback memory才使用memory tagging;
□ Read trans,会有一个指示信号,用来表示是否要返回allocation tag;
□ Physical tag和allocation tag的比较,是在RN中进行的;
□ 如果data value是缓存在cache中的,但是allocation tag没有,那么read trans必须要返回数据和tag, 返回tag对应的data可以是无效的?
□ 想要获得tag的read, 不能使用forwarding snoop;
□ Stashonce的命令,allocation tag也会和data一样;被stash到对应的RN中;
□ 携带physical tag的Write trans,必须与allocation tag进行check; 该check的动作,在completer完成;如果不匹配,则需要发出failure的notifycation;
□ Write trans可以通过将数据的BE全部无效,来专门更新tag;
□ 对于pass a dirty or clean cacheline的写操作,不需要更新或者进行tag检查;
□ Snoop trans, 在返回data的时候,也需要同时返回data对应的allocation tag; 如果tag是dirty的,必须返回,否则,可以选择性返回;
□ CMO操作,必须同时对data和tag进行;

CHI协议中,为了实现MTE, 增加了如下的一些域段;
□ Tag:每16B数据,4bit tag, 只在data通道中有;
□ TU: tag update, 用来指示是否要更新allocation tag, 只在data通道有;
        每1bit TU, 对应4bit tag, 也就是对应16B数据;
        TU域段,只有在snoop resp,以及write trans中有效,其他trans都要设置成0;
□ Tagop: tag operation. 用来指示当前对tag要进行什么操作;在req/data/rsp channel中均存在,2bit;

Transfer:
        □ 当前的这个tag是clean的;
        □ 不需要进行tag match检查;
        □ 这个数据所有的tag都必须transfer, 对于snoopable trans,不允许只传输dirty的tag;
        □ TU field无效,必须为0;
Update:
        □ 当前这个tag是dirty的,allocation tag需要进行更新;
Match:
        □ Write中的PT, 需要和memory中的allocation tag进行check;
        □ TU无效,全部置零;
Fetch:
        □ 需要预取tags, 对应的预取数据,可以有效,也可以无效;

 □ Retry cmd中的tagop, 必须和原始的tagop相同;


Taggroupid:
□ 为了方便RN来处理不同的tagmatch resp, 将对应的request进行分组,并进行编号,这个编号就是TagGroupID;
□ TagGroupID到底包含什么内容,一般是看具体的实现,但是协议推荐包含exception level, TTBR, CPU ID;
□ 只有当tapOP为match的时候,taggroupID才有效;
□ 此域段在request flit中是和其他域段共用的bit位;

同样,在rsp flit中也是公用的;

Tag一致性;
□ Allocation tag可以被cache, 同时支持硬件一致性;其一致性机理和data一致性一样;
□ Allocation tag状态有3种,Invalid, dirty, clean;
□ Data cache和tag cache之间的关系是:
□ Tags valid有效的条件是,data valid;
□ Data valid时,tag可以invalid;
□ 当cachelien state为Unique state, 标志着data和tag都是unique的;
□ 当cachelien state为Shared state, 标志着data和tag都是Shared的;
□ 当dirty tag的cachleine被逐出时,数据和tags都要看成dirty的,dirty的tag, 要么写回内存,要么将dirty pass给别人;
□ Clean tags被逐出时,可以给其他cache, 也可以直接丢弃;
□ Clean tags, dirty data的cacheline被逐出时,clean tag可以跟随dirty data一起,发送到POC;

各类命令的处理描述;
Error response
Tag Match
□ Write/atomic trans, tagop是match的,必须返回tag match的结果;
□ 该结果通过tagmatch message返回;
□ 无论标记匹配结果如何,事务都必须正常进行。即使WriteData被取消或未执行标记匹配,也必须发送TagMatch响应
使用单独的tagmatch meesage会增加复杂性和额外的消息,但是也有优势,可以提供更加准确的resp;
Tagmatch message有如下特性:
□ 由tag match check的那个人返回,可能是HN或者SN;
□ Tagid是从scrid获取的,如果是fwd的,则通过returnNID;
□ Resp必须携带request中的TagGroupID;
□ Trancetag无效;
□ Resp filed的值,指示tag match fail or pass;
□ 只要completer可以确定tag match的结果,就尽快返回tagmatch resp, 不用等data;
□ Resp在不同的场景下取值如下:
        □ MTE不支持时,返回fail;
        □ 支持MTE, 但是不进行match, 返回pass;
        □ 如果需要match,则按照实际是否match进行返回;

Non-Tag Match errors
□ Resp的data err/non-data err,和memory tagging特性没有关系;
□ 当resperr取值为NDERR时;
        □ Resp中的Tagop域段,无效;
        □ Snoop resp返回的状态一定是invalid;

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

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

相关文章

Flutter 之Bloc入门指南实现倒计时功能

Flutter Timer By Bloc 前言Stream.periodic实现倒计时定义Bloc状态定义Bloc事件定义Bloc组件定义View层参考资料前言 使用Bloc开发Flutter的项目,其项目结构都很简单明确,需要创建状态,创建事件,创建bloc,创建对应的View。flutter_timer项目来分析下Bloc的使用方法。 通…

逻辑回归变量系数可为负数吗?应该如何解释?

之前很多学员来问逻辑回归变量系数是否都应该为正数,如果出现负的变量系数该怎么办?是否需要重新建模?这些学员都是在网上搜索时,被错误信息误导。网上信息可以随意转载,且无人审核对错。我见过最多情况时很多文章正确…

软工导论知识框架(三)结构化的设计

一.传统软件工程方法学采用结构化设计技术(SD) 从工程管理角度结构化设计分两步: 概要设计: 将软件需求转化为数据结构和软件系统结构。详细设计:过程设计,通过对结构细化,得到软件详细数据结构…

dubbo-helloworld示例

1、工程架构 2、创建模块 &#xff08;1&#xff09;创建父工程,引入公共依赖 pom.xml依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></depende…

MultipartFile 获取文件名、文件前缀、文件后缀、文件类型

测试 debug 方法 RequestMapping(value "/test",method RequestMethod.POST)public void fileUpload(MultipartFile file){// 文件名String originalFilename file.getOriginalFilename();// 文件名前缀String fileName file.getOriginalFilename().substring(0,…

第5讲:VBA中OFFSET函数的利用

【分享成果&#xff0c;随喜正能量】幸福从来不是跟别人比来的&#xff0c;追求不同&#xff0c;各有活法&#xff0c;开心了就笑&#xff0c;累了就休息&#xff0c;日子安稳踏实就是最大的幸福。做人就怕尊严扫地&#xff0c;保留一点做人的尊严&#xff0c;是人生最大的本钱…

C语言每日一题

今天分享的是一道牛客网上面的题目&#xff0c;链接在下面 有序序列合并 这道题做法有很多&#xff0c;最简单的是合并一起&#xff0c;然后用排序就行了&#xff0c;今天将一个最高效的办法&#xff0c;思路是两个数组第一项进行比较&#xff0c;小的先输出&#xff0c;输出的…

Mac上命令

1. block端口&#xff1a; sudo cp /etc/pf.conf /etc/pf443.conf 编辑pf443.conf&#xff0c;vim /etc/pf443.conf&#xff0c;如 block on en0 proto udp from any to any port 9000 # block UDP port 9000 block on en0 proto tcp from any to any port 5004 # bloc…

InnoDB引擎底层逻辑讲解——后台线程

1.后台线程 后台线程的作用就是将innodb存储引擎缓冲池中的数据&#xff0c;在合适的时机刷新到磁盘文件当中。innodb存储引擎后台的线程主要分为四类&#xff1a;

Golang之路---02 基础语法——函数

函数 函数定义 func function_name( [parameter list] ) [return_types] {函数体 }参数解释&#xff1a; func&#xff1a;函数由 func 开始声明function_name&#xff1a;函数名称&#xff0c;函数名和参数列表一起构成了函数签名。[parameter list]&#xff1a;参数列表&a…

Istio 安全 mTLS认证 PeerAuthentication

这里定义了访问www.ck8s.com可以使用http也可以使用https访问&#xff0c;两种方式都可以访问。 那么是否可以强制使用mtls方式去访问&#xff1f; mTLS认证 PeerAuthentication PeerAuthentication的主要作用是别人在和网格里的pod进行通信的时候&#xff0c;是否要求mTLS mTL…

信息学奥赛一本通——1258:【例9.2】数字金字塔

文章目录 题目【题目描述】【输入】【输出】【输入样例】【输出样例】 AC代码 题目 【题目描述】 观察下面的数字金字塔。写一个程序查找从最高点到底部任意处结束的路径&#xff0c;使路径经过数字的和最大。每一步可以从当前点走到左下方的点也可以到达右下方的点。 在上面…

web前端开发工程师岗位的主要职责八篇

web前端开发工程师岗位的主要职责1 职责&#xff1a; 1、负责web前端系统和功能的开发、调试和维护&#xff0c;前端技术框架和js等互动效果开发; 2、负责公司现有项目和新项目的前端修改调试和开发工作; 3、根据工作安排高效、高质地完成代码编写&#xff0c;确保符合规范…

计算机视觉(六)图像分类

文章目录 常见的CNNAlexnet1乘1的卷积 VGG网络Googlenet&#xff08;Inception V1、V2、V3&#xff09;全局平均池化总结 Resnet、ResnextResNet残差网络ResNeXt网络 应用案例VGGResnet 常见的CNN Alexnet DNN深度学习革命的开始 沿着窗口进行归一化。 1乘1的卷积 VGG网络…

45.ubuntu Linux系统安装教程

目录 一、安装Vmware 二、Linux系统的安装 今天开始了新的学习&#xff0c;Linux,下面是今天学习的内容。 一、安装Vmware 这里是在 Vmware 虚拟机中安装 linux 系统&#xff0c;所以需要先安装 vmware 软件&#xff0c;然 后再安装 Linux 系统。 所需安装文件&#xff1a;…

Blueprint —— 蓝图通信

在使用蓝图时&#xff0c;如需在不同蓝图间传递或共享信息&#xff0c;此时就需要使用蓝图通信&#xff08;Blueprint Communication&#xff09;&#xff1b; 一&#xff0c;变量引用 创建变量&#xff0c;类型为指定对象的引用&#xff0c;默认值设置为指定对象的实例&#x…

多线程(JavaEE初阶系列7)

目录 前言&#xff1a; 1.常见的锁策略 1.1乐观锁和悲观锁 1.2轻量级锁和重量级锁 1.3自旋锁和挂起等待锁 1.4互斥锁与读写锁 1.5可重入锁与不可重入锁 1.6公平锁与非公平锁 2.CAS 2.1什么是CAS 2.2自旋锁的实现 2.3原子类 3.synchronized 3.1synchronized的原理以…

探秘二叉树后序遍历:从叶子到根的深度之旅

本篇博客会讲解力扣“145. 二叉树的后序遍历”的解题思路&#xff0c;这是题目链接。 本题的思路是&#xff1a; 先创建一个数组&#xff0c;用来存储二叉树后序遍历的结果。数组的大小跟树的结点个数有关。树的结点个数可以使用递归实现&#xff0c;即总个数左子树结点个数右…

踩坑(5)整合kafka 报错 java.net.UnknownHostException: 不知道这样的主机

java.net.UnknownHostException: 不知道这样的主机。 (5c0c3c629db9)at java.base/java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) ~[na:na]at java.base/java.net.InetAddress$PlatformNameService.lookupAllHostAddr(InetAddress.java:933) ~[na:na]at java.ba…

windows如何上架ios应用到app store

Application Uploader iOS App上架工具是一款非常好用的针对iOS苹果应用程序软件开发的实用编程工具&#xff0c;它的主要作用是帮助用户进行快速的程序应用设计和程序应用调试&#xff0c;节省用户进行软件开发耗费的不必要时间&#xff01; ​ 编辑切换为居中 添加图片注释&…