中断均衡脚本

中断均衡脚本

来源 https://www.right.com.cn/forum/thread-4041282-1-1.html

基于OpenWrt 19.07分支,添加杂七杂八的补丁与设备支持,弄出的要求可靠性与性能的版本。
相比于OpenWrt原版,有以下区别:

  • 添加了shortcut-fe 4.14内核支持
  • mt7615e闭源驱动,虽然很不好配置
  • IPQ806x NSS驱动(还没有经过长时间运行测试)
  • 调整过的默认配置(O2编译,杂七杂八的内核选项,软件包默认参数)
  • 增强了lean软件包的兼容性,主要是55R和Adbyby文件更新
  • IPQ806x与IPQ40xx有调整过的中断及队列均衡脚本
  • 从master引入最新的ath10k-ct固件与驱动

相比于Lean,有以下区别:

  • 更稳定的代码更新渠道,与官方同步

同时,从lean和master中引入了ACRH17与R6800机型的配置文件。
会不定时同步OpenWrt 19.07的变动,19.07.x这种主版本肯定会更新。
代码地址:
https://github.com/presisco/openwrt/tree/openwrt-19.07

OpenWrt路由器多核终端均衡脚本 转发性能大幅提升50%

来源 https://www.right.com.cn/forum/thread-3191113-1-1.html

OpenWrt默认、Lean OpenWrt默认、使用irqbalance及转发优化版本的核心分配情况如下(IPQ40xx):

中断 OpenWrt Lean irqbalance 转发优化 网络队列rx CPU123 CPU0123 CPU123 CPU12交替 网络队列tx 交替 交替 交替 CPU12交替 网络中断rx CPU0123 4个一组交替 交替 4个一组CPU12反向交替 网络中断tx CPU0123 交替 交替 CPU12反向交替 无线ahb CPU0123 CPU2 CPU2 CPU3 无线pcie CPU0123 CPU3(设置无效) CPU0 CPU3 其他(usb,dma,gpio…) CPU0123 CPU0123 CPU0/CPU2/CPU3 CPU0

CPU123表示使用CPU1、CPU2、CPU3均可。为了提升局部性以提升缓存效率,中断往往被固定在所有指定CPU中最小的那个,在缺少硬件NAT与千兆网的情况下很容易占满1个CPU核心而其他核心空闲,出现性能瓶颈。因此需要调整中断与CPU的对应关系。。

使用两台间隔7米的ACRH17组建WDS无线桥接网络,主路由中运行iperf3服务器,主从路由通过QCA9984 5G进行连接,测试电脑连接于从路由的LAN1接口。
两台ACRH17均使用OpenWrt官方19.07.2固件与ath10k无线驱动。

不同中断绑定配置下的转发性能如下表所示:

中断绑定配置 速度/Mbps OpenWrt默认 495 irqbalance 476 Lean固件默认策略 386 转发优化 581

我已经将中断的配置代码整合为脚本,只需要根据个人需求配置中断与CPU的对应关系,并上传到路由器中直接执行即可完成设定。每次重启路由器后脚本都需要重新执行。目前有基于OpenWrt/Lean与IPQ40xx系列SOC(4018/4019/4028/4029等)的脚本可直接使用。PandoraBox、AsusWrt、Merlin等及非IPQ40xx系列SOC的没有现成脚本。

中断均衡脚本:
中断均衡脚本链接

更新3-2020/3/11 10:00重写mt7621与bcm53xx的均衡脚本。
mt7621将CPU0/1处理eth0.1网络队列及USB/DMA,CPU2/3处理eth0.2网络队列及wifi。
bcm53xx使用CPU0/1处理网络队列,CPU0处理以太网,CPU1处理wifi、USB。

更新2-2020/3/10 22:30
重写ipq40xx的均衡脚本,将CPU1与CPU2用于处理网络端口队列,CPU8处理无线

更新1-2020/3/9 0:35
将ipq40xx.sh中网络相关irq全部指定至CPU2,与实验中相同。

1.早在3年前,上面说的平衡PandoraBox全都有了.

2.影响NAT最大的不是这个多核平衡,而是offload,就是我们常说的GSO/TSO,
垃圾BCM的4708/4709就是因为故意阉割了offload.所以NAT才会跟MT7621差不多.

3.当前IPQ4019上面的EDMA是支持大部分offload,除去CPU的平衡外,EDMA还支持16个硬件队列.这其实就已经是多核优化了,性能上不来还有很大原因是netfilter太多东西了.

4.假设OpenWrt能利用上IPQ806x的NSS协处理器,NAT性能会远超其他的设备.

R7800(IPQ8065)带硬件NSS驱动加速 实测1000M跑满的时候,CPU没有占用。

来源 https://www.right.com.cn/forum/thread-4130959-1-1.html

这个不错,但是集成的软件比较老了,所以我在他源码的基础上做了一些改进
使用的是官方19.07的源码和LEAN的一部分源码
OPENWRT官方源码:https://github.com/openwrt/openwrt
感谢大神LEAN:https://github.com/coolsnowwolf/lede
感谢大神quarky:https://forum.openwrt.org/t/ipq806x-nss-drivers/12613
感谢大神presisco:https://www.right.com.cn/forum/thread-4041282-1-1.html

IPQ806X NSS NAPI 驱动处理流程分析

IPQ806X网络子系统(NETWORK SUB SYSTEM,简称NSS)NAPI入口函数是:
int nss_core_handle_napi(struct napi_struct* napi,int budget)
其中,入参budget是每次消耗的预算,即一次最多处理几个报文。
在下面的循环中,会判断这个值是否已减到了0,非零时继续。
基本流程是:
1、napi->dev中记录有NSS的中断上下文信息,包含中断号。首先根据这个中断信息获取中断发生的原因码,一个32位整型值。
2、有两重循环,用代码描述是:
do{
while(中断原因码非0,预算非零)
{
处理DMA中的数据,上报到网络协议栈,计算本次处理数
减少预算
如果本次处理数小于权重值,清除原因码中相应已处理过的优先级位,避免淹死在某一个优先级中队列中
}
重新读取中断,更新原因码
}while(中断原因码非0,预算非零)

ipq806X

来源 https://www.cnblogs.com/yaxinsn/p/8376810.html

中断均衡脚本

ipq401x没有nss模块。但是也需要nss_gmac和nss_drv。驱动之间有依赖关系。

edma 与ess-switch不是一回事儿

目录/proc/device-tree/soc

中断均衡脚本
ess-switch 的寄存器范围是0xC000000 长度是80000.

edma寄存器的地址的开始正好是ess-switch的结束。
4018的ess-switch 应该是一个AR8327(芯片是VER_DESS不是8327。使用的驱动是8327的驱动。)。这个switch可以集成在QCA953X等MIPS芯片中,也可能集成在IPQ401X等ARM的芯片中。两种集成方式可能与CPU的连接方式会有不同之处。

a>debug reg get 0 4
[Data]:0x1401 //芯片ID。DEVICE_ID
operation done.

4018(ARM)的ssdk的基本信息
dev0@qca>debug ssdk config
1.SSDK CONFIGURATION:
[build verison]:2.0.0.2 [build date]:2018-01-17-17:44:27
[chip type]:dess [arch]: [os]:linux unknown
[fal]:true [kernel mode]:true [uk if]:true
[cpu mode]:cpu_1 [reg access]:header [ioctl minor]:254
[inf defined]:mdio_set(y) mdio_get(y) header_reg_set(y) header_reg_get(y)

2.DEMO SHELL CONFIGURATION:
[build verison]:2.0.0 [build date]:2018-01-17-04:17:24
[chip type]: [arch]:mips [os]:linux version 2.6
[fal]:true [kernel mode]:true [uk if]:true
[cpu mode]:cpu_1 [reg access]:mdio [ioctl minor]:254
[inf defined]:mdio_set(n) mdio_get(n) header_reg_set(n) header_reg_get(n)

3.SSDK FEATURES LIST:
acl fdb igmp leaky led mib mirror misc portcontrol portvlan qos rate stp vlan cosmap ip nat sec trunk
operation done.

dev0@qca>
qca953x芯片的信息。
dev0@qca>debug ssdk config

1.SSDK CONFIGURATION:
[build verison]:1.3.0.2 [build date]:2018-11-10-08:40:58
[chip type]:shiva [arch]:mips [os]:linux unknown
[fal]:true [kernel mode]:true [uk if]:true
[cpu mode]:cpu_1 [reg access]:mdio [ioctl minor]:254
[inf defined]:mdio_set(y) mdio_get(y) header_reg_set(y) header_reg_get(y)

2.DEMO SHELL CONFIGURATION:
[build verison]:1.4.0 [build date]:2018-11-09-22:58:39
[chip type]:shiva [arch]:mips [os]:linux version 2.4 #DEMO SHELL的信息不太正确。
[fal]:true [kernel mode]:true [uk if]:true
[cpu mode]:cpu_1 [reg access]:mdio [ioctl minor]:254
[inf defined]:mdio_set(n) mdio_get(n) header_reg_set(n) header_reg_get(n)

3.SSDK FEATURES LIST:
acl fdb igmp leaky led mib mirror misc portcontrol portvlan qos rate stp vlan cosmap ip nat sec trunk
operate done.

上下层通信的方式:是misc_dev的方式。
cat /proc/misc
229 fuse
254 switch_ssdk
59 ubi_ctrl
60 memory_bandwidth
61 network_throughput
62 network_latency
63 cpu_dma_latency
130 watchdog
183 hw_random

/usr/sbin/ssdk_sh是一个static的程序,不使用动态库。

Hardware Shield Layer (HSL)
硬件屏蔽层
HAL 硬件抽象层。

switch mii psgmii mdio 之间的关系

来源 https://blog.csdn.net/u012385733/article/details/75286959

中断均衡脚本

QCA8075: 是有5个端口Gigabit Ethernet PHY 芯片。

PSGMII:连接MAC与PHY芯片的接口, 也称为数据接口。(PSGMII可以配置为5个copper or 4 个copper 1个COMBO)

MDC/MDIO:控制总线接口。

这是一个标准连接图,只是稍加解释,cpu端内置switch,笔者在看驱动的时候,对其中关系比较混乱,故记下跟踪笔记。

设备树关系

switch@A{
compatible = “switchdevice”;

reg =

};

psgmii@B{
compatible=”psgmiiinterface device”;

reg =

};

mdio@C{
compatible = “midointerface device”;

reg=

}

========= End

Original: https://www.cnblogs.com/lsgxeva/p/16414863.html
Author: lsgxeva
Title: 中断均衡脚本

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/547061/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球