CN108121598A - 套接字缓存资源管理方法及装置 - Google Patents

套接字缓存资源管理方法及装置 Download PDF

Info

Publication number
CN108121598A
CN108121598A CN201611076225.0A CN201611076225A CN108121598A CN 108121598 A CN108121598 A CN 108121598A CN 201611076225 A CN201611076225 A CN 201611076225A CN 108121598 A CN108121598 A CN 108121598A
Authority
CN
China
Prior art keywords
skb
recyclable
socket
cache resources
buffer pool
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201611076225.0A
Other languages
English (en)
Inventor
梁建适
刘玉雪
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ZTE Corp
Original Assignee
ZTE Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ZTE Corp filed Critical ZTE Corp
Priority to CN201611076225.0A priority Critical patent/CN108121598A/zh
Publication of CN108121598A publication Critical patent/CN108121598A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明实施例提供一种套接字缓存资源的管理方法及装置,套接字缓存资源的管理装置会预先建立缓冲池,该缓冲池中存储有可回收skb。当套接字缓存资源的管理装置接收到skb分配申请后,可以直接从缓冲池中获取可回收的skb,并在对skb的引用计数值增加修改后进行分配。根据该方案,在需要分配skb的时候,不必向内核skb slab cache申请skb,从而避免了向内核skb slab cache申请skb所导致的等待时间长以及消耗***性能的问题,维护了***性能,缩短了skb分配申请的响应时间,进而提高了用户体验。

Description

套接字缓存资源管理方法及装置
技术领域
本发明涉及通信领域,尤其涉及套接字缓存资源管理方法及装置。
背景技术
Linux作为一种网络操作***被广泛的应用于服务器、PC工作站以及各种终端设备中。当Linux应用于服务器设备时,主要是承担网络服务功能,特别是在电子商务和视频网站中,对服务器的网络服务性能提出了更高要求。
传统的Linux网络服务中,当需要发送一个数据报文时,需要从内核的skb slabcache中申请一个skb(socket buffer,套接字缓存资源)数据结构,skb是Linux中一种重要的数据结构,它表示接收或发送数据包的包头信息。在对申请的skb进行管理的时候,常常会使用“引用计数”这一概念,在引用计数的管理机制当中,当一个新的引用指向对象时,引用计数器将会以一个递增粒度进行递增,当去掉一个引用时,引用计数器就以一个递减粒度进行递减,递增粒度与递减粒度相同。因此,当对skb的所有引用都释放后,引用计数就会变成零,该skb就将释放占有的资源。
下面以递增粒度或递减粒度为1时进行说明,在***在根据skb分配申请分配skb的时候,就会认为当前有一个引用指向该skb,因此,将skb的引用计数值为1,在分配之后的数据发送过程中,当一个新的引用指向该skb的时候,skb的引用计数值将会变为2……相应地,当一个引用不再指向该skb的时候,该skb的引用计数值就会减1。当数据发送完成后,指向skb的引用释放完成,skb的引用计数值将变为0,网卡驱动会择机进行skb清理或者释放,通常skb是被直接返回给***的skb slab cache。当发送下一个数据报文时,需要重新从skb slab cache中申请一个skb数据结构,直到硬件发送完成后进行释放回收。
在Linux协议栈skb管理中,对skb的分配和释放,都会消耗***的能力,特别是在skb的分配流程中,随着网络服务器并发用户的增多,网络服务带宽越来越高,同时对skb的使用频率也就越来越高,skb的分配会成为***网络能力的瓶颈。另外一方面,尽管使用者不关心skb的释放时机和流程,但是***在释放skb的效率比较低,而且资源释放过程中,也会伴随着***性能的消耗,从而影响到***对其他进程的处理。
发明内容
本发明实施例提供的套接字缓存资源管理方法及装置,主要解决的技术问题是:解决现有技术中使用的skb(套接字缓存资源)只能来源于skb slab cache,并在释放后也只能回到skb slab cache这种管理机制导致***性能在skb分配和释放过程中会被大量消耗,另外由于网络服务对skb的需求量较高,因此skb的分配速率会导致网络服务出现瓶颈,使用户等待时间延长,降低了用户体验。
为解决上述技术问题,本发明实施例提供一种套接字缓存资源管理方法,包括:
接收到套接字缓存资源分配申请后,从所述缓冲池中获取可回收套接字缓存资源,所述可回收套接字缓存资源为***预先分配的待引用套接字缓存资源;
对提取的所述可回收套接字缓存资源的引用计数值进行增加修改;
分配所述可回收套接字缓存资源以响应所述套接字缓存资源分配申请。
本发明实施例还提供一种套接字缓存资源管理装置,包括:
提取模块,用于接收到套接字缓存资源分配申请后,从所述缓冲池中获取可回收套接字缓存资源,所述可回收套接字缓存资源为***预先分配的待引用套接字缓存资源;
修改模块,用于对提取的所述可回收套接字缓存资源的引用计数值进行增加修改;
分配模块,用于分配所述可回收套接字缓存资源以响应所述套接字缓存资源分配申请。
本发明实施例还提供一种计算机存储介质,所述计算机存储介质中存储有计算机可执行指令,所述计算机可执行指令用于执行前述的任一项的套接字缓存资源管理方法。
本发明的有益效果是:
根据本发明实施例提供的套接字缓存资源的管理方法、装置以及计算机存储介质,套接字缓存资源的管理装置会预先建立缓冲池,该缓冲池中存储有可回收skb。当套接字缓存资源的管理装置接收到skb分配申请后,可以直接从缓冲池中获取可回收的skb,并在对skb的引用计数值增加修改后进行分配。根据该方案,在需要分配skb的时候,不必向内核skb slab cache申请skb,从而避免了向内核skb slab cache申请skb所导致的等待时间长以及消耗***性能的问题,维护了***性能,缩短了skb分配申请的响应时间,进而提高了用户体验。
附图说明
图1为本发明实施例一提供的套接字缓存资源管理方法的一种流程图;
图2为本发明实施例一的一个示例中回收可回收套接字缓存资源的一种流程图;
图3为本发明各实施例中缓冲池的一种示意图;
图4为本发明实施例二提供的套接字缓存资源管理装置的一种结构示意图;
图5为本发明实施例二提供的套接字缓存资源管理装置的另一种结构示意图;
图6为本发明实施例二提供的服务器的一种硬件结构示意图;
图7为本发明实施例三提供的套接字缓存资源管理方法的一种流程图。
具体实施方式
下面通过具体实施方式结合附图对本发明实施例作进一步详细说明。
实施例一:
为了解决现有技术中对skb的管理必须依赖于内核skb slab cache消耗***性能的分配,从而导致***性能消耗大的问题,以及由于网络服务对skb的使用需求比较大,但向内核skb slab cache申请skb的速率并不会随着用户对skb需求的增长而增长,因此导致网络服务遭遇瓶颈,数据发送速率收到限制,从而使得用户等待的时间变长,用户体验下降的问题,本实施例将会提出一种套接字缓存资源管理方法,该管理方法可以由套接字缓存资源管理装置来实施,下面请参见图1:
S102、套接字缓存资源管理装置接收到skb分配申请后,从缓冲池中提取可回收skb。
在需要使用skb的时候,套接字缓存资源管理装置接收到skb分配申请,按照现有的管理原则,分配申请是直接向***内核提出的,应当有***内核在接收到申请之后,从skb slab cache中获取skb进行分配。但是在本实施例中,套接字缓存资源管理装置可以从缓冲池中提取可回收skb。
缓冲池由套接字缓存资源管理装置在接收到skb分配申请之前创建,其中存储着至少一个可回收skb,可回收skb实际来源于***内核的skb slab cache。缓冲池中的可回收skb可以来自于***内核,例如,在套接字缓存资源管理装置创建缓冲池之后,向***内核进行申请,请求***内核预分配至少一个skb,分配出的skb不会直接参与数据发送,而是先存储到缓冲池中,也就是说,存储到缓冲池中的skb虽然被引用一次,但该引用并不是用于数据发送的,也就是还没有被分配出去用于提供服务的时候,存储到缓冲池中的skb的初始引用计数值为1。这就是为什么***分配的skb存储到缓冲池中,就会变成可回收的skb的原因。另外,缓冲池中的可回收skb也可以来自于其他缓冲池,例如套接字缓存资源管理装置在创建一个新的缓冲池之后,可以向其他已经建立完成的缓冲池申请skb并存储到新建缓冲池中。可以理解的是,当一个缓冲池中的skb来自于其他缓冲池时,该缓冲池中skb的初始引用计数值大于1。
可以理解的是,在本实施例中,当不存在可回收skb的时候,套接字缓存资源管理装置也可以直接向***内核的skb slab cache中获取skb并进行分配。这一类skb就属于不可回收skb,因为***分配之后就直接提供服务了,其没有初始引用计数值,因此,当对其所有的引用都被释放之后,其引用计数值必然变为0,而根据规定,引用计数值为0的skb需要被网卡驱动释放到skb slab cache中。
S104、套接字缓存资源管理装置对提取的可回收skb的引用计数值进行增加修改。
通常,对于***分配的skb的引用计数值等于其被引用次数。对于由***分配后就为数据发送进行服务的skb而言,在引用释放过程中,所有的引用都会被释放掉,直至该skb的引用计数值变为0为止,当skb的引用计数值为0的时候,网卡驱动会将该skb回收到内核skb slab cache中。
而可回收skb与***分配后就直接参与数据发送的skb有所不同,这主要是由于可回收的skb是由***预先分配到缓冲池中并存储的。与直接分配出去用于数据发送的skb类似,***在预先分配skb的时候,也会默认为该skb已被引用一次,因此,分配并存储到缓冲池中的skb在为数据发送之前,其引用计数值的就已经大于0,存储在缓冲池中的skb因为其初始引用计数值大于0,因此为可回收skb。当可回收skb被根据skb分配申请分配出去之后,其引用计数值是在初始引用计数值的基础上进行递增。和***分配skb类似的是,套接字缓存资源管理装置从缓冲池中分配的skb在分配的时候也会默认已经被引用一次,例如,缓冲池中的skb的初始引用计数值为1,则套接字缓存资源管理装置在接收到skb分配申请,并从缓冲池中提取一个可回收skb进行分配的时候,会对该可回收skb的引用计数值进行增加修改,使得可回收skb的引用计数值为2。所以,按照现有协议规定,当对可回收skb的引用减少之后需要按照递减粒度进行减少,即使对可回收skb的引用全部都不存在之后,可回收skb的引用计数值依然不会变为0,这就使得网卡驱动不会将使用完成后的skb回收到内核skbslab cache中。
S106、套接字缓存资源管理装置分配可回收skb以响应skb分配申请。
套接字缓存资源管理装置对可回收skb的引用计数值进行增加修改后就可以根据skb分配申请将该可回收skb分配出去。
在本实施例的一种示例当中,可回收skb在被分配出去之后还能进行回收复用,下面将结合图2对该示例中的skb回收过程进行详细阐述:
S202、套接字缓存资源管理装置对分配出的各可回收skb的引用计数值进行检测。
套接字缓存资源管理装置还应当对已经分配出去的各可回收skb的引用计数值进行检测,这种检测主要是为了能够在已经分配出去的可回收skb的各引用都释放完成之后能够将可回收的skb回收到缓冲池中,以供循环利用。
由于分配出去的skb不仅包括从缓冲池中的可回收skb,还很有可能包括直接从***中分配出去的、用于数据发送的skb。例如,当缓冲池中的可回收skb不足时,直接向***申请的skb,这些skb是不可回收的skb。但套接字缓存资源管理装置只需要对可回收skb进行回收,因此,套接字缓存资源管理装置只需要对可回收skb的引用计数值进行检测。为了保证套接字缓存资源管理装置仅对可回收skb的引用计数值进行检测,能够快速确定出哪些skb是可回收skb,因此,在本实施例中,在套接字缓存资源管理装置从缓冲池中提取出可回收skb并进行分配的时候,可以为将要分配的skb设置一个可回收标志,在后续的检测过程中,就只需要对拥有可回收标识的skb进行检测。
S204、套接字缓存资源管理装置确定可回收skb引用计数值等于缓冲池中可回收skb的初始引用计数值时,回收该skb并存储到缓冲池中。
当套接字缓存资源管理装置检测到某一个具有可回收标识的skb的引用计数值等于可回收skb的初始引用计数值之后,就可以将该可回收到缓冲池中,以供后续接收到新的skb源分配申请后分配复用。
在本实施例中,套接字缓存资源管理装置是先确定哪些skb属于可回收skb,然后再确定这些可回收skb的引用计数值是否等于缓冲池中skb的初始引用计数值。但应当明白的是,套接字缓存资源管理装置也可以先确定哪些skb的引用计数值满足等于缓冲池中可回收skb的初始引用计数值的条件,然后确定满足条件的skb是否具有可回收标志,如果是,则直接确定该skb当前应当被回收到缓冲池中去,否则,则表明该skb是不可回收skb,可以等到对其的引用全部都释放完成之后再由网卡驱动进行释放。
如果当前正在使用的skb来自不同的缓冲池,也就是说提供可回收skb的缓冲池包括多个时,套接字缓存资源管理装置可以为来自不同缓冲池的可回收skb设置不同的可回收标识,以便在回收过程中能够准确回收,例如,为从第一缓冲池中的skb设置的可回收标识为“A”,为从第二缓冲池中的skb设置的可回收标识为“B”。
为了让套接字缓存资源管理装置在检测到某一skb的引用计数值等于可回收的skb的初始引用计数值时,下面给出一种对从缓冲池中提取出的skb进行回收的实现方式:
当接收到skb分配申请,并确定缓冲池中存在可回收skb的时候,从缓冲池中提取出skb,提取出的skb的引用计数值应当递增一次,因为在执行skb分配的时候默认skb已经被引用一次。也就是说如果递增粒度为1的话,此时skb的引用计数值应当变成2了,尽管当前该skb才初次被引用。另外可以为提取出的skb构造一个自定义控制结构体,构造自定义控制结构体的时候可以采用sk_buff结构体的成员cb(control buffer,控制)进行。包含一个可回收标志和skb释放钩子函数,可回收标识用于表征该skb来源于缓冲池中,是可回收的skb。而skb释放钩子函数用于把引用计数值等于可回收skb初始引用计数值的可回收skb返回到缓冲池中。下面实处一种利用cb构造的控制结构体以供参考:
struct dev_skb_cb
{
unsigned short usFlag;
unsigned char ucReserved[30];
void skb_list;
viod(*skb_callback)(struct sk_buff*skb);
}_aligned(8);
本实施例中的缓冲池可以为无锁的缓冲池,因为在缓冲池无锁的情况下,当套接字缓存资源管理装置接收到skb分配申请后,可以直接从缓冲池中提取skb使用,不用经历其他鉴权或者是验证的过程,能够在很大程度上提高skb的分配效率,从而提高数据发送效率,间接地减少用户的等待时间,提高用户体验。
缓冲池的管理可以通过队列的形式进行,如图3所示,在一个网络设备中包括多个CPU,在这多个CPU当中,每个CPU都有一个队列形式的缓冲池。队列中的可回收的skb依据“先进先出,后进后出”的原则被分配,显而易见的是,与队列有着相似管理原则的数据栈也可以对缓冲池进行管理,以栈的形式进行管理的缓冲池中的可回收skb依照“先进后出,后进先出”被分配。
在NUMA(Non Uniform Memory Access Architecture,非统一内存访问)模式下,处理器访问它自己的本地存储器的速度比非本地存储器快一些,因为NUMA是一种用于多处理器的电脑记忆体设计,内存访问时间取决于处理器的内存位置。因此,在本实施例中,套接字缓存资源管理装置可以通过非统一内存访问方式从本地缓冲池中提取出套接字缓存资源,以便提高skb的分配效率。另外针对服务器等有多个CPU的网络设备,套接字缓存资源管理装置在接收到skb分配申请从缓冲池中提取出套接字缓存资源并进行分配之前可以先对skb分配申请进行分析,确定该申请是属于哪一个CPU的,当确定出对应CPU之后,可以从该CPU对应的缓冲池中提取出skb进行分配,可以理解的是,在这种情况下,应当为每一个CPU创建设置一个缓冲池,然后使针对每一个CPU的skb分配申请都可以通过NUMA方式进行响应,从而让提高服务器等网络设备的整体响应速度。
本发明实施例提供的套接字缓存资源管理方法,利用可回收skb的初始引用计数值不为0,因此引用计数值也永远不会为0,不会被网卡驱动释放到skb slab cache的特点,在存在可回收的skb的情况下,通过获取可回收skb进行分配来响应skb分配申请,避免了向***内核申请skb消耗***性能的问题,让***可以减少在skb分配和释放上消耗的性能,从而在其他方面更好的为用户提供服务,在一定程度上优化了资源配置。同时也解决了现有技术中因skb分配瓶颈而导致的数据传输效率降低,用户等待时间长,从而用户体验度低的问题。
实施例二:
对应于实施例一提供的套接字缓存资源管理方法,本实施例对实施该方法的套接字缓存资源管理装置进行介绍,下面将结合附图来阐述,以使本领域技术人员对该管理方法的优点和细节更加清楚,请参见图4:
本实施例提供的套接字缓存资源管理装置40包括提取模块402、修改模块404和分配模块406。提取模块402用于在接收到skb分配申请后,提取可回收的skb;修改模块404对提取的可回收skb的引用计数值进行增加修改;分配模块406,用于分配可回收skb以响应skb分配申请。
在需要使用skb的时候,提取模块402接收到skb分配申请,按照现有的管理原则,分配申请是直接向***内核提出的,应当有***内核在接收到申请之后,从skb slabcache中获取skb进行分配。但是在本实施例中,提取模块402可以从缓冲池中提取可回收skb。
缓冲池由提取模块402在接收到skb分配申请之前创建,其中存储着至少一个可回收skb,可回收skb实际来源于***内核的skb slab cache。缓冲池中的可回收skb可以来自于***内核,例如,在提取模块402创建缓冲池之后,向***内核进行申请,请求***内核预分配至少一个skb,分配出的skb不会直接参与数据发送,而是先存储到缓冲池中,也就是说,存储到缓冲池中的skb虽然被引用一次,但该引用并不是用于数据发送的,也就是还没有被分配出去用于提供服务的时候,存储到缓冲池中的skb的初始引用计数值为1。这就是为什么***分配的skb存储到缓冲池中,就会变成可回收的skb的原因。另外,缓冲池中的可回收skb也可以来自于其他缓冲池,例如提取模块402在创建一个新的缓冲池之后,可以向其他已经建立完成的缓冲池申请skb并存储到新建缓冲池中。可以理解的是,当一个缓冲池中的skb来自于其他缓冲池时,该缓冲池中skb的初始引用计数值大于1。
可以理解的是,在本实施例中,当不存在可回收skb的时候,提取模块402也可以直接向***内核的skb slab cache中获取skb并进行分配。这一类skb就属于不可回收skb,因为***分配之后就直接提供服务了,其没有初始引用计数值,因此,当对其所有的引用都被释放之后,其引用计数值必然变为0,而根据规定,引用计数值为0的skb需要被网卡驱动释放到skb slab cache中。
通常,对于***分配的skb的引用计数值等于其被引用次数。对于由***分配后就为数据发送进行服务的skb而言,在引用释放过程中,所有的引用都会被释放掉,直至该skb的引用计数值变为0为止,当skb的引用计数值为0的时候,网卡驱动会将该skb回收到内核skb slab cache中。
而可回收skb与***分配后就直接参与数据发送的skb有所不同,这主要是由于可回收的skb是由***预先分配到缓冲池中并存储的。与直接分配出去用于数据发送的skb类似,***在预先分配skb的时候,也会默认为该skb已被引用一次,因此,分配并存储到缓冲池中的skb在为数据发送之前,其引用计数值的就已经大于0。存储在缓冲池中的skb因为其初始引用计数值大于0,因此为可回收skb。当可回收skb被根据skb分配申请分配出去之后,其引用计数值是在初始引用计数值的基础上进行递增。和***分配skb类似的是,提取模块402从缓冲池中分配的skb在分配的时候,修改模块404也会默认已经被引用一次,例如,缓冲池中的skb的初始引用计数值为1,则提取模块402在接收到skb分配申请,并从缓冲池中提取一个可回收skb进行分配的时候,修改模块404会将该可回收skb的引用计数值会对该可回收skb的引用计数值进行增加修改,使得可回收skb的引用计数值为2。所以,按照现有协议规定,当对可回收skb的引用减少之后需要按照递减粒度进行减少,即使对可回收skb的引用全部都不存在之后,可回收skb的引用计数值依然不会变为0,这就使得网卡驱动不会将使用完成后的skb回收到内核skb slab cache中。
分配模块406在修改模块404对可回收skb的引用计数值进行增加修改后就可以根据skb分配申请将该可回收skb分配出去。
在本实施例的一种示例当中,如图5所示,套接字缓存资源管理装置40还包括检测模块408和回收模块410,检测模块408和回收模块410可以实现对可回收skb的回收:
检测模块408用于对分配出的各可回收skb的引用计数值进行检测,这种检测主要是为了能够在已经分配出去的可回收skb的各引用都释放完成之后能够将可回收的skb回收到缓冲池中,以供循环利用。而回收模块410用于检测模块408确定可回收skb引用计数值等于缓冲池中可回收skb的初始引用计数值时,回收该skb并存储到缓冲池中。
由于分配出去的skb不仅包括从缓冲池中的可回收skb,还很有可能包括直接从***中分配出去的、用于数据发送的skb。例如,当缓冲池中的可回收skb不足时,直接向***申请的skb,这些skb是不可回收的skb。但回收模块410只需要对可回收skb进行回收,因此,检测模块408只需要对可回收skb的引用计数值进行检测。为了保证检测模块408仅对可回收skb的引用计数值进行检测,能够快速确定出哪些skb是可回收skb,因此,在本实施例中,在从缓冲池中提取出可回收skb并进行分配的时候,提取模块402可以为将要分配的skb设置一个可回收标志,在后续的检测过程中,检测模块408就只需要对拥有可回收标识的skb进行检测。
当检测模块408检测到某一个具有可回收标识的skb的引用计数值等于可回收skb的初始引用计数值之后,回收模块410就可以将该可回收到缓冲池中,以供后续接收到新的skb源分配申请后分配复用。
在本实施例中,检测模块408是先确定哪些skb属于可回收skb,然后再确定这些可回收skb的引用计数值是否等于缓冲池中skb的初始引用计数值。但应当明白的是,检测模块408也可以先确定哪些skb的引用计数值满足等于缓冲池中可回收skb的初始引用计数值的条件,然后确定满足条件的skb是否具有可回收标志,如果是,则回收模块410直接确定该skb当前应当被回收到缓冲池中去,否则,则表明该skb是不可回收skb,可以等到对其的引用全部都释放完成之后再由网卡驱动进行释放。
如果当前正在使用的skb来自不同的缓冲池,也就是说提供可回收skb的缓冲池包括多个时,提取模块402可以为来自不同缓冲池的可回收skb设置不同的可回收标识,以便在回收过程中能够准确回收,例如,提取模块402为从第一缓冲池中的skb设置的可回收标识为“A”,为从第二缓冲池中的skb设置的可回收标识为“B”。
下面给出一种对从缓冲池中提取出的skb进行回收的实现方式:
当提取模块402接收到skb分配申请,并确定缓冲池中存在可回收skb的时候,从缓冲池中提取出skb,提取出的skb的引用计数值应当递增一次,因为在执行skb分配的时候默认skb已经被引用一次。也就是说如果递增粒度为1的话,此时skb的引用计数值应当变成2了,尽管当前该skb才初次被引用。另外,分配模块402可以为提取出的skb构造一个自定义控制结构体,构造自定义控制结构体的时候可以采用sk_buff结构体的成员cb(controlbuffer,控制)进行。包含一个可回收标志和skb释放钩子函数,可回收标识用于表征该skb来源于缓冲池中,是可回收的skb。而skb释放钩子函数用于把引用计数值等于可回收skb初始引用计数值的可回收skb返回到缓冲池中。下面实处一种利用cb构造的控制结构体以供参考:
struct dev_skb_cb
{
unsigned short usFlag;
unsigned char ucReserved[40];
void skb_list;
viod(*skb_callback)(struct sk_buff*skb);
}_aligned(8);
本实施例中提取模块402创建的缓冲池可以为无锁的缓冲池,因为在缓冲池无锁的情况下,当提取模块402接收到skb分配申请后,可以直接从缓冲池中提取skb使用,不用经历其他鉴权或者是验证的过程,能够在很大程度上提高skb的分配效率,从而提高数据发送效率,间接地减少用户的等待时间,提高用户体验。
缓冲池的管理可以通过队列的形式进行,如图2所示,在一个网络设备中包括多个CPU,在这多个CPU当中,每个CPU都有一个队列形式的缓冲池。队列中的可回收的skb依据“先进先出,后进后出”的原则被分配,显而易见的是,与队列有着相似管理原则的数据栈也可以对缓冲池进行管理,以栈的形式进行管理的缓冲池中的可回收skb依照“先进后出,后进先出”被分配。
在NUMA模式下,处理器访问它自己的本地存储器的速度比非本地存储器快一些,因为NUMA是一种用于多处理器的电脑记忆体设计,内存访问时间取决于处理器的内存位置。因此,在本实施例中,提取模块402可以通过非统一内存访问方式从本地缓冲池中提取出套接字缓存资源,以便提高skb的分配效率。另外针对服务器等有多个CPU的网络设备,提取模块402在接收到skb分配申请从缓冲池中提取出套接字缓存资源之前可以先对skb分配申请进行分析,确定该申请是属于哪一个CPU的,当确定出对应CPU之后,可以从该CPU对应的缓冲池中提取出skb进行分配,可以理解的是,在这种情况下,应当为每一个CPU创建设置一个缓冲池,然后使针对每一个CPU的skb分配申请都可以通过NUMA方式进行响应,从而让提高服务器等网络设备的整体响应速度。
由于本实施例中的套接字缓存资源管理装置40主要是针对Linux***中进行数据发送时所使用的skb进行管理,而Linux广泛应用在服务器中,因此,本实施例中以套接字缓存资源管理装置40部署在服务器上为例对实现本实施例中套接字缓存资源管理装置40的硬件结构进行介绍:
下面请参考图6,图6示出的是一种服务器,该服务器6至少包括:输入输出(IO)总线61、处理器62、存储器63、内存64和通信装置65。其中,
输入输出(IO)总线61分别与自身所属的服务器的其它部件(处理器62、存储器63、内存64和通信装置65)连接,并且为其它部件提供传送线路。
处理器62通常控制自身所属的服务器的总体操作。例如,处理器62执行计算和确认等操作。其中,处理器62可以由多个中央处理器(CPU)构成。
通信装置65,通常包括一个或多个组件,其允许自身所属的服务器与无线通信***或网络之间的无线电通信。
存储器63存储处理器可读、处理器可执行的软件代码,其包含用于控制处理器62执行本文描述的功能的指令(即软件执行功能)。
其中,本发明提供的套接字缓存资源管理装置中,提取模块、修改模块、分配模块、检测模块和回收模块的功能可以均通过处理器62实现,实现提取模块、修改模块、分配模块、检测模块和回收模块的功能的软件代码可存储在存储器63中,并由处理器62执行或编译后执行。
本发明实施例提供的套接字缓存资源管理装置,利用可回收skb的初始引用计数值不为0,因此引用计数值也永远不会为0,不会被网卡驱动释放到skb slab cache的特点,在存在可回收的skb的情况下,通过获取可回收skb进行分配来响应skb分配申请,避免了向***内核申请skb消耗***性能的问题,让***可以减少在skb分配和释放上消耗的性能,从而在其他方面更好的为用户提供服务,在一定程度上优化了资源配置。同时也解决了现有技术中因skb分配瓶颈而导致的数据传输效率降低,用户等待时间长,从而用户体验度低的问题。
实施例三:
下面结合一个具体的示例对实施例一和实施例二中提供的套接字缓存资源管理方法与装置做进行一步的介绍,请结合图7:
S701、创建缓冲池并向***内核申请skb存储到缓冲池中。
本实施例中缓冲池以无锁队列的形式进行管理,便于接收到skb分配申请之后可以直接提取,提高分配效率。
***内核预分配的skb的引用计数值等于1,因此,存储到缓冲池中的skb尽管还未参与数据发送工作,即还未被引用的时候,其引用计数值就已经不为0了,这些skb是可回收skb。
S702、接收到skb分配申请时,从缓冲池中提取出可回收skb进行分配。
被提取出的可回收skb的引用计数值应当递增1次,引用计数值可以用refcnt表示,这一点和***分配skb一样,都可以在分配skb的时候就默认该skb被引用1次了,因此,当前可回收skb的引用计数值为:
refcnt=初始引用计数值+1=2。
同时需要根据cb为该可回收skb构造控制结构体,具体的,详细的构造方式可以参见实施例一或者实施例二的介绍,在控制结构体当中应当包括表征该skb为可回收skb的可回收标识和用于将该skb回收到缓冲池中的释放钩子函数。控制结构体可以修改Linux内核skb释放函数的流程:
修改consume_skb函数、kfree_skb函数和dev_kfree_skb_irq函数,在原有流程当中,当一个skb的refcnt=0的时候,网卡驱动将会调用consume_skb函数、kfree_skb函数和dev_kfree_skb_irq函数将该skb释放到会释放掉,但在refcnt等于0之前,并不会做任何操作。在修改之后,当skb refcnt=1时,判断skb是否具有可回收标识,如果是,则调用skb释放钩子函数,把skb返回给对应cpu的缓冲池,否则,不做任何处理。
S703、检测各个已经分配出去的skb的引用计数值是否等于1。
已经分配出的skb包括可回收的和不可回收的skb,之所以检测这些skb的引用计数值是否等于1,主要是由于在本实施例中可回收skb的初始引用计数值就是1。
当是时,执行S704,否则继续执行S703。
S704、判断引用计数值等于1的skb是否具有可回收标识。
判断的时候可以通过该skb控制结构体中usFlag的只来确定,假定本实施例中在提取出可回收skb的时候,为期设置的usFlag值为1,则在检测流程当中也要usFlag值为1的skb才能被确认为可回收skb。
是,则执行S705,否则结束流程。
S705、调用skb释放钩子函数将skb回收到缓冲池中。
由于缓冲池是无锁队列的形式,因此可回收skb在缓冲池中被以“先进先出,后进后出”的原则进行管理,当接收新的skb分配申请之后,提取出的skb应当是最先进入当缓冲池中的那个skb。
本实施例提供的套接字缓存资源管理方案,通过预先创建缓冲池,冰箱***申请,使***内核预分配一些skb进行存储,因此在后续需要使用skb的情境下,不用花费时间向***进行申请,提高了分配效率,进而提高了数据发送侠侣。而且,由于存储到缓冲池中的skb是可回收skb,因此,这些skb在被分配出去参与数据发送之后,还可以被回收回来,继续存储到缓冲池中,以循环的方式源源不断地提供服务,减少了对***性能的损耗,优化资源配置。
显然,本领域的技术人员应该明白,上述本发明实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在计算机存储介质(ROM/RAM、磁碟、光盘)中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。所以,本发明不限制于任何特定的硬件和软件结合。
以上内容是结合具体的实施方式对本发明实施例所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。

Claims (10)

1.一种套接字缓存资源管理方法,包括:
接收到套接字缓存资源分配申请后,从所述缓冲池中提取可回收套接字缓存资源,所述可回收套接字缓存资源为***预先分配的待引用套接字缓存资源;
对提取的所述可回收套接字缓存资源的引用计数值进行增加修改;
分配所述可回收套接字缓存资源以响应所述套接字缓存资源分配申请。
2.如权利要求1所述的套接字缓存资源管理法,其特征在于,所述缓冲池为无锁缓冲池。
3.如权利要求2所述的套接字缓存资源管理方法,其特征在于,所述缓冲池以队列或数据栈的形式进行管理。
4.如权利要求1所述的套接字缓存资源管理方法,其特征在于,提取存储在缓冲池中的套接字缓存资源作为可回收的套接字缓存资源并进行分配之前还包括:
创建缓冲池并向***申请至少一个套接字缓存资源存储到所述缓冲池中;存储到所述缓冲池中的所述套接字缓存资源为初始引用计数值为1的可回收套接字缓存资源;
或,
创建缓冲池并从其他缓冲池中申请至少一个套接字缓存资源存储到所述缓冲池中;存储到所述缓冲池中的所述套接字缓存资源为初始引用计数值大于1的可回收套接字缓存资源。
5.如权利要求1所述的套接字缓存资源管理方法,其特征在于,从所述缓冲池中获取可回收套接字缓存资源包括:
确定接收到的套接字缓存资源分配申请所属的CPU;
从确定出的所述CPU本地的缓冲池中提取出套接字缓存资源作为可回收的套接字缓存资源。
6.如权利要求1-5任一项所述的套接字缓存资源管理方法,其特征在于,分配所述可回收套接字缓存资源之后还包括:
对分配出的各所述可回收套接字缓存资源的引用计数值进行检测;
可回收套接字缓存资源引用计数值等于在缓冲池中可回收套接字缓存资源的初始引用计数值时,回收所述套接字缓存资源并存储到缓冲池中,以供后续接收到新的套接字缓存资源分配申请后分配复用。
7.如权利要求6所述的套接字缓存资源管理方法,其特征在于,从所述缓冲池中获取可回收套接字缓存资源进行分配包括:
从所述缓冲池中提取出可回收套接字缓存资源,并为所述可回收套接字缓存资源设置可回收标识;
对分配出的各所述可回收套接字缓存资源的引用计数值进行检测包括:
对具有可回收标识的套接字缓存资源的引用计数值进行检测。
8.一种套接字缓存资源管理装置,其特征在于,包括:
提取模块,用于接收到套接字缓存资源分配申请后,从所述缓冲池中获取可回收套接字缓存资源,所述可回收套接字缓存资源为***预先分配的待引用套接字缓存资源;
修改模块,用于对提取的所述可回收套接字缓存资源的引用计数值进行增加修改;
分配模块,用于分配所述可回收套接字缓存资源以响应所述套接字缓存资源分配申请。
9.如权利要求8所述的套接字缓存资源管理装置,其特征在于,还包括:
检测模块,用于对分配出的各所述可回收套接字缓存资源的引用计数值进行检测;
回收模块,用于当检测到某一套接字缓存资源为可回收套接字缓存资源,且其引用计数值等于该套接字缓存资源在缓冲池中的初始引用计数值时,回收所述套接字缓存资源并存储到缓冲池中,以供后续接收到新的套接字缓存资源分配申请后分配复用。
10.如权利要求9所述的套接字缓存资源管理装置,其特征在于,所述提取模块用于从所述缓冲池中提取出可回收套接字缓存资源,并为所述可回收套接字缓存资源设置可回收标识;
所述检测模块用于对具有可回收标识的套接字缓存资源的引用计数值进行检测。
CN201611076225.0A 2016-11-29 2016-11-29 套接字缓存资源管理方法及装置 Pending CN108121598A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201611076225.0A CN108121598A (zh) 2016-11-29 2016-11-29 套接字缓存资源管理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201611076225.0A CN108121598A (zh) 2016-11-29 2016-11-29 套接字缓存资源管理方法及装置

Publications (1)

Publication Number Publication Date
CN108121598A true CN108121598A (zh) 2018-06-05

Family

ID=62226049

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201611076225.0A Pending CN108121598A (zh) 2016-11-29 2016-11-29 套接字缓存资源管理方法及装置

Country Status (1)

Country Link
CN (1) CN108121598A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112702426A (zh) * 2020-12-23 2021-04-23 北京天融信网络安全技术有限公司 数据包转发方法、装置、电子设备及存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040003085A1 (en) * 2002-06-26 2004-01-01 Joseph Paul G. Active application socket management
CN102143037A (zh) * 2010-06-23 2011-08-03 华为技术有限公司 一种处理报文的方法和装置
CN102223307A (zh) * 2011-06-29 2011-10-19 中兴通讯股份有限公司 一种处理套接字的方法、分组数据传输的方法及装置
CN102546437A (zh) * 2012-02-20 2012-07-04 南京邮电大学 一种面向物联网平台的套接字实现方法
CN103166994A (zh) * 2011-12-14 2013-06-19 腾讯科技(深圳)有限公司 获取网络数据的方法及装置
CN103441999A (zh) * 2013-08-21 2013-12-11 好耶网络科技(上海)有限公司 一种套接字连接池控制方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040003085A1 (en) * 2002-06-26 2004-01-01 Joseph Paul G. Active application socket management
CN102143037A (zh) * 2010-06-23 2011-08-03 华为技术有限公司 一种处理报文的方法和装置
CN102223307A (zh) * 2011-06-29 2011-10-19 中兴通讯股份有限公司 一种处理套接字的方法、分组数据传输的方法及装置
CN103166994A (zh) * 2011-12-14 2013-06-19 腾讯科技(深圳)有限公司 获取网络数据的方法及装置
CN102546437A (zh) * 2012-02-20 2012-07-04 南京邮电大学 一种面向物联网平台的套接字实现方法
CN103441999A (zh) * 2013-08-21 2013-12-11 好耶网络科技(上海)有限公司 一种套接字连接池控制方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112702426A (zh) * 2020-12-23 2021-04-23 北京天融信网络安全技术有限公司 数据包转发方法、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
CN101848203B (zh) 用于从网络适配器向主机***传送数据的方法和***
US20140282589A1 (en) Quota-based adaptive resource balancing in a scalable heap allocator for multithreaded applications
CN105511954A (zh) 一种报文处理方法及装置
CN110389905B (zh) 资源释放方法、资源分配方法、设备和计算机程序产品
CN105159841B (zh) 一种内存迁移方法及装置
CN112527509B (zh) 一种资源分配方法、装置、电子设备及存储介质
CN109614223A (zh) 硬件资源调度方法、装置及硬件资源调度设备
CN107436798A (zh) 一种基于numa节点的进程访问方法及装置
Chen et al. Latency minimization for mobile edge computing networks
CN110909978A (zh) 资源处理方法、装置、服务器及计算机可读存储介质
CN114155026A (zh) 一种资源分配方法、装置、服务器及存储介质
CN114564435A (zh) 异构多核芯片的核间通信方法、装置及介质
CN111857992A (zh) 一种Radosgw模块中线程资源分配方法和装置
KR20220025746A (ko) 컴퓨팅 자원의 동적 할당
CN111586140A (zh) 一种数据交互的方法及服务器
US11709707B2 (en) Low latency distributed counters for quotas
CN103823712A (zh) 一种多cpu虚拟机***的数据流处理方法和装置
CN108121598A (zh) 套接字缓存资源管理方法及装置
CN103645959A (zh) 电信实时***多进程共享内存池交互组件和方法
CN110445580B (zh) 数据发送方法及装置、存储介质、电子装置
CN115033904A (zh) 数据处理方法、装置、***、介质和产品
CN104468701B (zh) 一种用于异构存储集群***的i/o服务质量维护方法
CN106227600A (zh) 一种基于能量感知的多维虚拟资源分配方法
US20200192667A1 (en) Arithmetic processing device, and control method for arithmetic processing device
US10678455B2 (en) System and method for increased efficiency thin provisioning with respect to garbage collection

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
WD01 Invention patent application deemed withdrawn after publication
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20180605