CN115098220A - 基于容器线程管理技术的大规模网络节点拟真方法 - Google Patents
基于容器线程管理技术的大规模网络节点拟真方法 Download PDFInfo
- Publication number
- CN115098220A CN115098220A CN202210692183.2A CN202210692183A CN115098220A CN 115098220 A CN115098220 A CN 115098220A CN 202210692183 A CN202210692183 A CN 202210692183A CN 115098220 A CN115098220 A CN 115098220A
- Authority
- CN
- China
- Prior art keywords
- node
- thread
- queue
- receiving
- sending
- 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
- 238000004088 simulation Methods 0.000 title claims abstract description 30
- 238000000034 method Methods 0.000 title claims abstract description 20
- 238000005516 engineering process Methods 0.000 title claims abstract description 11
- 238000012545 processing Methods 0.000 claims abstract description 104
- 230000005540 biological transmission Effects 0.000 claims description 26
- 238000013507 mapping Methods 0.000 claims description 10
- 230000006870 function Effects 0.000 claims description 9
- 230000008569 process Effects 0.000 claims description 6
- 238000004891 communication Methods 0.000 description 6
- 230000007717 exclusion Effects 0.000 description 4
- 230000007547 defect Effects 0.000 description 3
- 230000000903 blocking effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000007619 statistical method Methods 0.000 description 1
- 238000013179 statistical model Methods 0.000 description 1
Images
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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4498—Finite state machines
-
- 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
- G06F9/505—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 considering the load
-
- 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
-
- 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/546—Message passing systems or structures, e.g. queues
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/14—Network analysis or design
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/4557—Distribution of virtual machine instances; Migration and load balancing
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 Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种基于容器线程管理技术的大规模网络节点拟真方法,主要解决现有技术在大规模网络场景下创建过多线程的问题。其主要实现步骤为:调度网络拟真场景内所有节点;节点通过空闲线程管理队列管理其动态线程,并为其动态线程设置有限状态机和函数指针;源节点将其发送队列注册到接收节点,并通知接收节点分配一个用于接收处理发送队列的接收处理线程;发送线程与接收处理线程通过检查发送队列的状态动态调整接收处理线程数量。本发明减少创建过多线程产生的系统开销,降低了多线程处理队列的并发控制开销,可用于提高节点拟真效率,提高拟真系统整体吞吐量。
Description
技术领域
本发明属于通信技术领域,更进一步涉及网络通信技术领域中的一种基于容器线程管理技术的大规模网络节点拟真方法。本发明可以用于大规模网络通信节点的高性能实时仿真。
背景技术
网络仿真是一种利用数学建模和统计分析的方法模拟网络行为,通过建立网络设备和网络链路的统计模型,模拟网络流量的传输,从而获取网络设计及优化所需要的网络性能数据的一种高新技术。随着通信网络技术的发展,网络仿真面临拓扑复杂化、规模巨大化、高动态、真实流量承载仿真以及半实物接入验证等需求和挑战。目前主流的网络仿真软件如NS3、OPNET、OMNET等节点分组处理实时性低下,在大规模仿真场景下不具备拟真能力,无法实现对超大规模动态网络节点的真实协议栈验证。
网络仿真系统中每一个网络节点具有多条独立工作的传输链路以实现节点之间的分组传输,针对每一个链路均使用独立的线程进行分组的接收处理不仅符合实时工作节点的工作状态,而且可以对数据帧的链路传输过程进行有效仿真。但是,在大规模网络仿真场景下,如果网络节点的所有传输链路均设置一个独立处理线程,就会导致系统创建大量的处理线程,占用大量的额外内存资源,特别是有许多链路处于空闲的状态时;其次,由于网络负载不均衡的特点,大量的传输链路处于低负载状态,如果每个低负载链路使用独立的处理线程,会导致各线程频繁的唤醒与休眠,从而造成大量的线程切换开销,进一步导致CPU处理开销增加;此外,考虑到系统中存在某些节点的多条传输链路均进行分组传输,使用已有的互斥锁技术实现并发控制会产生频繁线程调度的时间开销,使用已有的自旋锁技术则会导致占用过高的CPU资源,如何避免处理线程间的互斥导致系统的吞吐量下降,也是大规模实时仿真的关键问题。
发明内容
本发明的目的在于针对上述现有技术存在的不足,提出一种基于容器线程管理技术的大规模网络节点拟真方法,旨在解决大规模网络拟真场景下系统创建的处理线程过多占用大量的额外内存资源,每个低负载链路使用独立的处理线程导致CPU处理开销增加,以及处理线程间的互斥导致系统的吞吐量下降的问题。
为实现上述目的,本发明的具体思路是:
本发明只为具有分组接收处理需求的网络节点分配处理线程,在模拟网络节点限速分组转发的条件下,将大规模网络仿真场景下创建的总线程数成倍缩减,从而使得本发明解决了大规模网络仿真场景下创建过多的处理线程占用大量额外内存资源的问题。本发明中节点根据发送队列的分组流强度动态调整接收处理线程数量,在接收节点处理的分组流强度较低的情况下减少接收处理线程数量,从而降低了线程切换开销,从而使得本发明解决了每个低负载链路使用独立的处理线程导致CPU处理开销增加的问题。本发明设计了无锁化并发安全的发送队列,使用原子语句实现了多输入-多输出流的无锁化并发控制,减少了多个线程处理分组传输的并发控制的锁开销,提高了节点间分组传输效率,从而使得本发明解决了处理线程间的互斥导致系统的吞吐量下降的问题。
根据上述思路,本发明的实现方法如下:
步骤1,调度网络拟真场景内所有节点:
在宿主机中创建与网络拟真场景中网络节点一一对应的容器,拷贝所有节点的可执行文件到容器中,加载并执行可执行文件;
步骤2,创建所有节点的共享内存区:
在宿主机的共享内存目录中创建内存映射文件作为共享内存区,并将此内存映射文件映射到所有节点的地址空间;
步骤3,多线程通过发送队列进行多输入-多输出分组流的传输:
步骤3.1,每个节点在共享内存上创建发送队列,并为该节点发送队列设置一个尾索引和一个头索引,头索引指向的队列单元是分组出队位置,尾索引指向的队列单元是分组入队位置;
步骤3.2,当多个线程同时向一个发送队列入队时,均通过原子操作确定入队索引值;前一个执行原子操作的线程在将被请求入队的发送队列尾索引值,作为该线程的入队索引值的同时,将该发送队列尾索引值加1,后一个执行原子操作的线程将前一个线程更新过的发送队列尾索引作为该线程的入队索引值,以此类推,每一个后执行的线程入队索引值均比前一个线程的入队索引值大1,并通过其入队索引值入队分组到发送队列;
步骤3.3,当多个线程同时从一个发送队列出队时,均通过原子操作确定出队索引值;前一个执行原子操作的线程在将被请求出队的发送队列头索引值,作为该线程的出队索引值的同时,将该发送队列头索引值加1,后一个执行原子操作的线程将前一个线程更新过的发送队列头索引作为该线程的出队索引值,以此类推,每一个后执行的线程出队索引值均比前一个线程的出队索引值大1,并通过其出队索引值从发送队列出队分组;
步骤4,根据任务动态分配与管理线程:
步骤4.1,每个节点创建一个用于管理动态线程的空闲线程管理队列,通过该节点空闲线程管理队列保存节点所有动态线程的线程号、线程状态和函数指针;
步骤4.2,每个节点通过为该节点动态线程设置有限状态机,在为该节点动态线程分配任务后,使其进入任务执行状态,在该节点动态线程执行完任务后,阻塞该动态线程,使其进入空闲状态;
步骤4.3,每个节点设置一个其处于空闲状态的动态线程的最大数量,管理该节点处于空闲状态的动态线程的数量始终小于该最大数量;该节点提前创建好对应数量的处于空闲状态的动态线程,并保存其信息到该节点空闲线程管理队列;当有该节点负责处理的新任务到达时,该节点将该任务分配给该节点的一个处于空闲状态的动态线程;当该节点所有动态线程的状态均为任务执行状态时,该节点新创建一个处于空闲状态的动态线程;当该节点通过空闲线程管理队列检查到处于空闲状态的动态线程数量大于空闲状态的动态线程最大数量时,该节点销毁多余的空闲状态动态线程;
步骤5,接收节点通过注册表接收处理一个或多个源节点发送队列中的分组:
步骤5.1,每个节点创建一个用于保存该节点需要接收处理的一个或多个源节点发送队列信息的注册表,发送队列信息具体包括已注册的发送队列数量、标记发送队列唯一序号的发送队列号以及标记发送队列的分组入队时刻的发送队列更新时间;一个或多个源节点在通过其发送队列发送分组前,将该源节点发送队列信息保存到接收节点的注册表,向接收节点注册发送队列;
步骤5.2,一个或多个源节点在向接收节点注册发送队列后,通知接收节点从该接收节点的空闲线程管理队列中获取一个用于接收处理该源节点发送队列的接收处理线程;
步骤5.3,接收节点的接收处理线程通过轮询接收节点注册表中发送队列号,查询到接收节点需要接收处理的一个或多个发送队列,并从发送队列中接收处理分组;
步骤6,根据发送队列的分组流强度动态调整接收处理线程数量:
步骤6.1,源节点在发送队列拥塞时通知接收节点调度更多的接收处理线程;
步骤6.2,接收节点设置一个用于判断发送队列的分组流是否中断的队列中断阈值,并在检查发送队列为空时,将该发送队列的更新时间与当前时间进行对比,若当前时间与发送队列更新时间的差值大于队列中断阈值,则注销注册表中此发送队列的信息,不再从该发送队列接收处理分组;
步骤6.3,接收节点的接收处理线程在轮询注册表接收所有发送队列时,若检查所有发送队列均为空,则判定接收节点的其他接收处理线程已提前轮询处理完所有发送队列,接收节点的接收处理线程数量过多,并将自身回收到空闲线程管理队列。
本发明与现有技术相比具有如下优点:
第一,由于本发明的动态分配处理线程的方法,克服了现有技术网络节点间每条通信链路的分组传输与处理均使用独立的处理线程导致占用大量资源的不足,使得本发明既保证了网络节点对分组传输与处理的有效性,又降低了系统对内存资源的占用,提高了拟真系统的整体性能。
第二,由于本发明根据分组流强度动态调整接收处理线程数量,使用较少的线程处理多个传输链路上的低负载业务,解决了现有技术网络节点对每个低负载分组流均使用独立的处理线程增大线程间切换开销的不足,使得本发明降低了低负载业务的CPU处理开销。
第三,在保证多个业务流并发安全的前提下提高网络节点对分组的传输与处理效率是网络仿真系统性能提升的关键,由于本发明设计的无锁化并发安全发送队列,克服了现有技术节点处理线程间互斥开销影响系统吞吐量的不足,使得本发明提高系统的吞吐量。
附图说明
图1是本发明的流程图;
图2是本发明中的无锁化并发安全地出队与入队发送队列步骤的流程图;
图3是本发明的根据发送队列的分组流强度动态调整接收处理线程数量步骤的流程图。
具体实施方式
下面结合附图和实施例,对本发明作进一步的详细描述。
参照图1和实施例,对本发明实现的具体步骤作进一步的详细描述。
步骤1,调度网络拟真场景内所有节点。
步骤1.1,根据网络拟真场景的配置创建容器。
所述配置指的是用于设置网络节点规模、节点间链路拓扑、业务流信息。
由于本发明的实施例中运行的网络拟真场景具有400个节点的卫星网络,为了保证各节点运行在独立的容器内,为此,通过脚本程序在宿主机上批量化创建400个容器。
步骤1.2,在容器内加载节点的可执行文件。
本发明的实施例拷贝节点的可执行文件到每一个容器内并加载执行,完成场景内所有节点的调度。
步骤2,创建所有节点的共享内存区。
步骤2.1,通过共享内存目录创建共享内存区。
所述共享内存区,是指在多处理器的计算机系统中,可以被不同中央处理器访问的大容量内存区域,通常用于一个或多个程序的多进程间通信。
所述共享内存目录,是指在计算机系统中,一个利用内存虚拟出来的一个目录,这个目录中的文件都是保存在内存中,而不是磁盘上。
使用Linux系统提供的API在宿主机的共享内存目录中创建一个内存映射文件作为共享内存区。
本发明的实施例采用Posix标准创建共享内存区,在宿主机的共享内存目录/dev/shm中使用open函数创建一个内存映射文件。
步骤2.2,将共享内存区映射到所有节点。
每个节点调用Linux系统提供的API,将内存映射文件映射到自己的地址空间。
本发明的实施例挂载宿主机的共享内存目录/dev/shm到所有容器,节点通过容器的文件系统访问此目录下的Posix共享内存区,并通过mmap的方式将该共享内存区映射到自己的地址空间,完成所有节点的共享内存区创建。
步骤3,无锁化并发安全地出队与入队发送队列。
参照图2,对本发明无锁化并发安全地出队与入队发送队列的步骤作进一步说明。
步骤3.1,为发送队列设置一个头索引和一个尾索引;
节点在共享内存上创建发送队列,为发送队列设置一个头索引与一个尾索引,头索引指向的队列单元是分组出队位置,尾索引指向的队列单元是分组入队位置。
本发明的实施例中向发送队列入队一个分组时,将分组写入尾索引所在的队列单元,并将尾索引值加1;从发送队列出队一个分组时,将头索引所在的队列单元中分组写出,并将头索引值加1。
步骤3.2,多线程向发送队列并发安全入队分组。
当多个线程同时向一个发送队列入队分组时,均通过原子操作确定入队索引值。前一个执行原子操作的线程在将被请求出队的发送队列尾索引值,作为该线程的入队索引值的同时,将该发送队列尾索引值加1。后一个执行原子操作的线程将前一个线程更新过的发送队列尾索引作为该线程的入队索引值,始终比前一个线程的入队索引值大1,以此类推,每一个后执行的线程入队索引值均比前一个线程的入队索引值大1,从而保证每个线程的入队索引值互不相同,并向发送队列的不同索引位置写入分组,实现无锁化地并发安全入队。
本发明的实施例中,当有两个线程,即线程1和线程2同时向一个尾索引值为0的发送队列请求入队分组时,线程1通过原子操作,将线程1的入队索引值确定为0,同时将被请求入队的发送队列的尾索引值更新为1。在线程1将发送队列的尾索引值更新为1后,线程2通过原子操作,将线程2的入队索引值确定为1,同时将被请求入队的发送队列的尾索引值更新为2。当有多个线程向发送队列请求入队时,均通过原子操作确定入队索引值。第i个执行原子操作的线程在将被请求入队的发送队列尾索引值,作为该线程的入队索引值的同时,将该发送队列尾索引值加1。第i+1个执行原子操作的线程将前一个线程更新过的发送队列尾索引作为该线程的入队索引值,始终比前一个线程的入队索引值大1,以此类推,每一个后执行的线程入队索引值均比前一个线程的入队索引值大1,从而保证每个线程的入队索引值互不相同。
所述原子操作,是指不可分割的,在执行完毕之前不会被任何其它任务或事件中断的一个或一系列操作。
步骤3.3,多线程从发送队列并发安全出队分组。
当多个线程同时从一个发送队列出队分组时,均通过原子操作确定出队索引值。前一个执行原子操作的线程在将被请求出队的发送队列头索引值,作为该线程的出队索引值的同时,将该发送队列头索引值加1。后一个执行原子操作的线程将前一个线程更新过的发送队列头索引作为该线程的出队索引值,始终比前一个线程的出队索引值大1,以此类推,每一个后执行的线程出队索引值均比前一个线程的出队索引值大1,从而保证每个线程的出队索引值互不相同,并从发送队列的不同索引位置写出分组,实现无锁化地并发安全出队。
本发明的实施例中,当有两个线程,即线程1和线程2同时向一个头索引值为0的发送队列请求出队分组时,线程1通过原子操作,将线程1的出队索引值确定为0,同时将被请求出队的发送队列的头索引值更新为1。在线程1将发送队列的头索引值更新为1后,线程2通过原子操作,将线程2的出队索引值确定为1,同时将被请求出队的发送队列的头索引值更新为2。当有多个线程向发送队列请求出队时,均通过原子操作确定出队索引值。第i个执行原子操作的线程在将被请求出队的发送队列头索引值,作为该线程的出队索引值的同时,将该发送队列头索引值加1。第i+1个执行原子操作的线程将前一个线程更新过的发送队列头索引作为该线程的出队索引值,始终比前一个线程的出队索引值大1,以此类推,每一个后执行的线程出队索引值均比前一个线程的出队索引值大1,从而保证每个线程的出队索引值互不相同。
步骤4,根据任务动态分配与管理线程。
步骤4.1,在节点内创建空闲线程管理队列。
每个节点使用链表创建一个空闲线程管理队列,在链表元素中保存该节点中动态线程信息,具体包括动态线程的线程号、动态线程状态与动态线程的函数指针。
本发明的实施例中使用链表的方式,为每个节点创建一个与其对应的空闲线程管理队列,将该节点动态线程的线程号、动态线程状态与动态线程的函数指针,以链表元素的形式保存到空闲线程管理队列中。
所述动态线程,是指在节点中创建并用于动态执行分配任务的线程。所述线程号是动态线程的唯一序号,每个节点可以通过线程号销毁与其对应的动态线程。所述动态线程状态,是指动态线程的程序执行状态。所述函数指针,是指向函数的指针变量,用于为动态线程提供任务执行入口。
步骤4.2,动态线程根据任务切换状态。
每个节点在其动态线程内部设置一个有限状态机,将动态线程的状态划分为空闲状态和任务执行状态。动态线程在没有执行任务时,切换到空闲状态,并进入阻塞睡眠;动态线程在执行任务时,切换到任务执行状态,通过函数指针执行节点分配的任务。
本发明的实施例中每个节点在其动态线程内部设置一个有限状态机,将动态线程的程序执行状态划分为空闲状态和任务执行状态。节点动态线程先进入阻塞睡眠,切换到空闲状态。当有一个新任务到达时,负责处理该任务的节点通过该动态线程的函数指针,将新任务分配给该空闲状态的动态线程,并将该动态线程从睡眠中唤醒,使其进入到任务执行状态。动态线程被节点唤醒后,执行节点分配的任务,并在完成节点分配的任务后,重新进入阻塞睡眠,切换到空闲状态。
步骤4.3,节点根据任务数量动态调整其动态线程数量。
节点根据其需要处理的任务数量,动态调整动态线程的数量。每个节点设置一个其处于空闲状态的动态线程的最大数量,并提前创建好对应数量的处于空闲状态的动态线程。当有新任务到达时,负责处理该任务的节点将该任务分配给一个处于空闲状态的动态线程。当节点所有动态线程的状态均为任务执行状态时,节点新创建一个处于空闲状态的动态线程。当节点处于空闲状态的动态线程数量大于空闲状态的动态线程最大数量时,节点销毁多余的空闲状态动态线程。
本发明的实施例中,每个节点设置空闲状态动态线程最大数量为2,提前创建2个处于空闲状态的动态线程,并将其信息保存到空闲线程管理队列。当由第i个节点负责处理的第一个新任务到达时,第i个节点从其空闲线程管理队列中找出一个处于空闲状态的动态线程,将第一个新任务分配给该动态线程,并使该动态线程切换到任务执行状态。当第i个节点负责处理的第二个新任务到达时,第i个节点再次从其空闲线程管理队列中找出一个空闲状态的线程,将第二个新任务分配给该动态线程,并使该动态线程进入任务执行状态。第i个节点检查空闲状态的动态线程数量为0后,创建1个处于空闲状态的动态线程,并将其信息保存到空闲线程管理队列。当第i个节点的两个动态线程完成任务的执行并切换到空闲状态时,第i个节点检查空闲状态的线程数量为3,大于空闲状态动态线程的最大数量2,销毁1个空闲状态的动态线程。
步骤5,接收节点通过注册表接收处理一个或多个源节点发送队列中的分组。
步骤5.1,一个或多个源节点发送分组前向接收节点注册发送队列。
每个节点创建一个用于保存该节点需要接收处理的一个或多个源节点发送队列的信息的注册表,发送队列信息具体包括已注册的发送队列数量、标记发送队列唯一序号的发送队列号以及标记发送队列的分组入队时刻的发送队列更新时间。一个或多个源节点在通过其发送队列向接收节点发送分组前,先将其发送队列的发送队列号保存到对应接收节点的注册表中,再设置接收节点的注册表中该发送队列的更新时间为当前时间,并更新接收节点注册表中发送队列数量。
本发明的实施例中,两个源节点通过各自的发送队列向一个接收节点发送分组前,先将其发送队列的发送队列号保存到接收节点的注册表中,再设置其发送队列更新时间为当前时间,最后将接收节点注册表中发送队列数量更新为2。
步骤5.2,源节点通知接收节点分配接收处理任务。
源节点在向接收节点注册发送队列后,先检查该接收节点是否有执行接收处理该源节点发送队列任务的接收处理线程,并在检查到接收节点没有接收处理线程后,通知接收节点分配接收处理任务。接收节点收到源节点的通知后,获取一个空闲状态的动态线程,并分配接收处理任务。
本发明的实施例中,一个源节点在向一个接收节点注册发送队列后,先检查接收节点的注册表中接收处理线程数量。若接收处理线程数量为0,则源节点向接收节点发送1个信号,通知接收节点分配接收处理任务。接收节点收到源节点的信号后,从空闲线程管理队列中获取一个空闲状态的动态线程,为该线程分配接收处理任务,并将其注册表中接收处理线程数量设置为1。
步骤5.3,接收处理线程从已向该节点注册的发送队列接收处理分组。
接收节点的接收处理线程通过轮询接收节点注册表中发送队列号,查询到接收节点需要接收处理的一个或多个发送队列,并从发送队列中接收处理分组。
本发明的实施例中,两个源节点向一个接收节点注册完自己的发送队列且检查到接收节点存在接收处理线程后,分别通过其发送队列发送分组。接收节点的接收处理线程通过轮询注册表中两个源节点的发送队列号,并通过发送队列号从两个源节点的发送队列中接收处理分组。
步骤6,根据发送队列的分组流强度动态调整接收处理线程数量。
参照图3,对本发明根据发送队列的分组流强度动态调整接收处理线程数量的步骤作进一步说明。
步骤6.1,源节点在发送队列拥塞时通知接收节点调度更多的接收处理线程。
参照图3,本发明的实施例中,1个源节点的发送线程通过发送队列向1个接收节点发送分组,发送线程发现该发送队列已满,判断接收节点的接收处理能力不足,并向接收节点发送信号,通知接收节点增加接收处理能力。接收节点收到增加接收处理能力的通知后,从空闲线程管理队列中获取1个空闲状态动态线程,分配接收处理任务给该动态线程,并将接收处理线程数量加1。
步骤6.2,接收节点注销长期无分组入队的发送队列的注册信息。
源节点的分组在入队发送队列时,更新接收节点注册表中此发送队列的更新时间为分组入队时间。接收处理线程设置一个用于判断发送队列的分组流是否中断的队列中断阈值,并在检查发送队列为空时,将此发送队列的更新时间与当前时间进行对比,若发送队列长期未更新,则注销注册表中此发送队列的信息,不再从此发送队列接收处理分组。
本发明的实施例中,1个源节点注册发送队列到一个接收节点后,每向发送队列发送1个分组,将接收节点的注册表中该发送队列更新时间改为发送分组时的时间。当源节点在t1时间中断分组流,不再向其发送队列发送分组,则该源节点的发送队列更新时间将保持t1不变。接收节点的接收处理线程取完源节点发送队列中剩余的分组后,该源节点发送队列变为空队列。接收节点的接收处理线程轮询空的源节点发送队列的更新时间t1,并与当前时间t2进行比较,如果当前时间t2比该源节点的发送队列更新时间t1大10秒,则判定此发送队列的分组流中断,并将该源节点的发送队列信息从注册表中删除,不再从该源节点的发送队列接收处理分组。
步骤6.3,接收节点在分组接收速率远大于发送速率时回收过多的接收处理线程。
接收节点的接收处理线程在轮询注册表接收所有发送队列时,若所有发送队列均为空,则判定接收节点的其他接收处理线程已提前轮询处理完所有发送队列,接收节点的接收处理线程数量过多,将自身回收到空闲线程管理队列。
本发明的实施例中,3个源节点同时通过发送队列向接收节点发送分组时,接收节点的接收处理线程数量是2。当源节点2与源节点3中断了分组流,接收节点的接收处理能力远大于源节点1发送队列的接收处理需求。接收处理线程1快速将源节点1发送队列中分组全部接收处理完后,接收处理线程2从空的源节点1发送队列接收处理失败。接收处理线程2连续从注册表中的发送队列接收失败3次,则将自己回收到空闲线程管理队列,并将接收处理线程数量改为1。
以上描述仅是本发明的一个具体事例,并不构成对本发明的任何限制,显然对于本领域的专业人员来说,在了解了本发明内容和原理后,都可能在不背离本发明原理、结构的情况下,进行形式和细节上的各种修改和改变,但是这些基于本发明思想的修正和改变仍在本发明的权利要求保护范围之内。
Claims (2)
1.一种基于容器线程管理技术的大规模网络节点拟真方法,其特征在于:多线程为同一个发送队列并发出队与入队分组、根据任务动态分配与管理线程、根据发送队列的分组流强度动态调整接收处理线程数量;该拟真方法的具体步骤包括如下:
步骤1,调度网络拟真场景内所有节点:
在宿主机中创建与网络拟真场景中网络节点一一对应的容器,拷贝所有节点的可执行文件到容器中,加载并执行可执行文件;
步骤2,创建所有节点的共享内存区:
在宿主机的共享内存目录中创建内存映射文件作为共享内存区,并将此内存映射文件映射到所有节点的地址空间;
步骤3,多线程通过发送队列进行多输入-多输出分组流的传输:
步骤3.1,每个节点在共享内存上创建发送队列,并为该节点发送队列设置一个尾索引和一个头索引,头索引指向的队列单元是分组出队位置,尾索引指向的队列单元是分组入队位置;
步骤3.2,当多个线程同时向一个发送队列入队时,均通过原子操作确定入队索引值;前一个执行原子操作的线程在将被请求入队的发送队列尾索引值,作为该线程的入队索引值的同时,将该发送队列尾索引值加1,后一个执行原子操作的线程将前一个线程更新过的发送队列尾索引作为该线程的入队索引值,以此类推,每一个后执行的线程入队索引值均比前一个线程的入队索引值大1,并通过其入队索引值入队分组到发送队列;
步骤3.3,当多个线程同时从一个发送队列出队时,均通过原子操作确定出队索引值;前一个执行原子操作的线程在将被请求出队的发送队列头索引值,作为该线程的出队索引值的同时,将该发送队列头索引值加1,后一个执行原子操作的线程将前一个线程更新过的发送队列头索引作为该线程的出队索引值,以此类推,每一个后执行的线程出队索引值均比前一个线程的出队索引值大1,并通过其出队索引值从发送队列出队分组;
步骤4,根据任务动态分配与管理线程:
步骤4.1,每个节点创建一个用于管理动态线程的空闲线程管理队列,通过该节点空闲线程管理队列保存节点所有动态线程的线程号、线程状态和函数指针;
步骤4.2,每个节点通过为该节点动态线程设置有限状态机,在为该节点动态线程分配任务后,使其进入任务执行状态,在该节点动态线程执行完任务后,阻塞该动态线程,使其进入空闲状态;
步骤4.3,每个节点设置一个其处于空闲状态的动态线程的最大数量,管理该节点处于空闲状态的动态线程的数量始终小于该最大数量;该节点提前创建好对应数量的处于空闲状态的动态线程,并保存其信息到该节点空闲线程管理队列;当有该节点负责处理的新任务到达时,该节点将该任务分配给该节点的一个处于空闲状态的动态线程;当该节点所有动态线程的状态均为任务执行状态时,该节点新创建一个处于空闲状态的动态线程;当该节点通过空闲线程管理队列检查到处于空闲状态的动态线程数量大于空闲状态的动态线程最大数量时,该节点销毁多余的空闲状态动态线程;
步骤5,接收节点接收处理一个或多个源节点发送队列中的分组:
步骤5.1,每个节点创建一个用于保存该节点需要接收处理的一个或多个源节点的发送队列信息的注册表,发送队列信息具体包括已注册的发送队列数量、标记发送队列唯一序号的发送队列号以及标记发送队列的分组入队时刻的发送队列更新时间;源节点在通过其发送队列发送分组前,将该源节点发送队列信息保存到接收节点的注册表,向接收节点注册发送队列;
步骤5.2,一个或多个源节点在向接收节点注册其发送队列后,通知接收节点从该接收节点的空闲线程管理队列中获取一个用于接收处理该源节点发送队列的接收处理线程;
步骤5.3,接收节点的接收处理线程通过轮询接收节点注册表中一个或多个源节点的发送队列号,查询到接收节点需要接收处理的一个或多个发送队列,并从各发送队列中接收处理分组;
步骤6,根据发送队列的分组流强度动态调整接收处理线程数量:
步骤6.1,源节点在发送队列拥塞时通知接收节点调度更多的接收处理线程;
步骤6.2,接收节点设置一个用于判断发送队列的分组流是否中断的队列中断阈值,并在检查发送队列为空时,将该发送队列的更新时间与当前时间进行对比,若当前时间与发送队列更新时间的差值大于队列中断阈值,则注销注册表中此发送队列的信息,不再从该发送队列接收处理分组;
步骤6.3,接收节点的接收处理线程在轮询注册表接收所有发送队列时,若检查所有发送队列均为空,则判定接收节点的其他接收处理线程已提前轮询处理完所有发送队列,接收节点的接收处理线程数量过多,并将自身回收到空闲线程管理队列。
2.根据权利要求1所述的基于容器线程管理技术的大规模网络节点拟真方法,其特征在于:步骤4中所述节点设置处于空闲状态的动态线程的最大数量为2;当节点检查空闲状态的动态线程数量为0后,创建1个处于空闲状态的动态线程;当节点处于空闲状态的动态线程数量大于2时,节点销毁多余的空闲状态动态线程。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210692183.2A CN115098220B (zh) | 2022-06-17 | 2022-06-17 | 基于容器线程管理技术的大规模网络节点拟真方法 |
US18/091,369 US20230216806A1 (en) | 2022-01-04 | 2022-12-30 | Network node simulation method based on linux container |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210692183.2A CN115098220B (zh) | 2022-06-17 | 2022-06-17 | 基于容器线程管理技术的大规模网络节点拟真方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115098220A true CN115098220A (zh) | 2022-09-23 |
CN115098220B CN115098220B (zh) | 2024-04-16 |
Family
ID=83291150
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210692183.2A Active CN115098220B (zh) | 2022-01-04 | 2022-06-17 | 基于容器线程管理技术的大规模网络节点拟真方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115098220B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117112237A (zh) * | 2023-10-23 | 2023-11-24 | 湖南高至科技有限公司 | 基于纯实物多路并发的实时数据采集方法 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170132037A1 (en) * | 2015-11-09 | 2017-05-11 | Unity IPR ApS | Method and system for an improved job scheduler |
US20200104193A1 (en) * | 2018-09-28 | 2020-04-02 | Apple Inc. | Port Groups |
CN111722942A (zh) * | 2020-05-29 | 2020-09-29 | 天津大学 | 一种分布式实时操作系统的改造方法 |
CN111767159A (zh) * | 2020-06-24 | 2020-10-13 | 浙江大学 | 一种基于协程的异步系统调用系统 |
CN112395097A (zh) * | 2019-08-14 | 2021-02-23 | 北京京东尚科信息技术有限公司 | 一种消息处理方法、装置、设备和存储介质 |
CN113039522A (zh) * | 2018-11-30 | 2021-06-25 | 英特尔公司 | 用于虚拟化的图形处理器的有效本地显示共享的装置和方法 |
CN113535321A (zh) * | 2020-04-15 | 2021-10-22 | 中兴通讯股份有限公司 | 虚拟化容器管理方法、系统和存储介质 |
CN113672411A (zh) * | 2021-08-25 | 2021-11-19 | 烽火通信科技股份有限公司 | 一种网络设备虚拟化驱动适配层的实现方法和装置 |
CN114500400A (zh) * | 2022-01-04 | 2022-05-13 | 西安电子科技大学 | 基于容器技术的大规模网络实时仿真方法 |
-
2022
- 2022-06-17 CN CN202210692183.2A patent/CN115098220B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170132037A1 (en) * | 2015-11-09 | 2017-05-11 | Unity IPR ApS | Method and system for an improved job scheduler |
US20200104193A1 (en) * | 2018-09-28 | 2020-04-02 | Apple Inc. | Port Groups |
CN113039522A (zh) * | 2018-11-30 | 2021-06-25 | 英特尔公司 | 用于虚拟化的图形处理器的有效本地显示共享的装置和方法 |
CN112395097A (zh) * | 2019-08-14 | 2021-02-23 | 北京京东尚科信息技术有限公司 | 一种消息处理方法、装置、设备和存储介质 |
CN113535321A (zh) * | 2020-04-15 | 2021-10-22 | 中兴通讯股份有限公司 | 虚拟化容器管理方法、系统和存储介质 |
CN111722942A (zh) * | 2020-05-29 | 2020-09-29 | 天津大学 | 一种分布式实时操作系统的改造方法 |
CN111767159A (zh) * | 2020-06-24 | 2020-10-13 | 浙江大学 | 一种基于协程的异步系统调用系统 |
CN113672411A (zh) * | 2021-08-25 | 2021-11-19 | 烽火通信科技股份有限公司 | 一种网络设备虚拟化驱动适配层的实现方法和装置 |
CN114500400A (zh) * | 2022-01-04 | 2022-05-13 | 西安电子科技大学 | 基于容器技术的大规模网络实时仿真方法 |
Non-Patent Citations (4)
Title |
---|
MIAOLOVECODE: ""java并发之ConcurrentLinkedQueue"", Retrieved from the Internet <URL:《https://www.jianshu.com/p/24516e7853d1》> * |
WEI CHEN: ""Preemptive and Low Latency Datacenter Scheduling via Lightweight Containers"", 《IEEE TRANSACTIONS ON PARALLEL AND DISTRIBUTED SYSTEMS》, vol. 31, no. 12, 1 December 2020 (2020-12-01), pages 2749 - 2762, XP011795832, DOI: 10.1109/TPDS.2019.2957754 * |
曹琦轩: ""面向大规模卫星网络协议设计和性能评估的实时仿真系统设计及验证"", 《天地一体化信息网络》, vol. 4, no. 01, 20 March 2023 (2023-03-20), pages 31 - 41 * |
陈楠: ""线程级多任务并行动态调度研究"", 《中国优秀硕士学位论文全文数据库 信息科技辑》, no. 2020, 15 January 2020 (2020-01-15), pages 137 - 74 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117112237A (zh) * | 2023-10-23 | 2023-11-24 | 湖南高至科技有限公司 | 基于纯实物多路并发的实时数据采集方法 |
CN117112237B (zh) * | 2023-10-23 | 2023-12-29 | 湖南高至科技有限公司 | 基于纯实物多路并发的实时数据采集方法 |
Also Published As
Publication number | Publication date |
---|---|
CN115098220B (zh) | 2024-04-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5333319A (en) | Virtual storage data processor with enhanced dispatching priority allocation of CPU resources | |
CN108762896A (zh) | 一种基于Hadoop集群任务调度方法及计算机设备 | |
US20030056084A1 (en) | Object orientated heterogeneous multi-processor platform | |
US6012121A (en) | Apparatus for flexible control of interrupts in multiprocessor systems | |
CN115098220B (zh) | 基于容器线程管理技术的大规模网络节点拟真方法 | |
US7765548B2 (en) | System, method and medium for using and/or providing operating system information to acquire a hybrid user/operating system lock | |
CN114138434A (zh) | 一种大数据任务调度系统 | |
US8141077B2 (en) | System, method and medium for providing asynchronous input and output with less system calls to and from an operating system | |
US20030028640A1 (en) | Peer-to-peer distributed mechanism | |
Lin et al. | {RingLeader}: efficiently Offloading {Intra-Server} Orchestration to {NICs} | |
CN110838987A (zh) | 队列限流方法、存储介质 | |
Caccamo et al. | Sharing resources among periodic and aperiodic tasks with dynamic deadlines | |
CN113626173A (zh) | 调度方法、装置及存储介质 | |
US10523746B2 (en) | Coexistence of a synchronous architecture and an asynchronous architecture in a server | |
Behnke et al. | Towards a real-time IoT: Approaches for incoming packet processing in cyber–physical systems | |
CN114281529B (zh) | 分布式虚拟化的客户操作系统调度优化方法、系统及终端 | |
Hu et al. | Real-time schedule algorithm with temporal and spatial isolation feature for mixed criticality system | |
US10127122B2 (en) | System and method for supporting transaction affinity based request handling in a middleware environment | |
US11474868B1 (en) | Sharded polling system | |
CN112749020A (zh) | 一种物联网操作系统的微内核优化方法 | |
CN112311695A (zh) | 一种片上带宽动态分配方法及系统 | |
US20230216806A1 (en) | Network node simulation method based on linux container | |
CN116755868B (zh) | 任务处理系统及方法 | |
US11971830B2 (en) | Efficient queue access for user-space packet processing | |
CN219642231U (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 |