摘要:

随着链接速度的提高和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调度程序的硬件实现非常有效。

论文阅读:Fast, Scalable, and Programmable Packet Scheduler in Hardware的更多相关文章

  1. 快速人体姿态估计:CVPR2019论文阅读

    快速人体姿态估计:CVPR2019论文阅读 Fast Human Pose Estimation 论文链接: http://openaccess.thecvf.com/content_CVPR_201 ...

  2. [论文阅读笔记] metapath2vec: Scalable Representation Learning for Heterogeneous Networks

    [论文阅读笔记] metapath2vec: Scalable Representation Learning for Heterogeneous Networks 本文结构 解决问题 主要贡献 算法 ...

  3. [论文阅读笔记] node2vec Scalable Feature Learning for Networks

    [论文阅读笔记] node2vec:Scalable Feature Learning for Networks 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问题 由于DeepWal ...

  4. [论文阅读笔记] Fast Network Embedding Enhancement via High Order Proximity Approximati

    [论文阅读笔记] Fast Network Embedding Enhancement via High Order Proximity Approximation 本文结构 解决问题 主要贡献 主要 ...

  5. [论文阅读笔记] LouvainNE Hierarchical Louvain Method for High Quality and Scalable Network Embedding

    [论文阅读笔记] LouvainNE: Hierarchical Louvain Method for High Quality and Scalable Network Embedding 本文结构 ...

  6. [置顶] 人工智能(深度学习)加速芯片论文阅读笔记 (已添加ISSCC17,FPGA17...ISCA17...)

    这是一个导读,可以快速找到我记录的关于人工智能(深度学习)加速芯片论文阅读笔记. ISSCC 2017 Session14 Deep Learning Processors: ISSCC 2017关于 ...

  7. 论文阅读笔记 - YARN : Architecture of Next Generation Apache Hadoop MapReduceFramework

    作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 更多论文阅读笔记 http:/ ...

  8. 论文阅读笔记 - Mesos: A Platform for Fine-Grained ResourceSharing in the Data Center

    作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 更多论文阅读笔记 http:/ ...

  9. YOLO 论文阅读

    YOLO(You Only Look Once)是一个流行的目标检测方法,和Faster RCNN等state of the art方法比起来,主打检测速度快.截止到目前为止(2017年2月初),YO ...

随机推荐

  1. springboot2整合zookeeper集成curator

    步骤: 1- pom.xml <dependency> <groupId>org.apache.curator</groupId> <artifactId&g ...

  2. 利用Mocking Framework 单元测试Entity Framework

    一.前言 在实际编写程序时,往往需要与数据库打交道,在单元测试中直接使用数据库又显得太重,如果可以方便的编写一些测试数据,这样更易于检测功能.如何模拟数据库行为便是本篇的主题.微软有教程说明Moq E ...

  3. sql server concat()函数

    concat()函数 --用于将两个字符串连接起来,形成一个单一的字符串 --SELECT CONCAT('FIRST ', 'SECOND') as a;

  4. Docker:Swarm + Stack 一站式部署容器集群

    参考1 参考2 1.注意docker的版本,yum默认安装的版本比较低,可能出现 unsupported Compose file version: 3.7 docker版本升级 2.docker-c ...

  5. 阿里云服务器配置https

    第一步 在阿里云控制台找到申请ssl证书的地址(我申请的是阿里云免费的证书,申请完要等申请通过,可能要等待一两天) 第二步下载ssl nginx版本的证书 第三步上传证书(包含.key, .pem这两 ...

  6. 安装Anaconda3-201812详解

    Anaconda指的是一个开源的Python发行版本,其包含了conda.Python等180多个科学包及其依赖项.  因为包含了大量的科学包,Anaconda 的下载文件比较大(约 531 MB), ...

  7. jq sku实现

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. paramiko:实现ssh协议,对linux服务器资源的访问

    介绍 网络传输是遵循协议的,比如SSH,paramiko则是实现了SSHv2协议的一个python库(底层使用的是cryptography).有了paramiko之后,我们便可以通过python使用s ...

  9. jar包混淆和防反编译工具proguard使用简介

    平时都是用java语言做开发,特殊情况下,需要对编译出的jar包混淆,防止被轻易的反编译出来看到源码,用的proguard工具,下面简单记录一下工具使用过程. 1.下载程序包,可以去https://w ...

  10. tp5实现Redis的简单使用

    方法1: Controller <?php namespace app\index\controller; use think\Controller; use think\session\dri ...