地址边界与地址对齐

数据传输是基于地址进行的。在分析和设计微架构时,除了地址域之外,如何选择地址信号,我觉得也是值得注意的问题。
地址边界还记得刚开始工作时,被安排维护axi总线重排序的公共模块,当时有一个地址对齐的概念,如64byte地址边界、128byte或者256byte地址边界,那会花了有一段时间才搞清楚,但也仅仅是搞清楚,也不清楚引入这一概念的原因,能解决哪些问题。
所谓地址边界,若某地址能够被一整数除净,该地址就称为整数对应的地址边界。在系统内都是以0/1的二进制,这一整数一般指的是2的幂次方,如4、8、16、64、128等等。举例来说,0x200, 0x240, 0x880等等都是64byte地址边界;0x200,0x880是128byte地址边界,但0x240不是128byte地址边界。再谈谈cacheline的概念。为提升系统访问内存的速度,通常会引入缓存cache,也就是将memory的内容先搬运到cpu附近。这一缓存是以块为单位的,需要访问时,则先将对应的缓存块搬运到cache内。这一缓存块就称为cacheline,是缓存cahe管理的最小单位,可基于系统需求选择大小,如64byte或128byte,甚至是4kbyte。每个cacheline,除了存储其本身的数据之外,还需要记录其地址、是否修改等等额外信息。粒度越小,记录额外信息的资源占比越大;粒度大了,又会对数据的利用率下降;具体大小则需基于需求来确定,如对于ai/gpu计算,可考虑使用4kbyte的caheline。
地址对齐在考虑微架构设计和软硬件接口时,访问memory尽可能按照整块地址的访问,地址边界对齐,尤其是写操作。在一般的cpu计算机系统,采用的地址边界大小至少为64byte,使用更大的区间,如128byte/256byt,在一些场景也是能够带来收益的。
数据总线利用率系统互联总线的位宽较大,如128、256、512bit,甚至2048bit。但是,每一拍数据的地址并不是随机,而必须基于一定规则排列,参考axi协议,如256bits的数据位宽,其地址低位必须是0-31。传输32byte数据,若起始地址为32byte边界对齐,1拍可以传输完成,利用率为100%,否则需要占用2拍,其利用率只有50%。
对于pcie数据传输来说,其数据长度单位为dw,即4byte,因此由于地址边界不对齐带来的影响比较小。
full/partial write系统存在cacheline的定义,若访问操作为整cacheline的写操作,则称为full write,否则为partial write。举例,cacheline为64byte,若访问地址低6位为0,长度为64byte,就是full write;低6位不为0,或长度不为64byte整数倍,则存在partial操作。非地址对齐的访问操作,容易造成partial write,引入性能问题。
read-modify-write对于cache、ddr,或者其余类似的memory系统,存在最小操作粒度的概念。若写访问操作小于该最小操作粒度,则需要引入read-modify-write。将对应地址的数据块读取出来,进行修改,再将数据写入对应地址,需要占用读通道的带宽。对于地址对齐的整块访问,直接写入即可。
dma的地址选择host与pcie device之间大量数据的传输,基本都是由dma(direct memory access)完成的。简单来说,dma就是从一个地址(源地址)读取连续的数据,再写入到另一个地址(目的地址)。硬件逻辑提供源地址、目的地址和搬运长度的软件编程接口,再被软件进行调用。复杂一些的硬件实现,还可以支持描述符、链表、搬运方式配置和其余系统属性的配置等等特性,如支持完成中断。
至于对数据搬运的地址选择,则是由调用dma的软件进行控制的,但是也会受到上下游模块的约束,如device侧的硬件引擎模块等等。
在考虑dma数据流时,需基于系统层面对各模块的数据访问需求进行设计,尽可能使得dma在host和device之间的数据搬运是地址边界对齐的。这一对齐包含两个方面,一是访问device/host的读写访问是基于地址边界对齐,二是源地址和目的地址的低位是相等的。两者其实是类似的,没有满足后者,也会引入大量的非地址对齐的操作。至于后者的地址低位,则需基于硬件实现进行考虑,考虑点就是上面描述的几点要素。
再来看看第二方面引入的逻辑复杂度,源地址和目的地址的低位相等。考虑源和目的方向使用了amba总线,数据位宽为512bit/64byte,若需支持地址不对齐的场景,则需要512个64bit位宽的mux;若仅需支持地址的低6bit相等,则完全不需要进行移位处理;若仅需支持地址的低2bit性能,硬件逻辑规模也减小为512个16bit位宽的mux。大量的mux逻辑也容易引入congestion风险,需要做额外的优化处理。
结语地址对齐的概念非常简单,但容易被忽略。对于软件人员来说,dma就是应该支持任意地址到任意地址的数据搬运;但对硬件设计来说,可能需要付出很大的代价才能达成要求。可以考虑做一些折衷,软件做一些简单修改,使用地址对齐的数据搬运,硬件实现侧对地址对齐的操作进行尽量的优化,而对非地址对齐的做一些简化处理,不考虑性能但满足功能,达到较优的ppa。

环磁环电感供应商科普形磁环电感电感量如何选择
蔚来ET7让我们充分见识到了蔚来在自动驾驶上的野心
Edwards在北京国际真空展上展示其维护间隔长且易维护的产品
基于区块链技术的AMUSE文化艺术产业平台介绍
Marvell与亚马逊云科技宣布“云优先”芯片设计合作
地址边界与地址对齐
有毒气体检测仪的主要功能是什么?
一文分析2020年中国锂电池的市场现状及产业链
龙芯、海光、鲲鹏这些国产CPU,技术消化吸收完成了吗?
Nvidia Jetson Nano是否会取代树莓派
全球首个5G五星购物中心即将到来
无人机给大家生活带来什么改变?3D立体无人机编队再超想象
CPU的外部时钟电路和其外接晶振,作用是一样的吗?
三款大众电动车有何区别 性能续航有何不同
马斯克宣布特斯拉地图年初完成软件升级
基于LM358的红外接近传感器电路
谁可以指定物联网领域的行业标准
USB的传送速率是多少?
分析电能线损的方法有哪七种?
Five9协助国际医疗器械企业在48小时内迁移到云端