CN117271141A - 资源更新系统、装置及网络设备 - Google Patents
资源更新系统、装置及网络设备 Download PDFInfo
- Publication number
- CN117271141A CN117271141A CN202311552277.0A CN202311552277A CN117271141A CN 117271141 A CN117271141 A CN 117271141A CN 202311552277 A CN202311552277 A CN 202311552277A CN 117271141 A CN117271141 A CN 117271141A
- Authority
- CN
- China
- Prior art keywords
- thread
- shared resource
- preset
- resource
- count
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 claims abstract description 43
- 230000006870 function Effects 0.000 claims description 62
- 239000013598 vector Substances 0.000 claims description 10
- 238000004590 computer program Methods 0.000 claims description 6
- 238000004891 communication Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000003860 storage Methods 0.000 description 4
- 230000009286 beneficial effect Effects 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 239000000725 suspension Substances 0.000 description 2
- 230000032683 aging Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000004064 recycling Methods 0.000 description 1
- 238000009987 spinning Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation 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/5016—Allocation 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提出一种资源更新系统、装置及网络设备。该系统包括:第一线程、第二线程和第三线程;第一线程检测到待更新的第一共享资源时,创建第二共享资源,并将第一共享资源的更新计数加1;第三线程检测到更新计数变更时,检测是否存在访问第一共享资源的第二线程;若不存在,则注销第一共享资源;若存在,则保持第一共享资源。本申请在更新第一共享资源的过程中并不注销第一共享资源,而是在确定不存在访问的第二线程的情况下才注销,如此能够避免第二线程访问到被注销的第一共享资源的情况发生。而且对第一共享资源的更新无需加锁,第二线程对报文处理不会中断,从而不会因资源更新而产生报文处理断流或丢包的问题,提高了报文处理效率。
Description
技术领域
本申请涉及通信技术领域,更为具体来说,本申请涉及一种资源更新系统、装置及网络设备。
背景技术
VPP(Vector Packet Processing,矢量数据包处理)是对报文进行批量处理的技术。VPP支持多线程,多个线程通常分布在CPU(Central Processing Unit,中央处理器)的多个内核上。其中,一个线程负责对各级转发表项、节点编排等进行管理维护,将该线程称为第一线程。其他各线程均用于处理报文,其他各线程均称为第二线程。
在VPP技术中,各第二线程均需使用内存池、向量等共享资源。相关技术中,在共享资源需要更新时,第一线程创建更新后的共享资源,并注销更新前的共享资源。在此更新过程中,各第二线程将暂停对报文的处理自旋等待,直至第一线程完成对共享资源的更新,各第二线程才继续对报文进行处理。
但上述相关技术中,在更新共享资源的过程中第二线程无法处理报文,会降低报文处理效率,甚至导致报文处理断流、丢包等问题。
发明内容
基于上述技术缺陷,本申请提出了一种资源更新系统、装置及网络设备,在更新第一共享资源的过程中并不立即注销第一共享资源,而是在确定不存在访问的第二线程的情况下才注销第一共享资源,如此能够避免第二线程访问到被注销的第一共享资源的情况发生。且对第一共享资源的更新无需加锁,从而不会因资源更新而产生报文处理断流或丢包的问题,提高了报文处理效率。
本申请第一方面提供了一种资源更新系统,包括:第一线程、第二线程和第三线程;
所述第一线程,用于检测到待更新的第一共享资源时,创建第二共享资源,并将所述第一共享资源的更新计数加1;
所述第三线程,用于检测到所述更新计数变更时,检测是否存在访问所述第一共享资源的所述第二线程;若不存在,则注销所述第一共享资源;若存在,则保持所述第一共享资源。
本申请第二方面提供了一种资源更新装置,包括上述第一方面所述的资源更新系统。
本申请第三方面提供了一种网络设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器运行所述计算机程序以实现如第一方面所述的资源更新系统的操作。
本申请的有益效果至少包括:
在本申请实施例中,在更新第一共享资源的过程中并不注销第一共享资源,而是检测第二线程访问第一共享资源的访问状态,在有访问的第二线程的情况下先不注销第一共享资源。在不存在访问的第二线程的情况下才注销第一共享资源,如此能够避免第二线程访问到被注销的第一共享资源的情况发生。而且对第一共享资源的更新无需加锁,第二线程对报文处理不会中断,从而不会因资源更新而产生报文处理断流或丢包的问题,提高了报文处理效率。
附图说明
构成说明书的一部分的附图描述了本申请的实施例,并且连同描述一起用于解释本申请的原理。
参照附图,根据下面的详细描述,可以更加清楚地理解本申请,其中:
图1示出了本申请一示例性实施例提供的VPP批量处理报文的示意图;
图2示出了本申请一示例性实施例提供的一种资源更新系统的结构示意图;
图3示出了本申请一示例性实施例提供的内存池更新的流程示意图;
图4示出了本申请一示例性实施例所提供的一种网络设备的结构示意图。
具体实施方式
以下,将参照附图来描述本申请的实施例。但是应该理解的是,这些描述只是示例性的,而并非要限制本申请的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本申请的概念。对于本领域技术人员来说显而易见的是,本申请可以无需一个或多个这些细节而得以实施。在其他的例子中,为了避免与本申请发生混淆,对于本领域公知的一些技术特征未进行描述。
应予以注意的是,这里所使用的术语仅是为了描述具体实施例,而非意图限制根据本申请的示例性实施例。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式。此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在所述特征、整体、步骤、操作、元件和/或组件,但不排除存在或附加一个或多个其他特征、整体、步骤、操作、元件、组件和/或它们的组合。
现在,将参照附图更详细地描述根据本申请的示例性实施例。然而,这些示例性实施例可以多种不同的形式来实施,并且不应当被解释为只限于这里所阐述的实施例。附图并非是按比例绘制的,其中为了清楚表达的目的,可能放大了某些细节,并且可能省略了某些细节。图中所示出的各种区域、层的形状以及它们之间的相对大小、位置关系仅是示例性的,实际中可能由于制造公差或技术限制而有所偏差,并且本领域技术人员根据实际所需可以另外设计具有不同形状、大小、相对位置的区域/层。
下面描述根据本申请的示例性实施方式。需要注意的是,下述实施方式仅是为了便于理解本申请的精神和原理而示出,本申请的实施方式在此方面不受任何限制。相反,本申请的实施方式可以应用于适用的任何场景。
VPP是对报文进行批量处理的技术,能够提升报文转发性能。报文的整个生命周期可以被分割为多个阶段,如报文的接收、以太处理、IP模块处理等,采用VPP技术处理报文,则每个阶段都处理一批报文,如接收一批报文,之后对这批报文进行以太处理等,每个阶段对一批报文处理完成后再对报文进行下一个阶段的处理,直至完成对该批报文所有阶段的处理,将该批报文批量转发出去。
如图1所示,fooA、fooB、fooC是VPP中负责执行不同阶段报文处理的处理模块,从图中可以看出,fooA阶段批量处理完1到256个报文,才把这一批256个报文交给下一个阶段fooB。类似地,fooB阶段批量处理完1到256个报文,才把这一批256个报文交给下一个阶段fooC。
VPP支持多线程,在多线程模式下,第一线程具有管理功能,负责维护各级转发表项及节点编排等,一个或者多个第二线程负责处理报文。多个线程一般分布在CPU的多个内核上,比如第一线程运行在CPU内核1上,多个第二线程分别运行在内核2、3、4、……上。
多个第二线程在处理报文过程中,需要查询转发表项、邻接表、链路层信息等表项或信息,以便将报文转发给下一跳节点。这些表项或信息存储在内存池中的内存块中,或者以向量或数组等形式进行存储并提供给第二线程访问。本申请实施例中将内存池、向量、数组等称为共享资源。第一线程负责对这些共享资源进行管理,在共享资源不够用时第一线程需要扩展新的共享资源。例如,在有新的数据需要存储到内存池中,而内存池中没有空闲的内存块时就需要对内存池进行更新,以提供更多的内存块。
在相关技术中,VPP多线程之间数据同步采用的是类似于带信号和超时机制的自旋锁。在出现需要更新的共享资源时,由第一线程创建更新后的共享资源,并注销更新前的共享资源。在此更新过程中,各个第二线程会暂停对报文的处理,此时各第二线程处于自旋状态,直至第一线程完成对共享资源的更新之后,各第二线程才能继续对报文进行处理。如此,每次更新共享资源,第二线程都无法处理报文,会降低报文处理效率,甚至会使具有时效要求的报文因第二线程暂停处理而超时导致业务断流,第二线程暂停处理还可能导致丢包等问题。
基于此,本申请的一些实施例提供一种资源更新系统,在出现需要更新的第一共享资源时,由第一线程创建第二共享资源,第三线程检测是否存在访问第一共享资源的第二线程,在有访问的第二线程的情况下先不注销第一共享资源。只有在不存在访问的第二线程的情况下才注销第一共享资源。
这样第一线程对第一共享资源的更新无需加锁,第二线程对报文处理不会中断,从而不会因资源更新而产生报文处理断流或丢包的问题,提高了报文处理效率。而且第三线程在检测到没有访问第一共享资源的第二线程的情况下才注销第一共享资源,而不是由第一线程在创建出第二共享资源的同时或之后立即注销,从而避免了第二线程访问到被注销的第一共享资源的情况发生。
如图2所示,该资源更新系统包括第一线程101、第二线程102和第三线程103;
第一线程101,用于检测到待更新的第一共享资源时,创建第二共享资源,并将第一共享资源的更新计数加1;
第三线程103,用于检测到更新计数变更时,检测是否存在访问第一共享资源的第二线程102;若不存在,则注销第一共享资源;若存在,则保持第一共享资源。
本申请实施例的资源更新系统可以采用VPP技术对报文进行转发处理。该资源更新系统更新系统可以应用于能够对报文进行转发的设备,如路由器、网关或能够用于报文转发的虚拟机等。该资源更新系统的CPU具有多个内核,一个内核上运行至少一个线程,本申请实施例将该资源更新系统中的其中一个线程称为第一线程101,第一线程101具有管理功能,负责维护与报文转发相关的内存池、向量或数组等共享资源。上述第一共享资源和第二共享资源包括内存池、向量或数组中的至少一种。本申请实施例将上述多个内核运行的线程中,负责对报文进行处理的多个线程称为第二线程102.本申请实施例的资源更新系统中还设置第三线程103,由第三线程103检测第一共享资源的更新计数,并在检测到第一共享资源的更新计数变更时检测是否存在访问第一共享资源的第二线程102,并在不存在访问第一共享资源的第二线程102的时候注销第一共享资源。
与报文转发相关的内存池、向量或数组等共享资源可以用于存储转发表、邻接表等于报文转发相关的表项或信息等。当资源更新系统获得新的转发表项或邻接表等信息时,需要将新的信息存储在对应的共享资源中,随着信息的不断存储共享资源中的剩余资源会越来越少,当共享资源中没有能够存储新的信息的剩余资源时就需要对共享资源进行扩展,以提供更多资源来存储信息。
例如,内存池中包括多个内存块,内存块可以用来存储信息,当存在需要存储的新信息,而内存池中已没有空闲的内存块时就需要对内存池进行更新,以提供更多的空闲内存块来存储信息。
在本申请实施例中,与报文转发相关的转发表、邻接表等信息的存储以及内存池、数组等共享资源的管理都是由第一线程101负责的。第二线程102在报文处理过程中会访问这些共享资源,系统中为第二线程102提供了共享资源对应的全局参数,该全局参数可以是共享资源在内存中的首地址或地址区间等。第二线程102需要访问共享资源时读取该共享资源对应的全局参数的参数值,基于该全局参数的参数值寻址到该共享资源进行访问。
当第一线程101检测到出现待更新的第一共享资源时,第一线程101直接创建出第二共享资源。具体地,第一线程101申请创建资源规模更大的第二共享资源,将第一共享资源中已存储的数据全部拷贝到第二共享资源中,将第一共享资源对应的全局参数的参数值由第一共享资源的参数值修改为第二共享资源的参数值。
例如,对于内存池的扩展,第一线程101申请比原先的内存池更大的内存空间,基于该更大的内存空间划分出比原先的内存池更多的内存块,将原先的内存池中每个内存块中存储的信息全部拷贝到新创建的内存池的内存块中,拷贝数据之后新创建的内存池中还会剩余多个空闲的内存块,以备后续存储信息使用。第一线程101将内存池对应的全局参数中的首地址,由原先的内存池的首地址修改为新创建的内存池的首地址。
在上述第一共享资源的更新过程中,直接由第一线程10创建了第二共享资源,没有加锁,也没有直接注销第一共享资源。因此在更新过程中第二线程102无需等待自旋锁或读写锁等锁操作的时间,第二线程102可以持续地对报文进行处理,不会因第一共享资源的更新导致报文处理断流或丢包等问题的发生,提高了报文处理效率。而且因为第一共享资源没有被第一线程101直接注销,所以不会出现第二线程102访问到注销后的目标共享资源的情况,进一步减少因目标共享资源更新而导致报文处理出错的情况。
在第二共享资源创建完成并修改对应的全局参数的参数值之前,可能有第二线程102已经读取了第一共享资源对应的全局参数的参数值,因为更新过程中没有直接由第一线程101注销第一共享资源,所以读取到第一共享资源的参数值的第二线程102还可以根据读取到的参数值访问第一共享资源。
也就是说,在本申请实施例中,会存在系统中是同时有第一共享资源和第二共享资源的阶段,在该阶段中读取到第一共享资源对应的全局参数的参数值的第二线程102访问第一共享资源,全局参数重置后读取到第二共享资源对应的全局参数的参数值的第二线程102访问第二共享资源。
上述全局参数重置后,后续需要访问的第二线程102都将访问第二共享资源,第三线程103就可以在没有第二线程102访问第一共享资源的情况下及时注销第一共享资源,从而及时释放出第一共享资源占用的系统资源。
资源更新系统中设置第三线程103,第三线程103用于执行URCU(User-spaceRead-Copy Update,用户态读-拷贝修改)模块来检测是否存在访问第一共享资源的第二线程102。
将URCU模块应用于VPP多核多线程的报文转发过程中,通过URCU模块检测是否存在访问第一共享资源的第二线程102,进而自动识别第一共享资源的注销时机,如此无需在第一线程101更新第一共享资源时注销第一共享资源,不会出现访问到被注销的第一共享资源的第二线程102。且整个过程中无需加锁,第二线程102对报文的处理不受影响,提高了报文处理效率,减少了因共享资源更新导致报文处理出错或断流的情况发生。
上述URCU模块中定义了多个函数,各第二线程102运行过程中调用这些函数来处理报文。通过URCU模块可以检测第二线程102对这些函数的调用情况,进而识别是否存在访问第一共享资源的第二线程102。
在一些实施例中,第三线程103定义了预设注册函数。第二线程102,用于在初始化过程中,调用预设注册函数向第三线程103传输第二线程102的线程标识和线程状态参数;线程状态参数用于表示第二线程102是否处于上线状态;第二线程102用于在处于上线状态且调用预设注册函数后处理报文。第三线程103还用于,接收第二线程102传输的线程标识和线程状态参数,并写入预设全局链表中。
URCU-QSBR(Quiescent-State-Based RCU)是URCU的一种实现方式,上述预设注册函数可以是通过URCU-QSBR实现的。预设注册函数可以是函数rcu_register_thread,该函数为URCU-QSBR的锁注册函数,第二线程102在初始化时可以调用该函数进行URCU-QSBR锁的注册,第二线程102调用URCU-QSBR锁注册后会传入第二线程102的线程标识和线程状态参数,该线程状态参数用于指示第二线程102处于上线状态或下线状态。例如,线程状态参数的参数值为TRUE,则指示第二线程102处于上线状态。若线程状态参数的参数值为FALSE,则指示第二线程102处于下线状态。
在本申请的一些实施例中,第三线程103还定义了预设静默期函数。第二线程102还用于,在处理报文过程中,每间隔第一预设时长调用预设静默期函数,将第二线程102对第一共享资源的读取计数赋值为变更后的更新计数。第三线程103还用于,在第二线程102调用预设静默期函数时,在预设全局链表中记录第二线程102对应的调用标识和/或赋值后的读取计数;调用标识用于指示第二线程102已调用预设静默期函数。
上述预设静默期函数可以是rcu_quiescent_state,该函数是URCU-QSBR的设置静默期的函数。第二线程102注册上线后周期性地调用此函数。
第一线程101创建第二共享资源后会将第一共享资源对应的更新计数加1。第二线程102调用预设静默期函数时会将自身维护的对第一共享资源的读取计数赋值为上述更新计数的值。
因此在第一线程101创建出第二共享资源之前,第二线程102的读取计数都是与变更前的更新计数的取值一致的,这时候第二线程102访问的都是第一共享资源。当第一线程101创建出第二共享资源,更新计数加1后,第二线程102调用预设静默期函数将自身的读取计数赋值为加1后的更新计数,这之后第二线程102访问的是第二共享资源。所以检测更新计数变更后处于上线状态的第二线程102是否调用了预设静默期函数,或者检测更新计数变更后处于上线状态的第二线程102对第一共享资源的读取计数是否与变更后的更新计数一致,即可确定是否存在访问第一共享资源的第二线程102。在所有处于上线状态的第二线程102均调用了预设静默期函数,或所有处于上线状态的第二线程102对第一共享资源的读取计数均与变更后的更新计数一致后,即可确定不存在访问第一共享资源的第二线程102了,此时才会注销第一共享资源。
具体地,第三线程103还用于,从预设全局链表中,获取各第二线程102的线程信息,预设全局链表用于记录注册到第三线程103的各第二线程102的信息;基于各第二线程102的线程信息,确定是否存在访问第一共享资源的第二线程102。
在一些实施例中,第三线程103还用于,判断各第二线程102的线程信息中是否均包含调用标识,该调用标识用于指示第二线程102已调用第三线程103定义的预设静默期函数;如果是,则确定当前不存在访问第一共享资源的第二线程102;如果否,则确定当前存在访问第一共享资源的第二线程102。
在另一些实施例中,第三线程103还用于,判断各第二线程102的线程信息中的读取计数是否均与变更后的更新计数相等,如果是,则确定当前不存在访问第一共享资源的第二线程102;如果否,则确定当前存在访问第一共享资源的第二线程102。
第二线程102调用预设注册函数后,预设全局链表中记录了注册的每个第二线程102的线程标识以及线程状态参数。第二线程102注册上线后开始处理报文,每间隔第一预设时长调用一次预设静默期函数。第一预设时长可以为5ms、10ms等。
第二线程102调用预设静默期函数后,第三线程103通过URCU模块可以在预设全局链表中设置用于标识第二线程102调用了预设静默期函数的调用标识。在第一线程101创建出第二共享资源后,第三线程103通过URCU模块检测到所有处于上线状态的第二线程102都设置了上述调用标识时,确定当前不存在调用第一共享资源的第二线程102。
在另一些实现方式中,第二线程102调用预设静默期函数将自身的读取计数赋值为变更后的更新计数的值,当第三线程103通过URCU模块检测到所有处于上线状态的第二线程102的读取计数均与变更后的更新计数的取值相同时,确定当前不存在调用第一共享资源的第二线程102。
通过将URCU模块应用到VPP的多线程报文处理过程中,从而能够通过URCU模块对第二线程102的状态进行实时检测,进而实现能够准确检测第一共享资源的注销时机。
只要第二线程102上线对报文进行处理,就需要访问共享资源,第二线程102还用于,在读取计数赋值为变更后的更新计数之前,基于第一共享资源处理报文;在读取计数赋值为变更后的更新计数之后,基于第二共享资源处理报文。
在创建出第二共享资源前,全局参数的参数值还是第一共享资源的参数值,因此第二线程102读取第一共享资源的参数值,进而访问第一共享资源。在创建出第二共享资源后,第一线程101已经将全局参数重置为第二共享资源的参数值,因此这时候上线的第二线程102读取到的是第二共享资源的参数值,进而访问第二共享资源。其中,上述全局参数为共享资源的首地址。
由于更新过程中第一线程101没有直接注销第一共享资源,因此就算在更新过程中第二线程102读取到的全局参数为第一共享资源的参数值,也可以访问第一共享资源,成功从第一共享资源中读取到数据,而不会访问到已被注销的第一共享资源。
在上述第二线程102的运行过程中,由第三线程103检测是否存在访问第一共享资源的第二线程102的检测过程可以包括,通过URCU模块检测第二线程102对URCU模块定义的预设函数的调用情况,预设函数包括预设注册函数及预设静默期函数。根据第二线程102对应的调用情况,确定第二线程102对第一共享资源的访问状态。
通过上述介绍可知,只要在第一线程101将更新计数加1后,已注册且上线的第二线程102调用预设静默期函数,就表明该第二线程102不再需要访问第一共享资源了,该第二线程102后续会访问第二共享资源。所以只要检测在更新计数加1后已注册且上线的第二线程102是否调用了预设静默期函数,即可确定第二线程102是否正在访问第一共享资源。在所有已注册且上线的第二线程102均调用了预设静默期函数之后,即可确定当前已不存在访问第一共享资源的第二线程102。
而且对于调用预设注册函数的第二线程102,均在预设全局链表中记录第二线程102的线程标识及线程状态参数,对于调用预设静默期函数,则在预设全局链表中记录第二线程102对应的调用标识或读取计数。所以第三线程103通过URCU基于第二线程102对预设函数的调用情况来维护预设全局链表,基于预设全局链表中记录的第二线程的信息,确定第二线程102的调用情况,进而确定第二线程102对第一共享资源的访问状态。
由于上线的第二线程102在报文处理过程中均需要访问共享资源,上述第二线程102的调用情况是在第一线程101将更新计数加1后检测的。若第二线程102对应的调用情况指示第二线程102未调用预设静默期函数,则确定第二线程102对第一共享资源的访问状态为正在访问;若第二线程102的调用情况指示第二线程102调用了预设静默期函数,则确定第二线程102对第一共享资源的访问状态为未正在访问。
也就是说,预设全局链表中记录的所有处于上线状态且未调用预设静默期函数的第二线程102的访问状态均为正在访问第一共享资源。而预设全局链表中处于上线状态且已调用过预设静默期函数的第二线程102的访问状态均为未正在访问第一共享资源。在预设全局链表中所有处于上线状态的第二线程102均调用过预设静默期函数后,确定当前不存在访问第一共享资源的第二线程102。
第三线程103检测到仍存在访问第一共享资源的第二线程102的情况下,继续对各第二线程102的访问状态进行检测。若检测到当前不存在访问第一共享资源的第二线程102,则注销第一共享资源。
在不存在访问第一共享资源的第二线程102的情况下,第三线程103释放第一共享资源所占用的系统资源,从而把这部分系统资源回收利用。
在本申请实施例中,第一线程101在更新第一共享资源的过程中并不注销第一共享资源,而是由第三线程103检测第二线程102访问第一共享资源的访问状态,在有访问的第二线程102的情况下先不注销第一共享资源。只有在不存在访问的第二线程102的情况下才注销第一共享资源,如此能够避免第二线程102访问到被注销的第一共享资源的情况发生。而且对第一共享资源的更新无需加锁,第二线程102对报文处理不会中断,从而不会因资源更新而产生报文处理断流或丢包的问题,提高了报文处理效率。
为了便于理解本申请实施例提供的资源更新系统,下面以第一共享资源为内存池进行举例说明。
内存池是基于vector向量动态数组和bitmap位图的,用来存放定长用户数据存储结构。内存池主要用于需要频繁申请和释放固定大小内存的场合。内存释放时先释放到池里面,再次申请内存的时候,从池里面获取,提升效率。这样做也能有效减少内存碎片的产生。
用于报文转发的设备获得新的转发表项时,需要将转发表项存储在内存池中。若内存池当前的剩余存储空间不足,则需要更新内存池。具体处理过程可以为如图3所示的处理流程。
S1:第一线程101调用内存池的pool_get_aligned函数,传入内存池首地址。
S2:第一线程101判断传入的内存池首地址是否为有效的首地址,如果是,执行步骤S3,如果否,执行步骤S5。
S3:第一线程101判断该首地址对应的内存池中当前是否存在空闲的内存块,如果是,执行步骤S4,如果否,则执行步骤S5。
S4: 第一线程101从该内存池中分配一个空闲的内存块,将上述转发表项存储在该内存块中。
S5: 第一线程101申请新的内存池,从旧内存池中拷贝所有数据到新的内存池中,将内存池对应的全局参数中的首地址修改为新的内存池的首地址,以及将内存池对应的更新计数加1;从新的内存池中分配一个空闲的内存块,将上述转发表项存储在该内存块中。
S6:第三线程103在检测到内存池的更新计数变更时通过URCU模块检测是否存在访问旧内存池的第二线程102,如果是,则继续执行步骤S6,如果否,则执行步骤S7。
S7:第三线程103注销旧内存池。
在该示例的多核并发操作的情况下,第三线程103利用URCU延迟释放内存的原理,转发表项添加导致内存池扩展时,可以采用URCU的方式释放旧内存池,避免内存池更新过程中加锁,避免报文转发断流。
本申请实施例还提供一种资源更新装置,该装置包括上述任一实施例中的资源更新系统。
该资源更新系统包括:第一线程、第二线程和第三线程;
第一线程,用于检测到待更新的第一共享资源时,创建第二共享资源,并将第一共享资源的更新计数加1;
第三线程,用于检测到更新计数变更时,检测是否存在访问第一共享资源的第二线程;若不存在,则注销第一共享资源;若存在,则保持第一共享资源。
第三线程定义预设注册函数;第二线程,用于在初始化过程中,调用预设注册函数向第三线程传输第二线程的线程标识和线程状态参数;线程状态参数用于表示第二线程是否处于上线状态;在处于上线状态且调用预设注册函数后处理报文;第三线程还用于,接收第二线程传输的线程标识和线程状态参数,并写入预设全局链表中。
第三线程还定义预设静默期函数;第二线程还用于,在处理报文过程中,每间隔第一预设时长调用预设静默期函数,将第二线程对第一共享资源的读取计数赋值为变更后的更新计数;第三线程还用于,在第二线程调用预设静默期函数时,在预设全局链表中记录第二线程对应的调用标识和/或赋值后的读取计数;调用标识用于指示第二线程已调用预设静默期函数。
第三线程还用于,从预设全局链表中,获取各第二线程的线程信息,预设全局链表用于记录注册到第三线程的各第二线程的信息;基于各第二线程的线程信息,确定是否存在访问第一共享资源的第二线程。
第三线程还用于,判断各第二线程的线程信息中是否均包含调用标识,调用标识用于指示第二线程已调用第三线程定义的预设静默期函数;如果是,则确定当前不存在访问第一共享资源的第二线程;如果否,则确定当前存在访问第一共享资源的第二线程。
第三线程还用于,判断各第二线程的线程信息中的读取计数是否均与变更后的更新计数相等,如果是,则确定当前不存在访问第一共享资源的第二线程;如果否,则确定当前存在访问第一共享资源的第二线程。
第二线程还用于,在读取计数赋值为变更后的更新计数之前,基于第一共享资源处理报文;在读取计数赋值为变更后的更新计数之后,基于第二共享资源处理报文。
上述第一共享资源包括内存池、向量和数组中的一种或多种。
本申请实施例提供的资源更新装置与本申请实施例提供的资源更新系统出于相同的申请构思,具有与其采用、运行或实现的系统相同的有益效果。
下面请参考图4,其示出了本申请的一些实施方式所提供的一种网络设备的示意图。如图4所示,所述网络设备7包括:处理器700,存储器701,总线707和通信接口703,所述处理器700、通信接口703和存储器701通过总线707连接;所述存储器701中存储有可在所述处理器700上运行的计算机程序,所述处理器700运行所述计算机程序时执行本申请前述任一实施方式所提供的资源更新系统的操作。
其中,存储器701可能包含高速随机存取存储器(RAM:Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口703(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网、广域网、本地网、城域网等。
总线707可以是ISA总线、PCI总线或EISA总线等。所述总线可以分为地址总线、数据总线、控制总线等。其中,存储器701用于存储程序,所述处理器700在接收到执行指令后,执行所述程序,前述本申请实施例任一实施方式揭示的资源更新系统的功能可以应用于处理器700中,或者由处理器700实现。
处理器700可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述系统的各步骤可以通过处理器700中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器700可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各系统、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的系统的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器701,处理器700读取存储器701中的信息,结合其硬件完成上述系统的步骤。
本申请实施例提供的网络设备与本申请实施例提供的资源更新系统出于相同的申请构思,具有与其采用、运行或实现的系统相同的有益效果。
需要说明的是:在此提供的算法和显示不与任何特定计算机、虚拟装置或者其它设备有固有相关。各种通用装置也可以与基于在此的示教一起使用。根据上面的描述,构造这类装置所要求的结构是显而易见的。此外,本申请也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本申请的内容,并且上面对特定语言所做的描述是为了披露本申请的最佳实施方式。
类似地,应当理解,为了精简本申请并帮助理解各个申请方面中的一个或多个,在上面对本申请的示例性实施例的描述中,本申请的各个特征有时被一起分组到单个实施例、图或者对其的描述中。然而,并不应将该公开的系统解释成反映如下意图:即所要求保护的本申请要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,申请方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本申请的单独实施例。
本申请的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器( DSP )来实现根据本申请实施例的虚拟机的创建装置中的一些或者全部部件的一些或者全部功能。本申请还可以实现为用于执行这里所描述的系统的一部分或者全部的设备或者装置程序。实现本申请的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
以上所述,仅为本申请较佳的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (10)
1.一种资源更新系统,其特征在于,所述系统包括:第一线程、第二线程和第三线程;
所述第一线程,用于检测到待更新的第一共享资源时,创建第二共享资源,并将所述第一共享资源的更新计数加1;
所述第三线程,用于检测到所述更新计数变更时,检测是否存在访问所述第一共享资源的所述第二线程;若不存在,则注销所述第一共享资源;若存在,则保持所述第一共享资源。
2.根据权利要求1所述的系统,其特征在于,所述第三线程定义预设注册函数;
所述第二线程,用于在初始化过程中,调用所述预设注册函数向所述第三线程传输所述第二线程的线程标识和线程状态参数;所述线程状态参数用于表示所述第二线程是否处于上线状态;在处于上线状态且调用所述预设注册函数后处理报文;
所述第三线程还用于,接收所述第二线程传输的所述线程标识和所述线程状态参数,并写入预设全局链表中。
3.根据权利要求2所述的系统,其特征在于,所述第三线程还定义预设静默期函数;
所述第二线程还用于,在处理报文过程中,每间隔第一预设时长调用所述预设静默期函数,将所述第二线程对所述第一共享资源的读取计数赋值为变更后的所述更新计数;
所述第三线程还用于,在所述第二线程调用所述预设静默期函数时,在所述预设全局链表中记录所述第二线程对应的调用标识和/或赋值后的所述读取计数;所述调用标识用于指示所述第二线程已调用所述预设静默期函数。
4.根据权利要求1-3任一项所述的系统,其特征在于,
所述第三线程还用于,从预设全局链表中,获取各第二线程的线程信息,所述预设全局链表用于记录注册到所述第三线程的各第二线程的信息;基于所述各第二线程的线程信息,确定是否存在访问所述第一共享资源的第二线程。
5.根据权利要求4所述的系统,其特征在于,
所述第三线程还用于,判断所述各第二线程的线程信息中是否均包含调用标识,所述调用标识用于指示第二线程已调用所述第三线程定义的预设静默期函数;如果是,则确定当前不存在访问所述第一共享资源的第二线程;如果否,则确定当前存在访问所述第一共享资源的第二线程。
6.根据权利要求4所述的系统,其特征在于,
所述第三线程还用于,判断所述各第二线程的线程信息中的读取计数是否均与变更后的所述更新计数相等,如果是,则确定当前不存在访问所述第一共享资源的第二线程;如果否,则确定当前存在访问所述第一共享资源的第二线程。
7.根据权利要求3所述的系统,其特征在于,
所述第二线程还用于,在所述读取计数赋值为变更后的所述更新计数之前,基于所述第一共享资源处理报文;在所述读取计数赋值为变更后的所述更新计数之后,基于所述第二共享资源处理报文。
8.根据权利要求1-3任一项所述的系统,其特征在于,所述第一共享资源包括内存池、向量和数组中的一种或多种。
9.一种资源更新装置,其特征在于,所述装置包括权利要求1-8任一项所述的资源更新系统。
10.一种网络设备,其特征在于,所述网络设备包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器运行所述计算机程序以实现如权利要求1-8任一项所述的资源更新系统的操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311552277.0A CN117271141B (zh) | 2023-11-21 | 2023-11-21 | 资源更新系统、装置及网络设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311552277.0A CN117271141B (zh) | 2023-11-21 | 2023-11-21 | 资源更新系统、装置及网络设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117271141A true CN117271141A (zh) | 2023-12-22 |
CN117271141B CN117271141B (zh) | 2024-02-23 |
Family
ID=89216329
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311552277.0A Active CN117271141B (zh) | 2023-11-21 | 2023-11-21 | 资源更新系统、装置及网络设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117271141B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1821965A (zh) * | 2004-11-30 | 2006-08-23 | 国际商业机器公司 | 群集范围的读复制更新的系统和方法 |
CN101631328A (zh) * | 2009-08-14 | 2010-01-20 | 北京星网锐捷网络技术有限公司 | 一种对共享资源互斥访问的同步方法、装置和网络设备 |
US20100023946A1 (en) * | 2008-07-28 | 2010-01-28 | International Business Machines Corporation | User-level read-copy update that does not require disabling preemption or signal handling |
CN109634762A (zh) * | 2018-12-19 | 2019-04-16 | 北京达佳互联信息技术有限公司 | 一种数据回收方法、装置、电子设备及存储介质 |
CN114443764A (zh) * | 2022-01-10 | 2022-05-06 | 北京奇艺世纪科技有限公司 | 用于数据库的多线程数据处理方法、装置和电子设备 |
CN114780248A (zh) * | 2022-05-18 | 2022-07-22 | 芯来智融半导体科技(上海)有限公司 | 资源访问方法、装置、计算机设备及存储介质 |
CN115454653A (zh) * | 2022-11-10 | 2022-12-09 | 南京翼辉信息技术有限公司 | 一种基于嵌入式实时操作系统的rcu实现方法 |
CN115629884A (zh) * | 2022-12-12 | 2023-01-20 | 荣耀终端有限公司 | 一种线程调度方法、电子设备及存储介质 |
-
2023
- 2023-11-21 CN CN202311552277.0A patent/CN117271141B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1821965A (zh) * | 2004-11-30 | 2006-08-23 | 国际商业机器公司 | 群集范围的读复制更新的系统和方法 |
US20100023946A1 (en) * | 2008-07-28 | 2010-01-28 | International Business Machines Corporation | User-level read-copy update that does not require disabling preemption or signal handling |
CN101631328A (zh) * | 2009-08-14 | 2010-01-20 | 北京星网锐捷网络技术有限公司 | 一种对共享资源互斥访问的同步方法、装置和网络设备 |
CN109634762A (zh) * | 2018-12-19 | 2019-04-16 | 北京达佳互联信息技术有限公司 | 一种数据回收方法、装置、电子设备及存储介质 |
CN114443764A (zh) * | 2022-01-10 | 2022-05-06 | 北京奇艺世纪科技有限公司 | 用于数据库的多线程数据处理方法、装置和电子设备 |
CN114780248A (zh) * | 2022-05-18 | 2022-07-22 | 芯来智融半导体科技(上海)有限公司 | 资源访问方法、装置、计算机设备及存储介质 |
CN115454653A (zh) * | 2022-11-10 | 2022-12-09 | 南京翼辉信息技术有限公司 | 一种基于嵌入式实时操作系统的rcu实现方法 |
CN115629884A (zh) * | 2022-12-12 | 2023-01-20 | 荣耀终端有限公司 | 一种线程调度方法、电子设备及存储介质 |
Non-Patent Citations (3)
Title |
---|
MATHIEU DESNOYERS: "User-Level Implementations of Read-Copy Update", 《IEEE TRANSACTIONS ON PARALLEL AND DISTRIBUTED SYSTEMS》, vol. 23, no. 2, XP011390872, DOI: 10.1109/TPDS.2011.159 * |
孟嘉豪: "一种面向键值对存储系统的高效数据迁移机制的设计与实现", 《中国优秀博硕士学位论文全文数据库(硕士)信息科技辑》 * |
张旭;顾乃杰;苏俊杰;: "Linux调度器免锁优化方法研究", 小型微型计算机系统, no. 04 * |
Also Published As
Publication number | Publication date |
---|---|
CN117271141B (zh) | 2024-02-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113918101B (zh) | 一种写数据高速缓存的方法、系统、设备和存储介质 | |
CN108572876B (zh) | 一种读写锁的实现方法及装置 | |
CN111857993B (zh) | 一种内核态调用用户态函数的方法 | |
CN112612623B (zh) | 一种共享内存管理的方法和设备 | |
CN114168271B (zh) | 一种任务调度方法、电子设备及存储介质 | |
US20120227056A1 (en) | Method and system for enabling access to functionality provided by resources outside of an operating system environment | |
CN112650478A (zh) | 一种嵌入式软件开发平台动态构建方法、系统及设备 | |
CN110990136B (zh) | 一种任务处理方法和任务调度器 | |
CN115454887A (zh) | 数据处理方法、装置、电子设备及可读存储介质 | |
EP3724776A1 (en) | Method, function manager and arrangement for handling function calls | |
CN117271141B (zh) | 资源更新系统、装置及网络设备 | |
JP2005209206A (ja) | マルチプロセッサシステムにおけるデータ転送方法、マルチプロセッサシステム、及び、この方法を実施するプロセッサ | |
CN110245027B (zh) | 一种进程间通信的方法和设备 | |
CN111831408A (zh) | 异步任务处理方法、装置、电子设备及介质 | |
CN108062224B (zh) | 基于文件句柄的数据读写方法、装置及计算设备 | |
CN111241537A (zh) | 任务栈溢出检测方法及系统 | |
CN108073460B (zh) | 分布式系统中的全局锁抢占方法、装置及计算设备 | |
CN109558249B (zh) | 一种并发操作的控制方法及装置 | |
CN110300068B (zh) | Arp资源管理方法、装置、电子设备 | |
CN112738181B (zh) | 集群外部ip接入的方法、装置及服务器 | |
CN111367921A (zh) | 数据对象的刷新方法及装置 | |
CN112130900B (zh) | 一种bmc的用户信息管理方法、系统、设备以及介质 | |
US11348656B2 (en) | Efficient resource sharing | |
CN113326201A (zh) | 基于分布式系统的软件测试方法、电子设备及存储介质 | |
CN108874560B (zh) | 进行通信的方法和通信设备 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |