摘要:
随着链接速度的提高和CPU扩展速度的放缓,软件中的数据包调度会导致较低的精度和较高的CPU利用率。
通过将数据包调度卸载到诸如NIC之类的硬件,可以潜在地克服这些缺点。然而为了保持软件分组调度器的灵活性,硬件中的分组调度器必须是可编程的,同时还必须快速且可扩展。
硬件中最先进的数据包调度程序有的折衷了可扩展性(Push-In-First-Out(PIFO)),有的表达了各种数据包调度算法的能力(先进先出(FIFO)) ),即使像PIFO这样的通用调度原语也无法表现出足以表示分组调度算法的某些关键类的能力。
因此在本文中,我们提出了PIFO原语的泛化,称为Push-In-Extract-Out(PIEO),与PIFO一样,它维护元素的有序列表,但与PIFO不同,PIFO只允许从列表的开头出队,PIEO通过支持在出队时基于可编程谓词的过滤,允许从列表中的任意位置出队。
接下来,我们介绍PIEO调度程序的快速且可扩展的硬件设计,并将其原型化在FPGA上,PIEO调度程序比PIFO更具表现力,可扩展性超过30倍。
背景/问题:
数据包调度程序执行一种调度算法或调度策略,该算法或调度策略指定何时以及以什么顺序在网上传输数据包。在软件中实现数据包调度程序可以使用户灵活地快速试验并采用新的调度算法和策略。但是,这种灵活性是以消耗CPU周期为代价的。不幸的是,随着链接速度的增加与CPU速度缩放的减慢之间越来越不匹配,这个问题只会变得更糟。
满足软件中的这些严格要求具有挑战性,这主要是由于不确定的软件处理抖动和缺乏高分辨率软件计时器所致。硬件(例如NIC)中的数据包调度程序可以潜在地克服软件数据包调度程序的上述局限性,但是为了保持软件数据包调度程序的灵活性,硬件中的数据包调度程序必须是可编程的。
硬件中最先进的数据包调度程序基于两个调度原语:
- 先进先出(FIFO),它按到达顺序简单地调度元素。
- 推入先出(PIFO),它通过维护元素的有序列表(基于可编程的秩函数)并始终从有序列表的开头进行调度。
不幸的是,基于这些原语的数据包调度程序要么在可伸缩性(基于PIFO的调度程序)上折衷,要么无法表达各种数据包调度算法(基于FIFO的调度程序),即使是像PIFO这样的通用调度原语,其表达能力也不足以表达某些特定类型的分组调度算法。
解决办法:
我们提出了一种新的硬件可编程分组调度器,该调度器比现有技术具有更快的速度,可扩展的性能和更高的表现力。
为了设计可编程的数据包调度程序,我们了解到,大多数数据包调度算法在调度过程中有两个关键点:
- 当元素(数据包/流)变得适合进行调度时(由某些可编程谓词确定为时间的函数)
- 在符合条件的元素集合中以什么顺序进行调度(由某个可编程秩函数确定)
在任何给定时间,数据包调度算法都会先过滤当时有资格进行调度的元素集(使用谓词函数),然后再从该集合中调度排名最小的元素。因此,大多数数据包调度算法都可以抽象为以下调度策略:在任何给定时间,调度“最小排序的合格”元素。
我们提出了一种新的调度原语,称为Push-In-Extract-Out(PIEO),可以将其视为PIFO原语的概括。 PIEO与每个元素关联一个等级和一个资格谓词,这两者都可以基于调度算法的选择进行编程。接下来,PIEO通过始终根据元素的等级(“ Push-In”原语)将元素排入列表中的适当位置,从而以排名的升序维护元素的有序列表。最后,对于调度,PIEO首先从有条件谓词当时为真的有序列表中筛选出元素的子集,然后以该子集中最小索引处的元素出队(“ Extract-Out”原语)。
因此,PIEO总是安排“排名最低的合格”元素。
此外,我们使用的见解是,对于大多数数据包调度算法而言,可以在入队到有序列表中时计算出元素适合进行调度的时间(teliдible),并且出队时过滤的资格谓词评估通常减少为(tcur r ent≥teliдible),在这里t可以是时间的任何单调递增函数。
这种见解使PIEO调度程序的硬件实现非常有效。
原文地址:https://www.cnblogs.com/chelinger/p/11718043.html