自定义博客皮肤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内核网络、虚拟化

原创 邻居表的proxy_qlen长度和proxy_delay延时参数

proxy_qlen控制邻居代理缓存的报文数量,proxy_delay定义处理需要代理的arp报文的时间间隔。对于arp协议,内核默认的proxy_qlen为64,proxy_delay为80。 通过PROC文件proxy_qlen可查看和修改其值。 $ cat /proc/sys/net/ipv...

2020-11-24 22:52:23 40 0

原创 邻居表项的unres_qlen_bytes长度

对于每个未解析的邻居地址,变量unres_qlen和unres_qlen_bytes分别控制可换成的报文数量和报文字节数量,其中前者unres_qlen在内核linux-3.3版本已经废弃,应使用后一个变量unres_qlen_bytes,其默认值为SK_WMEM_MAX(即net.core.wm...

2020-11-19 20:04:14 44 0

原创 邻居表项的回收控制

内核中存在3个阈值控制邻居表项的回收: gc_thresh1 表示最小可保留的表项数量,如果表项数量小于此值GC(Garbage collector)不进行回收操作,默认为128; gc_thresh2 当表项数量超过此值时,GC将会清空大于5秒的表项,默认为512; gc_thresh3 ...

2020-11-14 07:08:35 49 0

原创 邻居表项的retrans_time时长

retrans_time控制在发送过邻居地址探测报文之后,经过多长时间检测邻居表项的变化,如果检测不成功,进行重新探测,对于arp协议,内核默认的retrans_time为1秒钟。 通过PROC文件retrans_time可查看和修改其值,单位时USR_HZ(100),PROC文件的内容为毫秒值,...

2020-11-12 20:15:49 26 0

原创 邻居表项的ucast_solicit数量

ucast_solicit控制使用单播发送邻居地址探测报文的次数,对于arp协议,内核默认的ucast_solicit为3。 通过PROC文件app_solicit可查看和修改其值,如下,修改为1。 $ cat /proc/sys/net/ipv4/neigh/ens33/ucast_solici...

2020-11-10 20:35:31 32 0

原创 邻居表项的mcast_solicit数量

mcast_solicit和mcast_resolicit控制使用多播发送邻居地址探测报文的次数,对于arp协议,内核默认的mcast_solicit为3。 通过PROC文件app_solicit可查看和修改其值,如下,修改为1。 $ cat /proc/sys/net/ipv4/neigh/en...

2020-11-05 22:24:44 40 2

原创 邻居表项的app_solicit数量

app_solicit控制上层应用发送邻居地址探测报文的数量,对于arp协议,内核默认的app_solicit为零,在arp邻居表arp_tbl中没有对NEIGH_VAR_APP_PROBES索引所对应的表项赋值,即将app_solict对于的值设置为了零,如果上层应用可完成地址探测,可将app_...

2020-11-04 23:03:10 31 0

原创 邻居表项的delay_probe_time时长

delay_probe_time控制首次发送邻居请求报文的等待时长,对于arp协议,内核默认的delay_probe_time时长为5秒钟。 struct neigh_table arp_tbl = { .family = AF_INET, .key_len = 4,...

2020-11-03 22:39:41 49 1

原创 GARP(Gratuitous ARP)

内核函数arp_is_garp判断ARP报文是否为GARP,先决条件是发送者IP和目标IP地址相同,另外,对于ARP回复(REPLAY)报文,要求如果目标硬件地址存在,需要与发送者硬件地址相等。最后,要求ARP报文的发送者IP为单播地址,否则,判定报文不是garp。 static bool arp...

2020-10-29 20:30:47 39 0

原创 邻居表项的locktime时长

如果内核在locktime时间内接收到多个ARP报文,仅首个报文生效。对于arp协议,内核默认的locktime时长为1秒钟,可通过PROC文件或者ip命令进行修改。 struct neigh_table arp_tbl = { .family = AF_INET, .ke...

2020-10-28 20:31:30 38 0

原创 邻居表项的STALE状态超时时间

对于arp协议,内核默认的STALE状态超时时长为60秒钟。 struct neigh_table arp_tbl = { .family = AF_INET, .key_len = 4, .protocol = cpu_to_be16(ETH_P_IP)...

2020-10-21 19:36:45 78 0

原创 内核的中断分布

对于x86架构,定义位于arch/x86/include/asm/irq_vectors.h文件中,linux每可使用的有256个IDT(Interrupt Descriptor Table)表项,64位架构每个CPU有一个IDT表,32位架构共享一个IDT表,其分布如下: * Vectors...

2020-10-20 20:06:06 46 0

原创 FQ队列detached流管理

对于FQ中的流结构,如果其没有任何要发送的报文,即其为空,将其设置为detached状态,这样的流结构即不在new_flow链表,也不在old_flow链表。在detach设置函数中,不仅将其next指向固定的地址(静态变量detached的地址),而且,记录下其进入detached状态的时间戳。...

2020-10-19 20:23:30 27 0

原创 FQ队列throttled流管理

FQ队列中对发送时间未到的流结构单独存放在delayed红黑树中,这样的流结构即不在new_flow链表,也不在old_flow链表,其next指针执行一个特定的值:throttled。内核函数通过检查流结构的next指针,来判断流是否处于throttled状态。 new_flow链表中的流结构的...

2020-10-17 23:06:18 33 0

原创 X710网卡接收丢包

通过ethtool命令看到是rx_dropped一项有数值。 / # ethtool -S eth0 | more NIC statistics: rx_packets: 88037562 tx_packets: 66028257 rx_bytes: 74611539...

2020-10-16 21:30:43 85 0

原创 使用git sendmail发送补丁

这里使用iproute2工程为例,以下命令安装git-email工具。 $ sudo apt-get install git-email iproute2当前版本是5.8.0,其中文件tc/q_fq.c中有一处笔误。修改完成之后,使用如下命令生成patch文件: $ git format-pat...

2020-10-14 21:09:35 26 0

原创 FQ队列对quantum的处理

quantum 表示每次出队列轮询的信用值(credit),例如,每个流每次可允许出队列的字节数量。此值设置的较大意味值下一个流等待服务的时间更长,默认为2倍的接口MTU值。 static int fq_init(struct Qdisc *sch, struct nlattr *opt, str...

2020-10-12 20:09:53 36 0

原创 内核红黑树-II

还是先列一下红黑树的5个准则。 A node is either red or black 节点的颜色非红即黑 The root is black 根节点为黑色 All leaves (NULL) are black 所有的叶子(NULL)节点都为黑色 Both children of ever...

2020-09-23 20:30:48 25 0

原创 内核红黑树-I

内核中许多部分使用到红黑树,比如tcp的乱序队列out_of_order_queue,TC中fq公平队列的流表等。以下为红黑树的5个准则: A node is either red or black 节点的颜色非红即黑 The root is black 根节点为黑色 All leaves (N...

2020-09-19 06:37:35 43 0

原创 FQ队列流结构回收

在FQ队列中,如果流结构队列为空,并且超过3秒(FQ_GC_AGE)没有接收到相应的报文,系统将其进行回收,如下判断函数fq_gc_candidate。但是在每次fq_gc回收函数执行时,最大释放8个(FQ_GC_MAX)流结构。 /* limit number of collected flow...

2020-09-17 19:34:32 43 0

原创 Linux FQ队列操作

在介绍FQ入队列操作之前,先看一下流量的识别部分。 1 流量识别 对于一些协议报文,比如HSR(High-availability Seamless Redundancy)、IGMP和HDLC等,其将priority字段设置为了TC_PRIO_CONTROL,对于此类报文,FQ使用一个内部特定的流...

2020-09-12 22:51:26 81 0

原创 DPDK下X710网卡丢包

环境 - 处理器:Intel® Xeon® Gold 5122 CPU @ 3.60GHz 4核8线程 DPDK: v20.05 测试: 4对接口双向对打流量,报文长度1518字节。 发现有接口丢包,打印出来接口的统计信息,其中rte_eth_stats->imissed字段有数值,查看获取...

2020-09-10 08:15:25 262 0

原创 Linux公平队列FQ接口实现

用户层面的tc配置命令如下: $ sudo tc qdisc add dev ens38 root fq $ $ sudo tc -s qdisc show dev ens38 qdisc fq 8001: root refcnt 2 limit 10000p flow_limit 100p ...

2020-09-08 19:19:01 74 0

原创 Max-Min公平性

Max-Min公平性由Hayden在文章(Round-Robin Scheduling for Max-Min Fairness in Data Networks)中提出,旨在评估队列调度机制的公平性。 This section describes the max-min flow criteri...

2020-09-07 19:48:42 75 0

原创 Linux公平队列FQ配置

FQ (Fair Queue)是一个无类别(classless)的报文调度器,其主意用于本地产生的流量。设计为控制每个流的发送节奏(pacing)。FQ完成流的区分,并且可完成TCP层要求的发送节奏。所有的属于一个套接口的报文认为属于一个流(flow)。对于非本地生成的报文(如对于路由器设备),可...

2020-09-04 21:43:32 150 0

原创 按位实现的队列轮询算法

由于Nagle所提出的队列轮询算法,实际上是以报文为单位进行公平轮询,进而发送报文,但是没有考虑报文大小不同带来的不公平性,导致使用大报文的连接占用较多的网络带宽。来看一下为解决此问题,理想的按照比特位为单位进行的轮询算法。 首先,假设一个理论上的队列服务机制,其可以按照比特位轮询方式(bit-b...

2020-08-28 21:59:47 77 0

原创 Nagle公平队列

为保护正常行为(well-behaved)的源主机流量,免受异常(badly-behaved)主机的影响,或者是在两种流量混合的网络中,确保正常行为的主机获得优于异常主机的流量服务,在RFC970中,Nagle提出了一种公平队列。 我们假设一个高带宽的LAN通过网关(交换设备)与WAN相连,LAN...

2020-08-27 19:22:58 33 0

原创 snort3安装测试

环境为Ubuntu: $ cat /etc/issue Ubuntu 20.04 LTS \n \l 首先由github下载源码,这里使用3.0.2版本。 ~/ips$ wget https://github.com/snort3/snort3/archive/3.0.2-5.tar.gz ~/...

2020-08-19 19:37:29 250 2

原创 Linux内核Adaptive-RED实现

ARED在RED的基础上实现了最大报文标记概率max_P的自动调整,以便将平均队列长度控制在目标区间内。 1 ARED初始化 在RED初始化函数red_init中,设置ARED定时器adapt_timer用于定期执行ARED算法,定时处理函数为red_adaptative_timer。 stati...

2020-08-11 21:34:27 101 0

原创 内核文件句柄数量

涉及三个文件file-max,file-nr和nr-open。 file-max file-max定义了Linux内核可分配的最大数量的文件句柄,当检测到文件句柄耗尽时,需要增加file-max值。 / # cat /proc/sys/fs/file-max 1597700 内核函数files_...

2020-08-10 19:43:21 115 0

原创 RED硬件卸载支持

在RED参数处理的最后,调用red_offload设置RED卸载功能。 static int red_change(struct Qdisc *sch, struct nlattr *opt, struct netlink_ext_ack *extack) { ...

2020-08-06 19:35:00 103 0

原创 RED统计信息

使用TC命令查看网络设备ens40的队列统计信息,对于RED队列,显示如下,首先是RED配置参数的显示,其次,为统计信息: $ tc -d -s qdisc show dev ens40 qdisc red 8005: root refcnt 2 limit 400000b min 3000...

2020-08-06 19:11:09 60 0

原创 Linux内核RED队列实现

关于RED队列的TC配置命令,参见:RED队列tc设置。 1 RED入队列 首先计算平均队列长度qavg,参见之后函数red_calc_qavg的介绍。如果队列处于空闲状态,退出空闲状态,清空空闲开始时间戳。 static int red_enqueue(struct sk_buff *skb, ...

2020-08-05 19:41:03 101 0

原创 RED队列tc设置

如下tc命令配置RED(Random Early Detection)队列。 $ sudo tc qdisc add dev ens40 root red limit 400000 min 30000 max 100000 avpkt 1000 probability 0.02 burst 55 ...

2020-08-04 19:36:40 154 0

原创 Adaptive-RED队列

RED通过平均队列长度的增长,增加报文的随机丢弃(或标记)概率,来实现主动队列管理(AQM)。当平均队列长度avg由设置的最小阈值(minth)向最大阈值(maxth)增长时,报文的丢弃概率由零增长到最大概率值maxp。RED的一个主要目的就是使用平均队列长度(容许突发流量)和拥塞预先通知(减低平...

2020-07-28 22:15:25 82 0

原创 DPDK示例l3fwd性能测试

测试环境 CPU: Intel® Xeon® Gold 5122 CPU @ 3.60GHz Cache: 16896 KB Memory: 16G X710 driver: i40e-2.11.29 X710 expansion-rom-version: 4...

2020-07-27 19:19:24 276 0

原创 RED队列算法 - 实现

RED算法的大部分工作都可以与报文的转发处理并行进行,两个主要算法包括平均队列长度avg和报文标记概率pb计算,也可以按照低优先级任务执行,因此,RED完全可使用在高速网络中。 如果RED标记报文的方式不是丢弃报文,而是设置报文头部中的拥塞标志位(ECN方式),后者将影响报文的转发。但是,因为RE...

2020-07-25 20:37:13 275 0

原创 fuchsia编译

fuchsia代码主要在搜索网站的源码站,本地开发环境为Ubuntu 16.04.3,如下: $ cat /etc/issue Ubuntu 16.04.3 LTS \n \l 以下命令下载fuchsia工程代码,curl的-s选项开启静默模式,减少打印信息: $ curl -s &...

2020-07-24 10:19:07 1490 0

原创 RED队列

RED(Random Early Detection)算法旨在将队列的平均长度保持在较低的值,同时,允许一定量的突发报文。在发生拥塞期间,RED以一定的概率通知(丢包或者ECN机制)某个连接减低窗口值,此概率大致上与该连接占用的带宽份额成比例。RED设计用来与传输层协议如TCP等一起使用。另外,R...

2020-07-24 09:50:15 132 0

原创 rtnetlink消息解析遇到的问题记录

折腾了两天一个解析rtnetlink消息的程序,总是莫名其妙的crash,最终发现是rtattr数组定的时候忘记了加一。之后,查看了一下iproute2中的代码,如下解析IP地址的函数,rta_tb数组的个数为:IFA_MAX+1,进行了加一操作。 int print_addrinfo(const...

2020-07-15 22:07:58 84 0

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