服务器内延迟控制装置、服务器内延迟控制方法以及程序与流程

    技术2025-01-20  48


    本发明涉及服务器内延迟控制装置、服务器内延迟控制方法以及程序。


    背景技术:

    1、以基于nfv(network functions virtualization:网络功能虚拟化)的虚拟化技术的进展等为背景,针对每个服务构建并运用系统。此外,根据上述针对每个服务构建系统的方式,将服务功能分割为可再利用的模块单位,并使其在独立的虚拟机(vm:virtualmachine或容器等)环境上动作,由此,如部件那样根据需要利用并提高运用性这样的被称为sfc(service function chaining:服务功能链)的方式逐渐成为主流。

    2、作为构成虚拟机的技术,已知由linux(注册商标)和kvm(kernel-based virtualmachine:基于内核虚拟机)构成的虚拟机监控程序(hypervisor)环境。在该环境中,嵌入有kvm模块的host os(母操作系统,将安装在物理服务器上的os称为host os)作为虚拟机监控程序在与被称为内核空间的用户空间不同的存储器区域中动作。在该环境中,虚拟机在用户空间中动作,guest os(子操作系统,将安装在虚拟机上的os称为guest os)在该虚拟机中动作。

    3、供guest os动作的虚拟机与供host os动作的物理服务器不同,包括(以以太网(注册商标)卡设备等为代表的)网络设备的所有的hw(hardware:硬件),执行从hw到guestos的中断处理、从guest os到硬件的写入所需的寄存器控制。在这样的寄存器控制中,原本应该由物理硬件来执行的通知、处理被以软件模拟的方式模仿,因此相比于host os环境,性能一般较低。

    4、在该性能劣化的情况下,特别是针对从guest os向存在于自虚拟机外的host os、外部进程,存在削减hw的模仿,通过高速且统一的接口提高通信的性能和通用性的技术。作为该技术,开发了virtio这一设备的抽象化技术即准虚拟化技术,已经嵌入至以linux(注册商标)为首、freebsd(注册商标)等多个通用os中,当前正在被利用。

    5、在virtio中,关于控制台、文件输入输出以及网络通信等数据输入输出,作为传输数据的单向的传输用运输(transport),通过队列的操作来定义由环状缓冲器设计的队列进行的数据交换。并且,利用virtio的队列的技术规格,通过在guest os起动时准备好适合各个设备的队列的个数和大小,能够不执行硬件仿真而只通过队列的操作来实现guest os和自虚拟机外部的通信。

    6、作为服务器内的数据传输技术,有new api(napi)、dpdk(data planedevelopment kit:数据平面开发工具包)以及kbp(kernel busy poll:内核繁忙轮询)。

    7、在new api(napi)中,当数据包到达时,在硬件中断请求之后,通过软件中断请求进行数据包处理(参照非专利文献1)(参照后述图19)。

    8、dpdk在供应用动作的用户空间实现数据包处理功能,从用户空间通过轮询模型在数据包到达时立即进行割取。详细地说,dpdk是用于在用户空间进行以往linux kernel(注册商标)进行的nic(network interface card:网络接口卡)的控制的框架。与linuxkernel中的处理的最大的不同是,具有被称为pmd(pull mode driver:轮询模式驱动)的基于轮询的接收机构。通常,在linux kernel中,响应于向nic的数据的到达而发生中断,并以此为契机执行接收处理。另一方面,pmd由专用线程持续进行数据到达的确认、接收处理。pmd通过排除上下文切换、中断等开销,能够进行高速的数据包处理。dpdk极大地提高了数据包处理的性能和吞吐量,并能为数据平面/应用处理确保更多的时间。不过,dpdk占有性地使用cpu(central processing unit)、nic等计算机资源。

    9、专利文献1中记载了服务器内网络延迟控制装置(kbp:kernel busy poll)。kbp在kernel内通过轮询模型持续监视数据包到达。由此,抑制softirq,实现低延迟的数据包处理。

    10、[基于new api(napi)的rx侧数据包处理]

    11、图19是由linux kernel 2.5/2.6实施的基于new api(napi)的rx侧数据包处理的概略图(参照非专利文献1)。

    12、如图19所示,在具备os70(例如,host os)的服务器上,执行配置于用户能使用的用户空间60的数据处理apl1,new api(napi)在连接于os70的hw10的nic11与数据处理apl1之间进行数据包传输。

    13、os70具有内核71、环状缓冲器72、以及驱动程序73,内核71具有协议处理部74。

    14、内核71是os70(例如,host os)的核心部分的功能,以进程为单位管理硬件的监视、程序的执行状态。在此,内核71能响应来自数据处理apl1的请求,并且能将来自hw10的请求传达给数据处理apl1。内核71经由系统调用(“在非特权模式下动作的用户程序”委托“在特权模式下动作的内核”进行处理)对来自数据处理apl1的请求进行处理。

    15、内核71经由套接字75,向数据处理apl1传递数据包。内核71经由套接字75从数据处理apl1接收数据包。

    16、环状缓冲器72由内核71管理,位于服务器中的存储器空间内。环状缓冲器72是将内核71所输出的消息储存为日志的固定大小的缓冲器,当超过上限大小时,从头开始覆盖。

    17、驱动程序73是用于由内核71进行硬件的监视的设备驱动程序。需要说明的是,驱动程序73依赖于内核71,如果创建的(构建的)内核源代码发生变化,则会变成其他驱动程序。在该情况下,获取相应的驱动程序/源代码,在使用驱动程序的os上重新构建,创建驱动程序。

    18、协议处理部74进行由osi(open systems interconnection:开放系统互连)参照模式定义的l2(数据链路层)/l3(网络层)/l4(传输层)的协议处理。

    19、套接字75是用于内核71进行进程间通信的接口。套接字75具有套接字缓冲器,不会频繁地发生数据的复制处理。经由套接字75建立通信为止的流程如下:1.服务器侧创建接受客户端的套接字文件。2.为接受用套接字文件命名。3.创建套接字/队列。4.接受进入套接字/队列的来自客户端的连接的第一个。5.在客户端侧创建套接字文件。6.从客户端侧向服务器发出连接请求。7.在服务器侧,不同于接受用套接字文件,创建连接用套接字文件。建立通信的结果是,数据处理apl1能向内核71调用read()、write()等系统调用。

    20、在以上的构成中,内核71通过硬件中断(hardirq)领取来自nic11的数据包到达的通知,调度用于数据包处理的软件中断(softirq)。

    21、上述通过linux kernel 2.5/2.6实现的new api(napi)在数据包到达时,在硬件中断(hardirq)之后通过软件中断(softirq)来进行数据包处理。如图19所示,基于中断模型的数据包传输通过中断处理(参照图19的附图标记a)进行数据包的传输,因此发生中断处理的等待,数据包传输的延迟变大。

    22、以下,对napi rx侧数据包处理概要进行说明。

    23、[基于new api(napi)的rx侧数据包处理构成]

    24、图20是对图19的虚线包围的部位的基于new api(napi)的rx侧数据包处理的概要进行说明的图。

    25、<设备驱动程序>

    26、如图20所示,在设备驱动程序配置有:nic11(物理nic),其为网络接口卡;hardirq81,其是通过nic11的处理请求的发生而被调用,执行请求的处理(硬件中断)的处理程序;以及netif_rx82,其是软件中断的处理功能部。

    27、<网络层>

    28、在网络层配置有:softirq83,其是通过netif_rx82的处理请求的发生而被调用,执行请求的处理(软件中断)的处理程序;以及do_softirq84,其是进行软件中断(softirq)的实体的控制功能部。此外,配置有:net_rx_action85,其是响应于软件中断(softirq)而执行的数据包处理功能部;poll_list86,其登记表示来自nic11的硬件中断为哪个设备的中断的网络设备(net_device)的信息;netif_receive_skb87,其创建sk_buff结构体(用于使内核71感知数据包怎样的结构体);以及环状缓冲器72。

    29、<协议层>

    30、在协议层配置有作为数据包处理功能部的ip_rcv88,arp_rcv89等。

    31、上述netif_rx82、do_softirq84、net_rx_action85、netif_receive_skb87、ip_rcv88、以及arp_rcv89是在内核71中用于数据包处理的程序的组件(函数的名称)。

    32、[基于new api(napi)的rx侧数据包处理动作]

    33、图20的箭头(附图标记)b~m表示rx侧数据包处理的流程。

    34、当从对方装置接收到帧内的数据包(或者帧)时,nic11的hardware功能部11a(以下称为nic11)通过dma(direct memory access:直接存储器访问)传输不使用cpu地向环状缓冲器72复制到达的数据包(参照图20的附图标记b)。该环状缓冲器72在服务器中的存储器空间,由内核71(参照图19)进行管理。

    35、但是,仅仅通过nic11向环状缓冲器72复制到达的数据包,内核71无法知晓该数据包。因此,当数据包到达时,nic11将硬件中断(hardirq)上报到hardirq81(参照图20的附图标记c),由netif_rx82执行下述的处理,由此内核71知晓该数据包。需要说明的是,图20的椭圆包围表示的hardirq81表示处理程序而不是功能部。

    36、netif_rx82是实际上进行处理的功能,当hardirq81(处理程序)启动时(参照图20的附图标记d),在poll_list86保存作为硬件中断(hardirq)的内容的信息之一的、表示来自nic11的硬件中断是哪一个设备的中断的网络设备(net_device)的信息。然后,netif_rx82登记队列的割取。在此,队列的割取是指,参照滞留在缓冲器中的数据包的内容,针对该数据包的处理,考虑接下来要进行的处理而从缓冲器删除对应的队列的条目。具体而言,netif_rx82响应于在环状缓冲器72塞满了数据包,使用nic11的驱动程序,将以后的队列的割取登记在poll_list86(参照图20的附图标记e)。由此,在poll_list86登记由于在环状缓冲器72塞满了数据包而进行的队列的割取信息。

    37、如此,在图20的<设备驱动程序>中,当接收到数据包时,nic11通过dma传输向环状缓冲器72复制到达的数据包。此外,nic11启动hardirq81(处理程序),netif_rx82在poll_list86登记net_device,调度软件中断(softirq)。

    38、至此,图20的<设备驱动程序>中的硬件中断的处理停止。

    39、在此之后,netif_rx82使用在poll_list86积累的进入队列的信息(具体而言,指针),将割取储存于环状缓冲器72的数据通过软件中断(softirq)上报到softirq83(处理程序)(参照图20的附图标记f),通知给作为软件中断的控制功能部的do_softirq84(参照图20的附图标记g)。

    40、do_softirq84是软件中断控制功能部,定义软件中断的各功能(数据包处理有多种,中断处理是其中之一。其定义中断处理)。do_softirq84基于该定义,向实际上进行软件中断处理的net_rx_action85通知这次的(对应的)软件中断的委托(参照图20的附图标记h)。

    41、当轮到softirq时,net_rx_action85基于登记在poll_list86的net_device(参照图20的附图标记i),调用用于从环状缓冲器72割取数据包的轮询例程,割取数据包(参照图20的附图标记j)。此时,net_rx_action85继续割取直到poll_list86变空为止。

    42、在此之后,net_rx_action85通知netif_receive_skb87(参照图20的附图标记k)。

    43、netif_receive_skb87创建sk_buff结构体,解析数据包的内容,按类型将处理移交给后一级的协议处理部74(参照图19)。即,netif_receive_skb87解析数据包的内容,在根据数据包的内容进行处理的情况下,将处理移交给<协议层>的ip_rcv88(图20的附图标记l),此外,例如如果是l2则将处理移交给arp_rcv89(图20的附图标记m)。

    44、图21是影像(30fps)的数据传输例。图21所示的工作负荷以传输速率350mbps,每30ms来间歇地进行数据传输。

    45、图22是表示专利文献1中记载的kbp中的、繁忙轮询线程使用的cpu使用率的图。

    46、如图22所示,在kbp中,内核线程进行繁忙轮询,因此占有cpu核心。即使是图21所示的间歇性的数据包接收,在kbp中也始终使用cpu,而无论数据包是否到达,因此存在电力消耗变大的问题。

    47、接着,对dpdk系统进行说明。

    48、[dpdk系统构成]

    49、图23是表示进行具备加速器120的hw110的控制的dpdk系统的构成的图。

    50、dpdk系统具有:hw110;os140;dpdk150,其是配置于用户空间(user space)160上的数据高速传输中间件;以及数据处理apl1。

    51、数据处理apl1是在apl的执行之前进行的数据包处理。

    52、hw110在与数据处理apl1之间进行数据收发的通信。在以下的说明中,如图23所示,将数据处理apl1领取来自hw110的数据包的数据的流动称为rx侧接收,将数据处理apl1向hw110发送数据包的数据的流动称为tx侧发送。

    53、hw110具备加速器120和用于与通信网络连接的nic130(物理nic)。

    54、加速器120是基于来自cpu的输入,高速地进行特定的运算的计算单元硬件。具体而言,加速器120是gpu(graphics processing unit:图形处理器)、fpga(fieldprogrammable gate array:现场可编程门阵列)等pld(programmable logic device:可编程逻辑器件)。在图23中,加速器120具备多个core(core处理器)121、由以先入先出的列表结构保存数据122的rx队列(queue:队列)和tx队列123。

    55、将数据处理apl1的处理的一部分卸载到加速器120,实现仅通过软件(cpu处理)无法达到的性能、功率效率。

    56、假定将如上所述的加速器120应用于构成nfv(network functionsvirtualization:网络功能虚拟化)、sdn(software defined network:软件定义网络)的数据中心等大型服务器集群的情况。

    57、nic130是实现nw接口的nic硬件,具备以先入先出的列表结构保存数据的rx队列131和tx队列132。nic130例如经由通信网络与对方装置170连接,进行数据包收发。

    58、需要说明的是,nic130例如也可以是smartnic,即带加速器的nic。smartnic是可以卸载成为处理能力下降的原因的ip数据包处理等施加负荷的处理来减轻cpu的负荷的nic。

    59、dpdk150是用于在用户空间160进行nic的控制的框架,具体而言由数据高速传输中间件构成。dpdk150具有作为基于轮询的接收机构的pmd(poll mode driver:轮询模式驱动程序)151(能在轮询模式或中断模式下选择数据到达的驱动程序)。就pmd151而言,由专用线程持续地进行数据到达的确认、接收处理。

    60、dpdk150在apl动作的用户空间160中实现数据包处理功能,通过从用户空间160用轮询模型在数据包到达时立即进行割取,可以减小数据包传输延迟。即,dpdk150通过轮询(通过cpu对队列进行繁忙轮询)进行数据包的割取,由此没有等待而延迟小。

    61、在专利文献1中记载了服务器内网络延迟控制装置(kbp:kernel busy poll)。kbp在kernel内通过轮询模型持续监视数据包到达。由此,抑制softirq,实现低延迟的数据包处理。

    62、再者,关于基于中断模型和轮询模型的数据包传输的任一个都存在下述问题。

    63、就中断模型而言,接收到来自hw的事件(硬件中断)的内核通过用于进行数据包加工的软件中断处理来进行数据包传输。因此,中断模型存在以下问题:由于通过中断(软件中断)处理来进行数据包传输,因此如果与其他的中断相冲突、中断目标cpu被优先级更高的进程使用,则发生等待,数据包传输的延迟变大。在该情况下,当中断处理拥挤时,等待延迟变得更大。

    64、例如,基于中断模型的数据包传输通过中断处理进行数据包的传输,因此发生中断处理的等待,数据包传输的延迟变大。

    65、对在中断模型中延迟产生的机制进行补充。

    66、就一般的kernel而言,数据包传输处理是在硬件中断处理之后,通过软件中断处理来传递。

    67、在数据包传输处理的软件中断发生时,在下述条件(1)~(3)下,无法立即执行所述软件中断处理。因此,通过ksoftirqd(是按每个cpu的内核线程,当软件中断的负荷变高时执行)等调度程序来调解,调度中断处理,由此发生ms量级的等待。

    68、(1)与其他的硬件中断处理冲突的情况

    69、(2)与其他的软件中断处理冲突的情况

    70、(3)优先级高的其他进程、内核线程(migration thread等:迁移线程等)在使用中断目标cpu的情况

    71、在上述条件中,无法立即执行所述软件中断处理。

    72、现有技术文献

    73、专利文献

    74、专利文献1:国际公开第2021/130828号

    75、非专利文献

    76、非专利文献1:new api(napi),[online],[令和4年1月11日检索],因特网〈url:http://http://lwn.net/2002/0321/a/napi-howto.php3〉


    技术实现思路

    1、发明所要解决的问题

    2、如专利文献1中记载的服务器内网络延迟控制装置(kbp)那样,在内核内配备了接收用轮询线程(polling thread)的情况下,由于追求通用性,所以难以进行留意到各应用的特性的接收处理。结果上有时会破坏接收处理中的低延迟性、省电性。例如,在上述省电服务器内网络延迟控制装置中,在接收处理结束,下一个数据没有到达的(poll_list为空)情况下,具有使轮询线程立即睡眠的功能。该功能一般预期有提高省电性的效果。另一方面,在应用具有“不需要内核内协议处理,从内核立即领取数据”的特性的情况下,由于接收处理立即完成,poll_list容易变为空,因此即使连续地接收数据也有进入睡眠的情况。作为其结果,由硬件中断导致的唤醒频繁发生,有时会破坏省电性/低延迟性。

    3、本发明是鉴于这样的背景而完成的,本发明的问题在于,对于应用的特性各不相同的应用,在谋求电力消耗的降低的同时,减小服务器内的延迟地进行数据包传输。

    4、用于解决问题的方案

    5、为了解决所述的问题,采用一种服务器内延迟控制装置,配置于用户空间,并启动使用轮询模型监视数据包到达的线程,其特征在于,具备:数据到达监视部,通过轮询监视设备的接收队列,在数据包到达的情况下获取数据;数据到达通知部,向应用程序通知并交接所述数据到达监视部获取到的数据;以及睡眠管理部,在数据包在规定时段没有到达的情况下使所述线程睡眠,并且在数据包到达时通过硬件中断进行该线程的睡眠解除,所述睡眠管理部基于应用程序的特性来控制允许所述硬件中断地进行所述睡眠的定时。

    6、发明效果

    7、根据本发明,对于应用的特性各不相同的应用,也能在谋求电力消耗的降低的同时,减小服务器内的延迟地进行数据包传输。


    技术特征:

    1.一种服务器内延迟控制装置,配置于用户空间,并启动使用轮询模型监视数据包到达的线程,其特征在于,具备:

    2.根据权利要求1所述的服务器内延迟控制装置,其特征在于,

    3.根据权利要求1所述的服务器内延迟控制装置,其特征在于,

    4.根据权利要求1所述的服务器内延迟控制装置,其特征在于,

    5.根据权利要求1所述的服务器内延迟控制装置,其特征在于,

    6.根据权利要求1所述的服务器内延迟控制装置,其特征在于,

    7.一种服务器内延迟控制装置的服务器内延迟控制方法,所述服务器内延迟控制装置配置于用户空间,并启动使用轮询模型监视数据包到达的线程,所述服务器内延迟控制方法的特征在于,

    8.一种程序,用于使计算机作为如权利要求1至6中任一项所述的服务器内延迟控制装置发挥功能。


    技术总结
    服务器内延迟控制装置(200)具备:数据到达通知部(220),向数据处理APL(1)通知并交接数据到达监视部(210)获取到的数据;以及睡眠管理部(230),使轮询线程睡眠,并且在数据包到达时通过硬件中断进行该轮询线程的睡眠解除,睡眠管理部(230)基于应用程序的特性来控制允许硬件中断地进行睡眠的定时。

    技术研发人员:名取广,藤本圭
    受保护的技术使用者:日本电信电话株式会社
    技术研发日:
    技术公布日:2024/10/24
    转载请注明原文地址:https://symbian.8miu.com/read-25274.html

    最新回复(0)