- 博客(627)
- 收藏
- 关注
原创 linux scatterlist阅读二
page_link ,offset,length的值,其中page_link 保存的是经过转换以后的物理地址,在使用sg_init_one函数的例子当中,buf传入的是内核虚拟地址。可以看到这个函数的作用就是将sgl起始地址的一段空间清零,然后设置最后一个元素的page_link 值,由于是最后一个元素,所以page_link 的第一个bit被设置为1。而像dma_length,dma_address一类成员的值的设置就要使用dma相关的函数去设置了,设置以后,记录的就是设备认识的dma地址了。
2023-07-22 17:51:45
387
原创 linux内核自旋锁理解总结
比如一开始是禁止了中断,然后调用spin_lock_irq和spin_unlock_irq,在调用spin_unlock_irq结束后会开启中断,本来一开始是禁止中断的,但是最后开启了中断,这显然是不对的。主要是spin_lock_irq和spin_lock_irqsave的区别理解,,一个会记住在调用函数时中断是否使能,
2023-05-21 21:12:59
114
原创 rdma rxe驱动ack包状态机解析
如果收到了ack包就会进行一系列的处理,如下,红色的代表走的是正常逻辑。文件:rxe_comp.c的rxe_completer函数。
2023-04-19 19:03:18
336
原创 rdma IBV_SEND_FENCE标记位理解
qp->req.wait_fence设置为1,然后返回NULL,所以rxe_requester函数直接退出了,不会进行这个wqe的处理,那么什么时候可以处理呢?只有等到这个设置了IBV_SEND_FENCE标记位的上一个wqe收到了最后一个ack以后,才会对当前设置了IBV_SEND_FENCE标记位的wqe进行处理。在rxe_comp.c里do_complete函数的最后有相应的设置,并且在设置之前,已经产生了cqe,即ack已经得到了相应的处理。在函数的最后有个判断,参考rxe驱动代码,
2023-04-18 18:57:36
844
原创 rdma rxe ack超时处理原理
那么state的变化为COMPST_GET_WQE->COMPST_EXIT->COMPST_ERROR_RETRY->COMPST_ERROR_RETRY,在int rxe_requester(void *arg)发包函数的最后会调用update_state函数,触发retrans_timer定时器。然后从skb队列里取出skb包,如果超时取出的skb为NULL,说明定时器到期以后,还没有ack过来,从而,在定时器到期以后会调度到rxe_completer函数,到了req的调度以后,
2023-04-17 19:22:26
347
原创 rdma cq的同步事件通知机制
调度会调用到rxe_send_complete函数,通过cq->ibcq.comp_handler(&cq->ibcq, cq->ibcq.cq_context);使用例程:https://www.rdmamojo.com/2013/03/16/ibv_ack_cq_events/我想,如果不调用ibv_ack_cq_events的话,在销毁cq时,应该是会阻塞的,可以自己写代码验证下。这个时候,ibv_get_cq_event函数的read就会返回,ibv_req_notify_cq函数要重复的调用。
2023-04-11 16:17:43
998
原创 rdma ack包 Syndrome字段含义总结
5,6bit为11表示这是一个NAK包,01表示RNR NAK包,00是正常情况,代表正确的收到了一个ack包。在rxe的驱动代码里,体现在rxe_comp.c文件的check_ack函数里。NAK包又细分为以下几种情况,以0-4bit代表不同的情况。该字段占一个字节,最高位(7bit)是保留的。
2023-04-04 18:51:48
753
原创 rdma max_dest_rd_atomic和max_rd_atomic字段含义总结
首先是max_rd_atomic字段,如果发送端要发起read或者atomic操作,那么这个字段通常要设置为1,如果设置为0,那么即使你发起了read或者atomic操作也是不起作用的,而对于发送端来说max_dest_rd_atomic字段可以设置为0(当然,条件是它此时不会做为接收端来接收read请求或者atomic请求),max_rd_atomic字段设置为1,就说明它只能处理一次读请求或者原子请求么?所以一般给1就可以。
2023-03-30 19:00:23
331
原创 rdma struct ibv_qp_attr属性timeout,retry_cnt,rnr_retry等字段含义。
没有收到ack,此时由于将接收端的发送函数注释了,所以不会收到ack包,由于此时将timeout设置为0,所以不会将数据进行重新发送。含义:远程QP在报告错误之前发送RNR NACK时,QP将尝试重发数据包的总次数7为特殊值,表示在RNR情况下重试无限次。这个值是对端给你回复nack包时,你要重新发送数据包的次数,那我们可以模拟一下对端回复nack的情况。驱动底下是用一个3bit的值表示的,所以最大的值可以给7,给7的意思是重新发送无限次。含义:远端没有应答而报告错误之前,QP将尝试重发数据包的总次数。
2023-03-28 17:29:09
1210
原创 RDMA IBV_SEND_INLINE和IBV_SEND_SIGNALED区别
IBV_SEND_SIGNALED 和 IBV_SEND_INLINE 区别
2023-02-10 19:22:24
296
原创 关于IBV_WR_RDMA_WRITE_WITH_IMM的理解
对于IBV_WC_RECV_RDMA_WITH_IMM的描述是这样的,也就是说并不需要sge,所以下发的sge,可以是NULL,个数可以是0。(1)需要下发post_recv,但是下发是post_recv当中的sge的地址可以是空,sge个数可以是0。伪代码,实际的rkey和addr已经通过socket交换。并且poll_cq时,有返回,在这篇文章当中对于poll_cq时,主要区别点有两个,这个是对于接收端而言。(2)可以带即时数据,
2022-12-13 11:34:56
1420
原创 __attribute__((alias(__stringify(A))));备忘
__attribute__((alias(__stringify(A))));备忘。
2022-11-30 15:17:35
361
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
3