🔈声明:
😃博主主页:王_嘻嘻的CSDN主页
🔑未经作者允许,禁止转载
🚩本专题部分内容源于《InfiniBand-network architecture》,侵权必删
本章将介绍什么是QoS,为什么需要QoS,以及在IB协议中如何在链路层实现QoS。
QoS(Quality of Service) 即“服务质量”,是指网络为特定流量提供更高优先服务的同时控制抖动和延迟的能力,并且能够降低数据传输丢包率。
对于整个网络来说QoS的实现包括流量优先级的设置、拥塞控制策略、出入流量管理、数据排队等方面。
在网络中,消息到达目的地的速度的重要性完全取决于应用程序,如果消息传递不够快,一些应用程序可能会极大影响性能甚至发生故障(如车联网信息、公安信息等),而其他应用程序可能不需要消息的快速传递(如流媒体的访问、社交APP的交流等)。换句话说,那些实时性强的应用需要比其他应用程序要求更高的QoS。
为满足用户对不同应用不同服务质量的要求,就需要网络能根据用户的要求分配和调度资源,对不同的数据流提供不同的服务质量;对实时性强且重要的数据报文优先处理,对于实时性不强的普通数据报文,提供较低的处理优先级,QoS应运而生。
通常QoS在不同层会有不同的实现方法,而在链路层是通过制定一种优先级通过方案,使每个端口决定链路流量的优先顺序,在IBA中采用Virtual Lane来实现这一功能。
Virtual Lane由发送和接收buffer对组成,且至少需要两对VL,通常VL0作为数据buffer,VL15作为SMP buffer(SMP包负责携带管理设备信息,在后续章节会有相关介绍),VL1—VL14都可以作为数据buffer,具体VL实现个数与设计需求有关,通常为:
具体参数可以在PortInfo.VLCap属性中看到。
每个带有VL的端口实现上述QoS功能都必须依赖SLtoVLMappingTable属性(Service Level to Virtual Lane,服务等级和虚拟通道的映射表),这一属性是子网管理器SM配置子网时在CA、交换机和路由器中设置的。
在传输过程中,每个数据包都包含一个SL字段,用于定义消息发送方所需的优先级,当一个非SMP的数据包被发送到端口的链路层进行传输时,端口的链路层逻辑会根据SLtoVL的映射表来确定数据包需要被放置到哪个数据VL buffer。
链路中存在多个VL buffer,但只有一个物理连接,所以这要求链路层实现一种公平的VL仲裁算法,防止高优先级数据包长时间占据链路,影响低优先级消息的传输。
为了使接收端能将数据包放入对应的VL,在发送侧的VL处,链路层会对数据包插入一个4-bits的VL标识,以标志该数据包属于哪个VL;且只有当接受端对应的接收buffer有足够空间时,发送端VL才能发送数据,两者通过credit机制(一种通过数据包交互来告知对方,本地的buffer是否能够存放下一个数据包)进行空间的通知;
搜索关注我的公众号【IC墨鱼仔】,获取我的更多IC干货分享!