声明:
博主主页:王_嘻嘻的CSDN主页
未经作者允许,禁止转载
本专题部分内容源于《InfiniBand-network architecture》,侵权必删
本章将介绍IB协议中传输请求中的原子操作,并解释原子操作存在的意义以及IB协议中原子操作的具体类型与流程。
原子(atomic),在信息领域中指的就是不可分割的操作,不会因为线程调度被打断的操作。在IB协议中,原子操作指:如果一个处理器必须对特定的内存区域(例如,一个数据结构)执行一系列的两次或两次以上的访问,需确保在该处理器的一系列访问完成之前没有其他处理器访问同一内存。
通过这种方式,原子操作的任务已经为自己保留了资源,然后可以启动一系列数据结构访问,而不必担心另一个任务成功访问该数据结构。
假设系统中不存在原子操作:
出现上述问题将导致整个系统陷入糟糕的状态,这不是设计人员希望看到的。
如果处理器A能够执行内存读、值测试和寄存器中的设置,以及作为原子的、不可分割的操作的内存写,并确保在原子系列访问(在本例中,是内存读和内存写)完成之前没有其他实体访问同一内存区域,那么这种情况是可以避免的。
为了解决上述问题,IB协议提供了两种原子操作:
原子操作由请求和Ack包组成,一个由请求方QP的SQ逻辑发出的原子请求包和一个由响应方QP的RQ逻辑返回的原子确认包,但是这两个数据包都不包含数据有效负载字段。操作所需的数据项在报文的AtomicETH字段中携带,AtomicETH字段包含:
IB协议规定了在接收到原子请求包时,响应端QP的RQ将其发布到特定于设备的队列中,(由硬件,而不是软件来执行),在内存读写之间的时间间隔内,CA必须阻止同一CA上的其他QP访问同一位置。
以fetch and add操作为例,具体流程如下图:
Compare and Swap操作与fetch and add操作类似,在此就不再详细描述。
搜索关注我的公众号【IC墨鱼仔】,获取我的更多IC干货分享!