rdma rxe ack超时处理原理

在rxe_req.c文件:

在int rxe_requester(void *arg)发包函数的最后会调用update_state函数,触发retrans_timer定时器

static void update_state(struct rxe_qp *qp, struct rxe_send_wqe *wqe,
			 struct rxe_pkt_info *pkt, int payload)
{
	qp->req.opcode = pkt->opcode;

	if (pkt->mask & RXE_END_MASK)
		qp->req.wqe_index = queue_next_index(qp->sq.queue,
						     qp->req.wqe_index);

	qp->need_req_skb = 0;

	if (qp->qp_timeout_jiffies && !timer_pending(&qp->retrans_timer))
		mod_timer(&qp->retrans_timer,
			  jiffies + qp->qp_timeout_jiffies);
}

所以,retransmit_timer函数会被执行

void retransmit_timer(struct timer_list *t)
{
	struct rxe_qp *qp = from_timer(qp, t, retrans_timer);

	if (qp->valid) {
		qp->comp.timeout = 1;
		rxe_run_task(&qp->comp.task, 1);
	}
}

从而,在定时器到期以后会调度到rxe_completer函数,
然后从skb队列里取出skb包,如果超时取出的skb为NULL,说明定时器到期以后,还没有ack过来,
那么state的变化为COMPST_GET_WQE->COMPST_EXIT->COMPST_ERROR_RETRY->COMPST_ERROR_RETRY,
然后设置qp->req.need_retry = 1;并启动rxe_run_task(&qp->req.task, 0);
到了req的调度以后,
该条件成立,最后通过req_retry函数重发数据包。

	if (unlikely(qp->req.need_retry)) {
		req_retry(qp);
		qp->req.need_retry = 0;
	}

对于timer_pending做了一个测试,注意看打印。

struct timer_list mytimer;
int i = 0;
//定时器超时处理函数
static void mytimer_handle(struct timer_list *t)
{
        printk("The timer has happened %d times!\n", i);
		if(timer_pending(&mytimer))
			printk("timer_pending true!\n");
        //这里需要说明的是,定时器在超时后会自动在系统中删除,也就是说如果定义了一个1s后执行的定时器
        //1s后定时器到期后将会在系统中删除,无法完成周期性的定时任务;
        //如果想要周期性执行,需要在超时处理函数中再次修改下定时器到期时间;
//      mod_timer(&mytimer, jiffies + HZ);
        i++;
        mod_timer(&mytimer, jiffies+HZ);
		
		if(timer_pending(&mytimer))
			printk("timer_pending true! 11\n");
}

static int __init hello_init(void)
{
        printk("mytimer init!!\n");
        timer_setup(&mytimer, mytimer_handle, 0);//(1)初始化定时器mytimer,并设置超时处理函数
		if(timer_pending(&mytimer))
			printk("timer_pending false!\n");
        //mytimer.expires = jiffies + HZ;//(2)设置超时时间,1s
        //add_timer(&mytimer);//(3)将定时器mytimer添加到系统中
        mod_timer(&mytimer, jiffies+HZ);
				if(timer_pending(&mytimer))
			printk("timer_pending false 11!\n");
        return 0;
}

static void hello_exit(void)
{
        printk("mytimer exit!!\n");
        del_timer(&mytimer);//(4)退出时删除定时器
}

MODULE_AUTHOR("Tan xujia");
MODULE_LICENSE("Dual BSD/GPL");

module_init(hello_init);
module_exit(hello_exit);
# SPDX-License-Identifier: GPL-2.0
obj-m += vmax.o

vmax-objs := \
	vma.o 
	
all:
	make -C /usr/src/linux-headers-$(shell uname -r) M=$(shell pwd) modules
clean:
	make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) clean

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章 RDMA背景简介 ............................................. 5 第2章 哪些网络协议支持RDMA ..................................... 8 2.1 InfiniBand(IB)........................................... 8 2.2 RDMA过融合以太网(RoCE)................................... 8 2.3 互联网广域RDMA协议(iWARP)................................ 8 第3章 RDMA技术优势 ............................................. 9 第4章 RDMA有哪些不同实现 ...................................... 10 第5章 RDMA有哪些标准组织 ...................................... 14 第6章 应用和RNIC传输接口层 .................................... 18 6.1 内存Verbs(Memory Verbs)............................... 19 6.2 消息Verbs(Messaging Verbs)............................ 20 第7章 RDMA传输分类方式 ........................................ 20 7.1 RDMA原语................................................ 21 7.2 RDMA 队列对(QP)....................................... 23 7.3 RDMA完成事件............................................ 23 7.4 RDMA传输类型............................................ 24 7.5 RDMA双边操作解析........................................ 26 7.6 RDMA单边操作解析........................................ 27 7.7 RDMA技术简单总结........................................ 27 第8章 InfiniBand技术和协议架构分析 ............................ 29 8.1 InfiniBand技术的发展.................................... 29 8.2 InfiniBand技术的优势.................................... 30 8.3 InfiniBand基本概念...................................... 32 8.4 InfiniBand协议简介...................................... 33 8.4.1 物理层 ............................................ 34 8.4.2 链路层 ............................................ 34 8.4.3 网络层 ............................................ 34 8.4.4 传输层 ............................................ 35 8.4.5 上层协议 .......................................... 35 8.5 IB应用场景.............................................. 36 第9章 InfiniBand主流厂商和产品分析 ............................ 37 9.1 InfiniBand网络和拓扑.................................... 38 9.2 软件协议栈OFED.......................................... 42 9.3 InfiniBand网络管理...................................... 43 9.4 并行计算集群能力........................................ 44 9.5 基于socket网络应用能力.................................. 45 9.6 存储支持能力............................................ 45 9.7 Mellanox产品介绍........................................ 46 9.8 Infiniband交换机........................................ 48 9.9 InfiniBand适配器........................................ 51 9.10 Infiniband路由器和网关设备............................. 52 9.11 Infiniband线缆和收发器................................. 53 9.12 InfiniBand主要构件总结................................. 54 9.13 InfiniBand对现有应用的支持和ULPs支持................... 55 第10章 RDMA over TCP(iWARP)协议和工作原理 ..................... 56 10.1 RDMA相关简介........................................... 57 10.2 RDMA工作原理........................................... 59 10.3 RDMA 操作类型.......................................... 61 10.4 RDMA over TCP详解...................................... 61 10.5 RDMA标准组织............................................ 7 第11章 RoCE(RDMA over Converged Ethernet)原理 ............... 65 第12章 不同RDMA技术的比较 ..................................... 67 12.1 IB和TCP、Ethernet比较.................................. 69 12.2 RoCE和InfiniBand比较................................... 70 12.3 RoCE和IB协议的技术区别................................. 71 12.4 RoCE和iWARP的区别...................................... 71 第13章 Intel Omni-Path和InfiniBand对比分析 .................... 72 13.1 Intel True Scale Fabric介绍............................ 73 13.2 Intel True Scale InfiniBand产品........................ 74 13.3 Intel Omni-Path产品.................................... 76 第14章 RDMA关键技术延伸 ....................................... 80 14.1 RDMA指令的选择......................................... 80 14.2 慎用atomic类指令....................................... 81 14.3 减少交互次数........................................... 82 14.3.1 Wr 聚合 .......................................... 82 14.3.2 SGE 聚合 ......................................... 82 14.3.3 使用imm数据 ...................................... 83 14.3.4 使用inline数据 ................................... 83 14.3.5 CQE中使用inline数据 .............................. 83 14.3.6 WC聚合 ........................................... 84 14.4 运行模式选择........................................... 84 14.4.1 连接的模式 ....................................... 84 14.4.2 运行模式 ......................................... 85 14.5 性能与并发............................................. 86 14.6 避免CPU缓存抖动........................................ 87 14.7 避免芯片内部的缓存Miss................................. 87 14.8 时延的隐藏............................................. 88 14.8.1 利用Prefetch预取指令 ............................. 88 14.8.2 异步交互操作优先 ................................. 88 14.9 RDMA性能分析........................................... 89

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值