自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

redwingz的博客

Linux内核网络、虚拟化

原创 Scalable TCP拥塞算法

Scalable TCP(STCP)拥塞控制算法,在每个RTT周期内,如果没有发生拥塞,将在接收到每个ACK报文后,将拥塞窗口增加0.01(a值)。 cwnd = cwnd + 0.01 如果在一个RTT周期内第一次检测到拥塞发生,将拥塞窗口减低1/8倍(b值),在同一个RTT周期仅降低一次拥...

2020-05-30 23:52:47 150 0

原创 DPDK在testpmd中修改队列数量

一是可以在启动testpmd时,通过命令参数txq和rxq分别制定发送和接收队列的数量。 # ./build/app/testpmd -l 0-3 -n 4 -- -i --txq=8 --rxq=8 ... testpmd> show port info all Driver nam...

2020-05-28 19:45:14 437 0

原创 使用DPDK应用示例l2fwd进行性能测试

系统环境,处理器为:Intel® Core™ i7-4790K CPU @ 4.00GHz。 # cat /etc/issue Ubuntu 20.04 LTS \n \l # # uname -a Linux flyingshark 5.4.0-31-generic #35-Ubuntu S...

2020-05-26 20:46:55 669 0

原创 TCP-BIC Binary Increase Congestion算法

具体算法参见文档:Binary Increase Congestion Control for Fast,Long Distance Networks。 BIC预设参数 fast_convergence - 是否启用快速收敛。启用的话将会修正选择的最大拥塞窗口,尽快达到合理的窗口值。 low_wi...

2020-05-25 23:41:23 141 0

原创 SlowStart阶段拥塞窗口增长

慢启动阶段的拥塞窗口增长函数tcp_slow_start如下,拥塞窗口以报文数量表示,参数acked表示当前ACK报文确认的数据包数量。如果拥塞窗口增加acked数量之后小于慢启动阈值ssthresh,使用二者相加结果作为新的拥塞窗口值。内核没有使用RFC3465中定义的ABC(Appropria...

2020-05-20 23:42:48 142 0

原创 TCP快速恢复算法PRR

PRR算法(Proportional Rate Reduction)决定在丢包恢复(Loss Recovery)期间,对应于每个ACK报文,可发送的报文数量。目的是:1)快速平稳的从Loss中恢复;2)恢复之后拥塞窗口收敛与ssthresh。主要是为了解决Linux内核之前采用的恢复算法Rate-...

2020-05-19 22:57:32 337 0

原创 TCP混合慢启动

混合慢启动(Hybrid Slow Start)使用二个信息来决定SlowStart阶段到拥塞避免阶段(Congestion Avoidance)的转换,一是ACK Train的长度;二是报文延迟的增长。ACK Train的长度为在一个RTT周期内,紧密相邻的ACK报文到达的时间间隔之和,内核默认...

2020-05-18 22:42:20 369 2

原创 忽略设置linkdown标志的路由表项

遇到一个路由转发问题,如下路由表,在ens40网卡链路断开的时候,目的地址为192.168.3.0/24网段的报文,还是走ens40网卡,而不是默认路由,导致报文被丢弃。 $ ip route default via 192.168.9.1 dev ens39 192.168.3.0/24 de...

2020-05-17 22:32:40 344 0

原创 TCP传输速率估算

如下公式,带宽取值为计算得出的数据发送速率与接收ACK速率两者之间的较小值。通常情况下,发送速率(send_rate)将大于ACK接收速率(ack_rate),但是,在面对ACK压缩等的情况下,将导致ACK接收速率意外的增大,此时,带宽应选取发送速率(send_rate)。 send_ra...

2020-05-13 23:22:10 898 0

原创 RACK与重复ACK

默认情况下sysctl_tcp_recovery的值为1(TCP_RACK_LOSS_DETECTION),也可通过PROC文件:/proc/sys/net/ipv4/tcp_recovery进行修改,如果设置了标志位TCP_RACK_NO_DUPTHRESH,表明RACK不使用重复ACK阈值(D...

2020-05-11 20:45:25 148 0

原创 Reno报文乱序与快速重传

基础内容参见上一篇: SACK报文乱序级别reordering Reno乱序调整 首先看一下,在Reno算法中,对重复ACK数量的修正。如果sacked_out表示的DupAck数量与丢失报文数量之和,大于发出去的总报文数量,可能是因为网络自身的报文复制所导致,包括对数据报文的复制或者对ACK报文...

2020-05-09 23:28:59 130 0

原创 SACK报文乱序级别reordering

内核默认的初始乱序级别为TCP_FASTRETRANS_THRESH(3),最大值为300。即当接收到三个重复ACK报文时,触发快速重传。 #define TCP_FASTRETRANS_THRESH 3 static int __net_init tcp_sk_init(struct net ...

2020-05-08 20:45:30 186 0

原创 TCP套接口丢失与重传报文线索

TCP套接口丢失与重传报文线索由变量lost_skb_hint与retransmit_skb_hint所表示。 丢失报文线索 变量lost_skb_hint记录重传队列中上一次标记丢失报文的位置,其自身对应的skb不一定为丢失报文,也可能是SACK确认报文。如下函数tcp_mark_head_lo...

2020-05-06 20:54:32 197 0

原创 TCP回撤拥塞状态

由于网络路径的变化或者延时的突然增加等,引发乱序并触发快速恢复或者RTO超时,TCP将进入TCP_CA_Recovery或者TCP_CA_Loss拥塞状态,如果随后检测到报文并没有丢失,TCP将撤销拥塞状态,恢复到之前的拥塞状态。 拥塞撤销初始化 其一,在进入快速恢复阶段时,不管是基于Reno或者...

2020-05-02 21:35:50 198 0

原创 时间排序的SACK未确认报文链表

内核实现的时间排序的未确认报文链表(time-sorted sent but un-SACKed skbs),用于加速RACK算法的处理。 tsorted链表初始化 首先是位于套接口的初始化函数tcp_init_sock中,初始化此链表tsorted_sent_queue。 void tcp_in...

2020-05-01 23:53:32 131 0

提示
确定要删除当前文章?
取消 删除