1.BBR拥塞控制算法
2.手把手教你把JLink变成串口调试助手
3.TCP/IP详解å·1ï¼åè®®çä½åç®å½
4.linux内核源码:网络通信简介——网络拥塞控制之BBR算法
5.RTTç¬è®°-fal
6.如何在项目中使用RTOS分析工具SystemView?
BBR拥塞控制算法
在WebRTC源码研究中,算源算法BBR算法作为一项革新性的算源算法拥塞控制策略备受关注。不同于传统的算源算法丢包处理,BBR基于网络模型,算源算法通过BBR.BtlBw(瓶颈带宽估计)和BBR.RTprop(双向传播延时估计)动态调整发送速率。算源算法它旨在在保持高吞吐量的算源算法简单每天签到源码同时,实现低延迟的算源算法网络传输体验。 核心变量包括:pacing_rate: 发送速率控制,算源算法确保数据流量与可用带宽同步。算源算法
send_quantum: 规划的算源算法单次发送数据量,优化发送效率。算源算法
cwnd: 拥塞窗口,算源算法维护发送数据量的算源算法上限。
BBR.BtlBw: 通过Max过滤器(长度往返)持续估算,算源算法考虑网络波动的算源算法鲁棒性。
BBR.RTprop: 双向传播延时估计,通过最小值过滤器减少噪声影响。
BBR算法通过其复杂而精密的状态机,如Startup、Drain、ProbeBW和ProbeRTT,对网络环境进行细致的雷神3源码动态监测和调整。算法在连接建立、ACK响应和数据传输过程中实时更新模型参数,确保网络资源的最优利用。 在控制参数中,BBR使用SendPacingRate和SetSendQuantum函数,根据网络状况灵活地调整发送速率和数据包大小。例如,send_quantum根据pacing_rate的范围动态调整,从MSS到KBytes,以适应不同带宽条件。 BBR的精妙之处在于其丢包恢复策略,如超时重传、快速恢复和cwnd的逐步调整,确保在遇到网络波动时能够快速恢复和保持数据传输的连续性。状态机的智能决策机制,如pacing_gain调整和cwnd管理,使得算法在面对复杂网络环境时表现出高度的灵活性和适应性。 BBR的算法设计考虑了公平性和效率,通过非传统的慢启动策略和RTProp探测,确保在不同场景下提供稳定且高效的传输。RTProp FilterLen与ProbeRTTInterval的供货商源码协同工作,保证了对实时变化的网络状况有快速而精确的反应。 总而言之,BBR算法的创新性和高效性使其在现代网络环境中占据重要地位,是现代通信技术中不可或缺的一部分。通过深入理解其原理和机制,开发者能够更好地优化网络性能和用户体验。手把手教你把JLink变成串口调试助手
在单片机开发过程中,打印调试信息通常依赖于串口调试。通常,我们会预留串口1进行调试,但如果在实际项目中没有预留,JLink仿真调试器可以成为你的得力助手。JLink,由SEEGER公司出品,体积小巧,只有四根线,非常适合携带和使用,尤其适合ST系列芯片的开发。
首先,确保你的电脑上已安装JLink驱动,可以从segger.com下载最新版本的源码tp6JLink V7.或更高版本。安装完成后,你将发现安装目录下包含RTT功能的相关文件。RTT源码包位于JLink驱动的Samples\RTT文件夹中,只需将其复制到项目文件夹并与工程中的.c文件集成即可。
接下来,配置RTT功能。在编译无误后,连接JLink下载器,并启动JLinkRTTViewer.exe。配置好RTT参数,将程序下载到单片机,就能看到打印信息了。注意,RTT的缓冲大小可自定义,以适应大量信息的打印需求。
RTT还支持多虚拟端口打印,以及颜色定制,只需在字符串前添加对应宏定义。此外,你还可以通过重定向printf到RTT来简化调试,只需替换fputc函数即可。mq4源码这样,即使在没有预留串口的情况下,你也能轻松进行调试和打印信息。
总结来说,当遇到项目中无串口调试需求时,JLink的RTT功能是一个实用的解决方案,可以根据具体项目的特点灵活运用。通过这个方法,你可以轻松地在单片机开发中实现调试打印。
TCP/IP详解å·1ï¼åè®®çä½åç®å½
è¯è åºåè¨
第1ç« æ¦è¿°1
1.1 å¼è¨1
1.2 åå±1
1.3 TCP/IPçåå±4
1.4 äºèç½çå°å5
1.5 ååç³»ç»6
1.6 å°è£ 6
1.7 åç¨8
1.8 客æ·-æå¡å¨æ¨¡å8
1.9 端å£å·9
1. æ ååè¿ç¨
1. RFC
1. æ åçç®åæå¡
1. äºèç½
1. å®ç°
1. åºç¨ç¼ç¨æ¥å£
1. æµè¯ç½ç»
1. å°ç»
第2ç« é¾è·¯å±
2.1 å¼è¨
2.2 以太ç½åIEEE å°è£
2.3 å°¾é¨å°è£
2.4 SLIPï¼ä¸²è¡çº¿è·¯IP
2.5 å缩çSLIP
2.6 PPPï¼ç¹å¯¹ç¹åè®®
2.7 ç¯åæ¥å£
2.8 æå¤§ä¼ è¾åå MTU
2.9 è·¯å¾MTU
2. 串è¡çº¿è·¯ååé计ç®
2. å°ç»
第3ç« IPï¼ç½é åè®®
3.1 å¼è¨
3.2 IPé¦é¨
3.3 IPè·¯ç±éæ©
3.4 åç½å¯»å
3.5 åç½æ©ç
3.6 ç¹æ®æ åµçIPå°å
3.7 ä¸ä¸ªåç½çä¾å
3.8 ifconfigå½ä»¤
3.9 netstatå½ä»¤
3. IPçæªæ¥
3. å°ç»
第4ç« ARPï¼å°å解æåè®®
4.1 å¼è¨
4.2 ä¸ä¸ªä¾å
4.3 ARPé«éç¼å
4.4 ARPçåç»æ ¼å¼
4.5 ARP举ä¾
4.5.1 ä¸è¬çä¾å
4.5.2 对ä¸åå¨ä¸»æºçARP请æ±
4.5.3 ARPé«éç¼åè¶ æ¶è®¾ç½®
4.6 ARP代ç
4.7 å è´¹ARP
4.8 arpå½ä»¤
4.9 å°ç»
第5ç« RARPï¼éå°å解æåè®®
5.1 å¼è¨
5.2 RARPçåç»æ ¼å¼
5.3 RARP举ä¾
5.4 RARPæå¡å¨ç设计
5.4.1 ä½ä¸ºç¨æ·è¿ç¨çRARPæå¡å¨
5.4.2 æ¯ä¸ªç½ç»æå¤ä¸ªRARPæå¡å¨
5.5 å°ç»
第6ç« ICMPï¼Internetæ§å¶æ¥æåè®®
6.1 å¼è¨
6.2 ICMPæ¥æçç±»å
6.3 ICMPå°åæ©ç 请æ±ä¸åºç
6.4 ICMPæ¶é´æ³è¯·æ±ä¸åºç
6.4.1 举ä¾
6.4.2 å¦ä¸ç§æ¹æ³
6.5 ICMP端å£ä¸å¯è¾¾å·®é
6.6 ICMPæ¥æç4.4BSDå¤ç
6.7 å°ç»
第7ç« Pingç¨åº
7.1 å¼è¨
7.2 Pingç¨åº
7.2.1 LANè¾åº
7.2.2 WANè¾åº
7.2.3 线路SLIPé¾æ¥
7.2.4 æ¨å·SLIPé¾è·¯
7.3 IPè®°å½è·¯ç±é项
7.3.1 é常çä¾å
7.3.2 å¼å¸¸çè¾åº
7.4 IPæ¶é´æ³é项
7.5 å°ç»
第8ç« Tracerouteç¨åº
8.1 å¼è¨
8.2 Traceroute ç¨åºçæä½
8.3 å±åç½è¾åº
8.4 广åç½è¾åº
8.5 IPæºç«éè·¯é项
8.5.1 宽æ¾çæºç«éè·¯çtraceroute
ç¨åºç¤ºä¾
8.5.2 ä¸¥æ ¼çæºç«éè·¯çtraceroute
ç¨åºç¤ºä¾
8.5.3 宽æ¾çæºç«éè·¯tracerouteç¨åº
çå¾è¿è·¯ç±
8.6 å°ç»
第9ç« IPéè·¯
9.1 å¼è¨
9.2 éè·¯çåç
9.2.1 ç®åè·¯ç±è¡¨
9.2.2 åå§åè·¯ç±è¡¨
9.2.3 è¾å¤æçè·¯ç±è¡¨
9.2.4 没æå°è¾¾ç®çå°çè·¯ç±
9.3 ICMP主æºä¸ç½ç»ä¸å¯è¾¾å·®é
9.4 转åæä¸è½¬å
9.5 ICMPéå®åå·®é
9.5.1 ä¸ä¸ªä¾å
9.5.2 æ´å¤çç»è
9.6 ICMPè·¯ç±å¨åç°æ¥æ
9.6.1 è·¯ç±å¨æä½
9.6.2 主æºæä½
9.6.3 å®ç°
9.7 å°ç»
ç¬¬ç« å¨æéè·¯åè®®
.1 å¼è¨
.2 å¨æéè·¯
.3 Unixéè·¯å®æ¤ç¨åº
.4 RIPï¼é路信æ¯åè®®
.4.1 æ¥ææ ¼å¼
.4.2 æ£å¸¸è¿è¡
.4.3 度é
.4.4 é®é¢
.4.5 举ä¾
.4.6 å¦ä¸ä¸ªä¾å
.5 RIPçæ¬
.6 OSPFï¼å¼æ¾æçè·¯å¾ä¼å
.7 BGPï¼è¾¹çç½å ³åè®®
.8 CIDRï¼æ ç±»ååé´éè·¯
.9 å°ç»
ç¬¬ç« UDPï¼ç¨æ·æ°æ®æ¥åè®®
.1 å¼è¨
.2 UDPé¦é¨
.3 UDPæ£éªå
.3.1 tcpdumpè¾åº
.3.2 ä¸äºç»è®¡ç»æ
.4 ä¸ä¸ªç®åçä¾å
.5 IPåç
.6 ICMPä¸å¯è¾¾å·®éï¼éè¦åçï¼
.7 ç¨Tracerouteç¡®å®è·¯å¾MTU
.8 éç¨UDPçè·¯å¾MTUåç°
.9 UDPåARPä¹é´ç交äºä½ç¨
. æ大UDPæ°æ®æ¥é¿åº¦
. ICMPæºç«æå¶å·®é
. UDPæå¡å¨ç设计
..1 客æ·IPå°åå端å£å·
..2 ç®æ IPå°å
..3 UDPè¾å ¥éå
..4 éå¶æ¬å°IPå°å
..5 éå¶è¿ç«¯IPå°å
..6 æ¯ä¸ªç«¯å£æå¤ä¸ªæ¥æ¶è
. å°ç»
ç¬¬ç« å¹¿æåå¤æ
.1 å¼è¨
.2 广æ
.2.1 åéç广æ
.2.2 æåç½ç»ç广æ
.2.3 æååç½ç广æ
.2.4 æåææåç½ç广æ
.3 广æçä¾å
.4 å¤æ
.4.1 å¤æç»å°å
.4.2 å¤æç»å°åå°ä»¥å¤ªç½å°åç转æ¢
.4.3 FDDIå令çç¯ç½ç»ä¸çå¤æ
.5 å°ç»
ç¬¬ç« IGMPï¼Internetç»ç®¡çåè®®
.1 å¼è¨
.2 IGMPæ¥æ
.3 IGMPåè®®
.3.1 å å ¥ä¸ä¸ªå¤æç»
.3.2 IGMPæ¥ååæ¥è¯¢
.3.3 å®ç°ç»è
.3.4 çåæ¶é´å段
.3.5 ææ主æºç»
.4 ä¸ä¸ªä¾å
.5 å°ç»
ç¬¬ç« DNSï¼ååç³»ç»
.1 å¼è¨
.2 DNSåºç¡
.3 DNSçæ¥ææ ¼å¼
.3.1 DNSæ¥è¯¢æ¥æä¸çé®é¢é¨å
.3.2 DNSååºæ¥æä¸çèµæºè®°å½é¨å
.4 ä¸ä¸ªç®åçä¾å
.5 æéæ¥è¯¢
.5.1 举ä¾
.5.2 主æºåæ£æ¥
.6 èµæºè®°å½
.7 é«éç¼å
.8 ç¨UDPè¿æ¯ç¨TCP
.9 å¦ä¸ä¸ªä¾å
. å°ç»
ç¬¬ç« TFTPï¼ç®åæä»¶ä¼ éåè®®
.1 å¼è¨
.2 åè®®
.3 ä¸ä¸ªä¾å
.4 å®å ¨æ§
.5 å°ç»
ç¬¬ç« BOOTP: å¼å¯¼ç¨åºåè®®
.1 å¼è¨
.2 BOOTPçåç»æ ¼å¼
.3 ä¸ä¸ªä¾å
.4 BOOTPæå¡å¨ç设计
.5 BOOTPç©¿è¶è·¯ç±å¨
.6 ç¹å®ååä¿¡æ¯
.7 å°ç»
ç¬¬ç« TCPï¼ä¼ è¾æ§å¶åè®®
.1 å¼è¨
.2 TCPçæå¡
.3 TCPçé¦é¨
.4 å°ç»
ç¬¬ç« TCPè¿æ¥ç建ç«ä¸ç»æ¢
.1 å¼è¨
.2 è¿æ¥ç建ç«ä¸ç»æ¢
.2.1 tcpdumpçè¾åº
.2.2 æ¶é´ç³»å
.2.3 建ç«è¿æ¥åè®®
.2.4 è¿æ¥ç»æ¢åè®®
.2.5 æ£å¸¸çtcpdumpè¾åº
.3 è¿æ¥å»ºç«çè¶ æ¶
.3.1 第ä¸æ¬¡è¶ æ¶æ¶é´
.3.2 æå¡ç±»åå段
.4 æ大æ¥æ段é¿åº¦
.5 TCPçåå ³é
.6 TCPçç¶æåè¿å¾
.6.1 2MSLçå¾ ç¶æ
.6.2 å¹³éæ¶é´çæ¦å¿µ
.6.3 FIN_WAIT_2ç¶æ
.7 å¤ä½æ¥æ段
.7.1 å°ä¸åå¨ç端å£çè¿æ¥è¯·æ±
.7.2 å¼å¸¸ç»æ¢ä¸ä¸ªè¿æ¥
.7.3 æ£æµåæå¼è¿æ¥
.8 åæ¶æå¼
.9 åæ¶å ³é
. TCPé项
. TCPæå¡å¨ç设计
..1 TCPæå¡å¨ç«¯å£å·
..2 éå®çæ¬å°IPå°å
..3 éå®çè¿ç«¯IPå°å
..4 å¼å ¥è¿æ¥è¯·æ±éå
. å°ç»
ç¬¬ç« TCPç交äºæ°æ®æµ
.1 å¼è¨
.2 交äºå¼è¾å ¥
.3 ç»åæ¶å»¶ç确认
.4 Nagleç®æ³
.4.1 å ³éNagleç®æ³
.4.2 ä¸ä¸ªä¾å
.5 çªå£å¤§å°éå
.6 å°ç»
ç¬¬ç« TCPçæåæ°æ®æµ
.1 å¼è¨
.2 æ£å¸¸æ°æ®æµ
.3 æ»å¨çªå£
.4 çªå£å¤§å°
.5 PUSHæ å¿
.6 æ ¢å¯å¨
.7 æåæ°æ®çååé
.7.1 带宽æ¶å»¶ä¹ç§¯
.7.2 æ¥å¡
.8 ç´§æ¥æ¹å¼
.9 å°ç»
ç¬¬ç« TCPçè¶ æ¶ä¸éä¼
.1 å¼è¨
.2 è¶ æ¶ä¸éä¼ çç®åä¾å
.3 å¾è¿æ¶é´æµé
.4 å¾è¿æ¶é´RTTçä¾å
.4.1 å¾è¿æ¶é´RTTçæµé
.4.2 RTT估计å¨ç计ç®
.4.3 æ ¢å¯å¨
.5 æ¥å¡ä¸¾ä¾
.6 æ¥å¡é¿å ç®æ³
.7 å¿«ééä¼ ä¸å¿«éæ¢å¤ç®æ³
.8 æ¥å¡ä¸¾ä¾ï¼ç»ï¼
.9 ææ¯æ¡è·¯ç±è¿è¡åº¦é
. ICMPçå·®é
. éæ°åç»
. å°ç»
ç¬¬ç« TCPçåæå®æ¶å¨
.1 å¼è¨
.2 ä¸ä¸ªä¾å
.3 ç³æ¶çªå£ç»¼åç
.4 å°ç»
ç¬¬ç« TCPçä¿æ´»å®æ¶å¨
.1 å¼è¨
.2 æè¿°
.3 ä¿æ´»ä¸¾ä¾
.3.1 å¦ä¸ç«¯å´©æº
.3.2 å¦ä¸ç«¯å´©æºå¹¶éæ°å¯å¨
.3.3 å¦ä¸ç«¯ä¸å¯è¾¾
.4 å°ç»
ç¬¬ç« TCPçæªæ¥åæ§è½
.1 å¼è¨
.2 è·¯å¾MTUåç°
.2.1 ä¸ä¸ªä¾å
.2.2 大åç»è¿æ¯å°åç»
.3 é¿è¥ç®¡é
.4 çªå£æ©å¤§é项
.5 æ¶é´æ³é项
.6 PAWSï¼é²æ¢åç»çåºå·
.7 T/TCPï¼ä¸ºäºå¡ç¨çTCPæ©å±
.8 TCPçæ§è½
.9 å°ç»
ç¬¬ç« SNMPï¼ç®åç½ç»ç®¡çåè®®
.1 å¼è¨
.2 åè®®
.3 管çä¿¡æ¯ç»æ
.4 对象æ è¯ç¬¦
.5 管çä¿¡æ¯åºä»ç»
.6 å®ä¾æ è¯
.6.1 ç®ååé
.6.2 è¡¨æ ¼
.6.3 åå ¸å¼æåº
.7 ä¸äºç®åçä¾å
.7.1 ç®ååé
.7.2 get-nextæä½
.7.3 è¡¨æ ¼ç访é®
.8 管çä¿¡æ¯åº(ç»)
.8.1 systemç»
.8.2 interfaceç»
.8.3 atç»
.8.4 ipç»
.8.5 icmpç»
.8.6 tcpç»
.9 å ¶ä»ä¸äºä¾å
.9.1 æ¥å£MTU
.9.2 è·¯ç±è¡¨
. trap
. ASN.1åBER
. SNMPv
. å°ç»
ç¬¬ç« TelnetåRloginï¼è¿ç¨ç»å½
.1 å¼è¨
.2 Rloginåè®®
.2.1 åºç¨è¿ç¨çå¯å¨
.2.2 æµéæ§å¶
.2.3 客æ·çä¸æé®
.2.4 çªå£å¤§å°çæ¹å
.2.5 æå¡å¨å°å®¢æ·çå½ä»¤
.2.6 客æ·å°æå¡å¨çå½ä»¤
.2.7 客æ·ç转ä¹ç¬¦
.3 Rloginçä¾å
.3.1 åå§ç客æ·-æå¡å¨åè®®
.3.2 客æ·ä¸æé®
.4 Telnetåè®®
.4.1 NVT ASCII
.4.2 Telnetå½ä»¤
.4.3 é项åå
.4.4 åé项åå
.4.5 ååå·¥ãä¸æ¬¡ä¸å符ãä¸æ¬¡
ä¸è¡æè¡æ¹å¼
.4.6 åæ¥ä¿¡å·
.4.7 客æ·ç转ä¹ç¬¦
.5 Telnet举ä¾
.5.1 åå符æ¹å¼
.5.2 è¡æ¹å¼
.5.3 ä¸æ¬¡ä¸è¡æ¹å¼(åè¡æ¹å¼)
.5.4 è¡æ¹å¼ï¼å®¢æ·ä¸æé®
.6 å°ç»
ç¬¬ç« FTPï¼æä»¶ä¼ éåè®®
.1 å¼è¨
.2 FTPåè®®
.2.1 æ°æ®è¡¨ç¤º
.2.2 FTPå½ä»¤
.2.3 FTPåºç
.2.4 è¿æ¥ç®¡ç
.3 FTPçä¾å
.3.1 è¿æ¥ç®¡çï¼ä¸´æ¶æ°æ®ç«¯å£
.3.2 è¿æ¥ç®¡çï¼é»è®¤æ°æ®ç«¯å£
.3.3 ææ¬æä»¶ä¼ è¾ï¼NVT ASCII
表示è¿æ¯å¾å表示
.3.4 å¼å¸¸ä¸æ¢ä¸ä¸ªæ件çä¼ è¾ï¼
Telnetåæ¥ä¿¡å·
.3.5 å¿åFTP
.3.6 æ¥èªä¸ä¸ªæªç¥IPå°åçå¿åFTP
.4 å°ç»
ç¬¬ç« SMTPï¼ç®åé®ä»¶ä¼ éåè®®
.1 å¼è¨
.2 SMTPåè®®
.2.1 ç®åä¾å
.2.2 SMTPå½ä»¤
.2.3 ä¿¡å°ãé¦é¨åæ£æ
.2.4 ä¸ç»§ä»£ç
.2.5 NVT ASCII
.2.6 éè¯é´é
.3 SMTPçä¾å
.3.1 MXè®°å½ï¼ä¸»æºéç´æ¥è¿å°
Internet
.3.2 MXè®°å½ï¼ä¸»æºåºæ é
.3.3 VRFYåEXPNå½ä»¤
.4 SMTPçæªæ¥
.4.1 ä¿¡å°çååï¼æ©å çSMTP
.4.2 é¦é¨ååï¼éASCIIå符
.4.3 æ£æååï¼éç¨Interneté®ä»¶
æ©å
.5 å°ç»
ç¬¬ç« ç½ç»æ件系ç»
.1 å¼è¨
.2 Sunè¿ç¨è¿ç¨è°ç¨
.3 XDRï¼å¤é¨æ°æ®è¡¨ç¤º
.4 端å£æ å°å¨
.5 NFSåè®®
.5.1 æ件å¥æ
.5.2 å®è£ åè®®
.5.3 NFSè¿ç¨
.5.4 UDPè¿æ¯TCP
.5.5 TCPä¸çNFS
.6 NFSå®ä¾
.6.1 ç®åçä¾åï¼è¯»ä¸ä¸ªæ件
.6.2 ç®åçä¾åï¼å建ä¸ä¸ªç®å½
.6.3 æ ç¶æ
.6.4 ä¾åï¼æå¡å¨å´©æº
.6.5 çå¹è¿ç¨
.7 第3ççNFS
.8 å°ç»
ç¬¬ç« å ¶ä»çTCP/IPåºç¨ç¨åº
.1 å¼è¨
.2 Fingeråè®®
.3 Whoisåè®®
.4 ArchieãWAISãGopherãVeronica
åWWW
.4.1 Archie
.4.2 WAIS
.4.3 Gopher
.4.4 Veronica
.4.5 ä¸ç»´ç½WWW
.5 Xçªå£ç³»ç»
.5.1 Xscopeç¨åº
.5.2 LBX: ä½å¸¦å®½X
.6 å°ç»
éå½A tcpdumpç¨åº
éå½B 计ç®æºæ¶é
éå½C sockç¨åº
éå½D é¨åä¹ é¢ç解ç
éå½E é ç½®é项
éå½F å¯ä»¥å è´¹è·å¾çæºä»£ç
åèæç®
缩ç¥è¯
linux内核源码:网络通信简介——网络拥塞控制之BBR算法
从网络诞生至十年前,TCP拥塞控制采用的经典算法如reno、new-reno、bic、cubic等,在低带宽有线网络中运行了几十年。然而,随着网络带宽的增加以及无线网络通信的普及,这些传统算法开始难以适应新的环境。
根本原因是,传统拥塞控制算法将丢包/错包等同于网络拥塞。这一认知上的缺陷导致了算法在面对新环境时的不适应性。BBR算法的出现,旨在解决这一问题。BBR通过以下方式控制拥塞:
1. 确保源端发送数据的速率不超过瓶颈链路的带宽,避免长时间排队造成拥塞。
2. 设定BDP(往返延迟带宽积)的上限,即源端发送的待确认在途数据包(inflight)不超过BDP,换句话说,双向链路中数据包总和不超过RTT(往返延迟)与BtlBW(瓶颈带宽)的乘积。
BBR算法需要两个关键变量:RTT(RTprop:往返传播延迟时间)和BtlBW(瓶颈带宽),并需要精确测量这两个变量的值。
1. RTT的定义为源端从发送数据到收到ACK的耗时,即数据包一来一回的时间总和。在应用受限阶段测量是最合适的。
2. BtlBW的测量则在带宽受限阶段进行,通过多次测量交付速率,将近期的最大交付速率作为BtlBW。测量的时间窗口通常在6-个RTT之间,确保测量结果的准确性。
在上述概念基础上,BBR算法实现了从初始启动、排水、探测带宽到探测RTT的四个阶段,以实现更高效、更稳定的网络通信。
通信双方在节点中,通过发送和接收数据进行交互。BBR算法通过接收ACK包时更新RTT、部分包更新BtlBW,以及发送数据包时判断inflight数据量是否超过BDP,通过一系列动作实现数据的有效传输。
在具体的实现上,BBR算法的源码位于net\ipv4\tcp_bbr.c文件中(以Linux 4.9源码为例)。关键函数包括估算带宽的bbr_update_bw、设置pacing_rate来控制发送速度的bbr_set_pacing_rate以及更新最小的RTT的bbr_update_min_rtt等。
总的来说,BBR算法不再依赖丢包判断,也不采用传统的AIMD线性增乘性减策略维护拥塞窗口。而是通过采样估计网络链路拓扑情况,极大带宽和极小延时,以及使用发送窗口来优化数据传输效率。同时,引入Pacing Rate限制数据发送速率,与cwnd配合使用,有效降低数据冲击。
RTTç¬è®°-fal
该ç¬è®°ç±»å«ä¸»è¦æ¯å¨èªå·±å¦ä¹ æ¶åçä¸äºè®°å½ï¼æ¹ä¾¿èªå·±å¾ä¹ ä¸ç¨å¿ææ¶è¿è¡å¿«éåå¿ç¶åå¯¼å ¥å¤´æ件å°å
å¨rtconfig.hæ件ä¸æ·»å å®å®ä¹
æ ¹æ®å¨ç§»æ¤æ件ä¸å®ä¹çåå¨ç©ºé´ååæ¥ååºï¼ä¾å¦å¨fal_flash_stml1_port.cä¸å®ä¹äº
åå¨fla_cfg.hä¸å¯ç¨å¦ä¸åååºå
注æçæ¯å¤´æ件ä¸å¿ 须使ç¨å®(FAL_PART_HAS_TABLE_CFG)ï¼æä¼ä½¿ç¨è¿éå®ä¹çååºæ¹å¼
è¾åºç»æï¼
å 读å3个å¯åå¨ï¼ç¶ååå ¥æ°æ°æ®1,2,3ï¼å次读åæ¾ç¤ºåºæ¥ã串å£æå°ç»æå¨ç¬¬ä¸æ¬¡è¯»åæ¶è¾åºä¸ºé¶ï¼å¨æ¦é¤åå ¥å读ååºæ¥ä¾¿æ¯æ°æ®1,2,3. å¤ä½æ¨¡åå第ä¸æ¬¡è¯»ååºçæ°æ®ä¹ä¸º1,2,3. 表示æçµä¿åæåäºã
失败è¿åNULL
ledï¼ååºè¡¨é¿åº¦
FAL åå§åæ¶ä¼èªå¨è£ è½½é»è®¤ååºè¡¨ã使ç¨è¯¥è®¾ç½®å°ä¸´æ¶ä¿®æ¹ååºè¡¨ï¼éå¯åä¼ ä¸¢å¤± 该设置
è¿åå®é 读å大å°
该å½æ°å¯ä»¥æ ¹æ®æå®çååºå称ï¼å建对åºçå设å¤ï¼ä»¥ä¾¿äºå¨æå®çååºä¸æè½½æ件系ç»
该å½æ°å¯ä»¥æ ¹æ®æå®çååºå称ï¼å建对åºç MTD Nor Flash 设å¤ï¼ä»¥ä¾¿äºå¨æå®çååºä¸æè½½æ件系ç»
该å½æ°å¯ä»¥æ ¹æ®æå®çååºå称ï¼å建对åºçå符设å¤ï¼ä»¥ä¾¿äºéè¿ deivice æ¥å£æ devfs æ¥å£æä½ååºï¼å¼å¯äº POSIX åï¼è¿å¯ä»¥éè¿ oepn/read/write å½æ°æä½ååº
使ç¨ä¸èä¸æå°çsamples\portingç®ä¸ä¾¿æ¯ç§»æ¤éè¦ä¿®æ¹çæ件ï¼ä¾å¦æºç åªæä¾äºfal_flash_sfud_port.cåfal_flash_stmf2_port.c两个æ件ï¼ææ³å¨è¯çstmLä¸ä½¿ç¨å®çeepromï¼åèªå·±æ°å»ºç«ä¸ä¸ªæ件ï¼å®ç°åå§åã读ãåãæ¦å³å¯ï¼æåå¨åç®å½ä¸çfal_cfg.hä¸è¿è¡ååºï¼å°±æ³ä¸é¢è¿æ ·
fal_flash_stml1_port.c
åçæ 论任ä½åå¨ï¼åªéè¦å®ç°å¯¹äºæ¥å£åï¼ä¸å±ä½¿ç¨ä¾¿æ²¡æä»»ä½åºå«
/RT-Thread-packages/fal
如何在项目中使用RTOS分析工具SystemView?
在RTOS应用设计中,开发者往往难以直接观察到多任务系统运行时的实时行为,因为这些行为不仅受源代码影响,还与任务、中断、输入及其相互作用紧密相关。为解决这一问题,可视化分析工具如SEGGER公司的SystemView应运而生。SystemView提供全面洞察,通过时间轴、CPU负载、运行时间信息和上下文运行时信息的可视化窗口,帮助开发者深入理解应用的执行过程。
本文将介绍如何使用Segger J-Link和NXP LPC开发板,实现SystemView的移植与使用,以FreeRTOS .3.0版本为例。SystemView支持多种RTOS系统,包括uC/OS-II、μC/OS-III、FreeRTOS、embOS和裸机系统。
SystemView工作模式包括持续记录、Single-Shot和Post-Mortem模式。持续记录模式通过J-Link调试器和实时传输技术(RTT)实现,实时记录目标程序运行情况。Single-Shot模式适用于不支持RTT或未使用J-Link的情况,记录数据直至缓冲区满为止。Post-Mortem模式在缓冲区满时覆盖旧事件,用于分析系统崩溃前的情况。
为了在目标设备上使用SystemView,首先需要在应用工程中添加SystemView和RTT的源码文件。这包括配置文件、实现源码和针对不同OS及版本的接口文件。配置FreeRTOS跟踪功能,通过编译宏在FreeRTOSConfig.h中包含SystemView相关代码。此外,还需设置SystemView工作模式、事件缓存大小,并在任务创建前调用初始化函数。
在PC端,安装和设置SystemView软件。通过Target->Recorder Configuration选项配置目标设置、调试接口类型和接口速度。选择Auto检测RTT控制块地址。点击Target->Start Recording开始跟踪记录。在持续记录模式下,跟踪视图显示RTOS应用中的中断和任务,直观展示任务抢占过程,有助于开发者优化代码。
借助SystemView,开发者能更直观地理解RTOS应用的实时行为,有效提升代码质量,创造更高性能的系统。