线程管理方法、电子设备及存储介质
文献发布时间:2023-06-19 16:08:01
技术领域
本发明涉及计算机领域,特别涉及一种应用于NVMe-oF设备的线程管理方法、电子设备及存储介质。
背景技术
当前NVMe-oF(NVMe overFabric)技术快速发展,很多主机对接存储设备的协议采用NVMe-oF。主机也越来越向CPU密集型发展,随着CPU核心数量的增加,主机拥有的CPU核心也越来越庞大,远远超过了NVMe-oF设备的处理能力。
现有的线程调度方法没有针对特定的NVMe-oF targe(目标设备)的,因此,在主机对接多个NVMe-oF target设备时,难以全部发挥主机多核心的优势,以提高系统的整体性能。
因此,亟需一种应用于NVMe-oF设备的线程管理方法,提高利用主机的CPU核心的处理能力的效率并提高NVMe-oF设备的整体使用性能,以解决上述技术问题。
发明内容
为了解决现有技术的不足,本发明的主要目的在于提供一种应用于NVMe-oF设备的线程管理方法、电子设备及存储介质,以解决现有技术的上述技术问题。
为了达到上述目的,第一方面本发明提供了一种线程管理方法,所述方法包括:
操作系统根据分区配置创建分区;
操作系统发起设备连接请求后,选择合适的分区,在所述分区内对每个核心创建物理线程及用户线程,其中,一个所述物理线程调用至少一个所述用户线程;
所述用户线程基于所述操作系统发起的队列创建请求,创建对应的队列;
所述操作系统通过所述物理线程调度用户线程,为分区内每个物理线程分配对应的队列,以便主机通过队列与NVMe-oF设备进行交互。
在一些实施例中,所述分区至少包括第一记录模块、调度机以及物理线程;
其中,所述第一记录模块用于记录分区占用的核心集合、已占用分区的设备个数以及分区的统计信息;
所述调度机用于调度所述物理线程以及所述用户线程。
在一些实施例中,所述分区至少包括第一记录模块、调度机以及物理线程;
其中,所述第一记录模块用于记录分区占用的核心集合、已占用分区的设备个数以及分区的统计信息;
所述调度机用于调度所述物理线程以及所述用户线程。
在一些实施例中,所述队列创建请求包括管理队列创建请求以及交互队列创建请求,所述用户线程基于所述操作系统发起的队列创建请求,创建对应的队列方法,包括:
所述用户线程基于管理队列创建请求,创建管理队列;
通过所述管理队列查询NVMe-oF设备支持的最大交互队列数和队列最大深度;
查询完成后,所述用户线程基于交互队列创建请求,创建交互队列。
在一些实施例中,所述为分区内每个物理线程分配对应的队列,包括:
所述管理队列对应分配至分区内的第一个所述物理线程;
所述交互队列对应分配至分区内的所有所述物理线程。
在一些实施例中,所述物理线程至少包括第二记录模块、用户线程、轮询器;
其中,所述第二记录模块用于记录所述物理线程绑定的核心以及所述物理线程的统计信息;
所述轮询器用于轮询所述用户线程中的事件并在轮询到事件时调用对应的所述用户线程。
在一些实施例中,所述用户线程至少包括接收的请求、用户线程的标识、用户线程的状态信息、通信通道;
其中,所述通信通道用于与所述用户线程通信。
在一些实施例中,所述物理线程通过epoll机制轮询所述用户线程中的事件。
第二方面,本申请还提供了一种电子设备,所述电子设备包括:
一个或多个处理器;
以及与所述一个或多个处理器关联的存储器,所述存储器用于存储程序指令,所述程序指令在被所述一个或多个处理器读取执行时,执行如下操作:
操作系统根据分区配置创建分区;
操作系统发起设备连接请求后,选择合适的分区,在所述分区内对每个核心创建物理线程及用户线程,其中,一个所述物理线程调用至少一个所述用户线程;
所述用户线程基于所述操作系统发起的队列创建请求,创建对应的队列;
所述操作系统通过所述物理线程调度用户线程,为分区内每个物理线程分配对应的队列,以便主机通过队列与NVMe-oF设备进行交互。
第三方面,本申请还提供了一种计算机可读存储介质,所述存储介质存储计算机程序,所述计算机程序使得计算机执行如下操作:
操作系统根据分区配置创建分区;
操作系统发起设备连接请求后,选择合适的分区,在所述分区内对每个核心创建物理线程及用户线程,其中,一个所述物理线程调用至少一个所述用户线程;
所述用户线程基于所述操作系统发起的队列创建请求,创建对应的队列;
所述操作系统通过所述物理线程调度用户线程,为分区内每个物理线程分配对应的队列,以便主机通过队列与NVMe-oF设备进行交互。
本申请实现的有益效果为:
本申请提供了一种应用于NVMe-oF设备的线程管理方法,包括操作系统根据分区配置创建分区;操作系统发起设备连接请求后,选择合适的分区,在所述分区内对每个核心创建物理线程及用户线程,其中,一个所述物理线程调用至少一个所述用户线程;所述用户线程基于所述操作系统发起的队列创建请求,创建对应的队列;所述操作系统通过所述物理线程调度用户线程,为分区内每个物理线程分配对应的队列,以便主机通过队列与NVMe-oF设备进行交互。通过将计算机系统内的CPU核心进行分区,再对每一个核心绑定一个物理线程,通过物理线程调度用户线程,并通过用户线程创建队列,实现为分区内的每一个核心分配一个对应的与NVMe-oF设备的交互队列;能够充分发挥主机多CPU,多核心的优势,将NVMe-oF设备的线程均衡的分布到主机的所有核心中,最大效率的利用主机的CPU核心的处理能力,提高NVMe-oF设备的整体使用性能。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图,其中:
图1是本申请实施例提供的线程管理架构图;
图2是本申请实施例提供的分区链表示意图;
图3是本申请实施例提供的分区结构示意图;
图4是本申请实施例提供的物理线程结构示意图;
图5是本申请实施例提供的用户线程示意图;
图6是本申请实施例提供的线程管理方法示意图;
图7是本申请实施例提供的电子设备结构图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应当理解,在本申请的描述中,除非上下文明确要求,否则整个说明书和权利要求书中的“包括”、“包含”等类似词语应当解释为包含的含义而不是排他或穷举的含义;也就是说,是“包括但不限于”的含义。
还应当理解,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本申请的描述中,除非另有说明,“多个”的含义是两个或两个以上。
需要注意的是,术语“S1”、“S2”等仅用于步骤的描述目的,并非特别指称次序或顺位的意思,亦非用以限定本申请,其仅仅是为了方便描述本申请的方法,而不能理解为指示步骤的先后顺序。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本申请要求的保护范围之内。
如背景技术所述,随着CPU技术的提高,CPU的核心越来越多,算力也越来越大。单CPU的核心最大能够达到60个,主机一般采用多CPU架构,这样整个主机的CPU核心的数目就非常大。而一个NVMe-oF设备的处理能力有限,经实际检验,4个CPU核心,就可以将设备的性能跑满。因此本申请提出一种应用于NVMe-oF设备的线程管理方法,以实现将NVMe-oF设备的线程均衡的分布到主机的所有核心中,最大效率的利用主机的CPU核心的处理能力,提高NVMe-oF设备的整体使用性能。
实施例一
本申请实施例提供了一种线程管理架构,具体的,如图1所示,利用本申请提供的线程管理架构,对NVMe-oF设备进行线程管理的过程,包括:
S1、操作系统发起NVMe-oF设备链接请求并选择合适分区。
为了能匹配NVMe-oF设备的处理能力,本申请将整个计算机系统的CPU核心切分成不同的分区(partition);操作系统依据分区配置,创建分区,对CPU核心进行划分;分区配置包括在整个系统内的分区个数以及每个分区内的占用的CPU核心集合,上述分区配置由用户根据实际需求进行设置。如图2所示,为了能让系统创建的分区均衡的被NVMe-oF设备,在创建分区后,将分区添加到分区链表,并按照已占用改分区的设备个数从小到大或者从大到小进行排列;每次操作系统在发起设备连接请求,选择分区时,优先选择已占用设备最小的分区。
S2、创建物理线程(pthread)以及用户线程(ult)。
对分区内每个核心创建物理线程以及用户线程,物理线程创建后与CPU核心进行绑定,即一个CPU核心对应一个物理线程;每个物理线程可以调度多个用户线程。
其中,分区的结构如图3所示,包括第一记录模块、调度机(sm)以及物理线程;其中,第一记录模块包括用于记录分区占用的核心集合(cpuset)、已占用分区的设备个数(devices)以及分区的统计信息(stats);这里的设备是指NVMe-oF target设备;分区的统计信息包括CPU利用率等,用于反映该分区的运行状态。调度机则用于调度物理线程以及用户线程。物理线程结构如图4所示,包括第二记录模块、用户线程、轮询器(poller);第二记录模块包括用于记录物理线程绑定的核心(CPU)以及物理线程的统计信息(stats);其中,物理线程的统计信息包括性能统计等;轮询器用于轮询所述用户线程中的事件并在轮询到事件时调用对应的所述用户线程,优选的,物理线程使用epoll机制去轮询用户线程中的时间,epoll机制为Linux下多路复用IO接口select/poll的增强版本,不迫使开发者每次等待事件之前都必须重新准备要被侦听的文件描述符集合,在获取事件时也无须遍历整个被侦听的描述符集。用户线程结构如图5所示,包括接收的请求(request)、用户线程的标识(id)、用户线程的状态信息(state)、通信通道(channel);通信通道用于与所述用户线程通信,一般一个对象对应一个通道,如NVMe-oF target设备的交互队列等。
S3、用户线程基于管理队列创建请求和交互队列创建请求,创建管理队列(adminQP)及交互队列(IO QP)。
操作系统向用户线程发起一个创建管理队列的管理队列创建请求,用户线程基于管理队列创建请求,创建管理队列。此时,物理线程通过轮询器轮询用户线程,轮询到该用户线程内存在创建管理队列的事件后,调度该用户线程,实现将与管理队列对应的用户线程对应到分区内的第一个物理线程。管理队列创建后,主机通过管理队列查询NVMe-oFtarget设备设备支持的最大交互队列数和队列最大深度,查询完成后,用户线程基于交互操作系统发起的交互队列创建请求,创建小于最大交互队列数的交互队列。物理线程轮询到用户线程内存在创建交互队列的事件,调度用户线程,为分区内每一个CPU核心分配一个对应的NVMe-oF target设备的交互队列;主机通过上述交互队列与NVMe-oF target设备进行交互。
实施例二
对应上述实施例,本申请提供了一种线程管理方法,如图6所示,所述方法包括:
210、操作系统根据分区配置创建分区;
所述分区至少包括第一记录模块、调度机以及物理线程;
其中,所述第一记录模块用于记录分区占用的核心集合、已占用分区的设备个数以及分区的统计信息;
所述调度机用于调度所述物理线程以及所述用户线程。
220、操作系统发起设备连接请求后,选择合适的分区,在所述分区内对每个核心创建物理线程及用户线程,其中,一个所述物理线程调用至少一个所述用户线程;
所述操作系统发起设备连接请求后,选择合适的分区,还包括:
221、将所述分区添加至分区链路表上;
222、所述操作系统根据所述已占用分区的设备个数对所述分区进行排列并维护;
223、操作系统发起设备连接请求后,选择已占用分区的设备个数最小的分区。
所述物理线程至少包括第二记录模块、用户线程、轮询器;
其中,所述第二记录模块用于记录所述物理线程绑定的核心以及所述物理线程的统计信息;
所述轮询器用于轮询所述用户线程中的事件并在轮询到事件时调用对应的所述用户线程。
所述用户线程至少包括接收的请求、用户线程的标识、用户线程的状态信息、通信通道;
其中,所述通信通道用于与所述用户线程通信。
其中,所述物理线程通过epoll机制轮询所述用户线程中的事件。
230、所述用户线程基于所述操作系统发起的队列创建请求,创建对应的队列;
所述队列创建请求包括管理队列创建请求以及交互队列创建请求,所述用户线程基于所述操作系统发起的队列创建请求,创建对应的队列方法,包括:
231、所述用户线程基于管理队列创建请求,创建管理队列;
232、通过所述管理队列查询NVMe-oF设备支持的最大交互队列数和队列最大深度;
233、查询完成后,所述用户线程基于交互队列创建请求,创建交互队列。
240、所述操作系统通过所述物理线程调度用户线程,为分区内每个物理线程分配对应的队列,以便主机通过队列与NVMe-oF设备进行交互。
所述为分区内每个物理线程分配对应的队列,包括:
241、所述管理队列对应分配至分区内的第一个所述物理线程;
242、所述交互队列对应分配至分区内的所有所述物理线程。
实施例三
对应上述实施例一和实施例二,本申请实施例提供一种电子设备,包括:
一个或多个处理器;以及与所述一个或多个处理器关联的存储器,所述存储器用于存储程序指令,所述程序指令在被所述一个或多个处理器读取执行时,执行如下操作:
操作系统根据分区配置创建分区;
操作系统发起设备连接请求后,选择合适的分区,在所述分区内对每个核心创建物理线程及用户线程,其中,一个所述物理线程调用至少一个所述用户线程;
所述用户线程基于所述操作系统发起的队列创建请求,创建对应的队列;
所述操作系统通过所述物理线程调度用户线程,为分区内每个物理线程分配对应的队列,以便主机通过队列与NVMe-oF设备进行交互。
其中,图7示例性的展示出了电子设备的架构,具体可以包括处理器710,视频显示适配器711,磁盘驱动器712,输入/输出接口713,网络接口714,以及存储器720。上述处理器710、视频显示适配器711、磁盘驱动器712、输入/输出接口713、网络接口714,与存储器720之间可以通过总线730进行通信连接。
其中,处理器710可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本申请所提供的技术方案。
存储器720可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器720可以存储用于控制电子设备700执行的操作系统721,用于控制电子设备700的低级别操作的基本输入输出系统(BIOS)722。另外,还可以存储网页浏览器723,数据存储管理系统724,以及图标字体处理系统725等等。上述图标字体处理系统725就可以是本申请实施例中具体实现前述各步骤操作的应用程序。总之,在通过软件或者固件来实现本申请所提供的技术方案时,相关的程序代码保存在存储器720中,并由处理器710来调用执行。
输入/输出接口713用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
网络接口714用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线730包括一通路,在设备的各个组件(例如处理器710、视频显示适配器711、磁盘驱动器712、输入/输出接口713、网络接口714,与存储器720)之间传输信息。
另外,该电子设备700还可以从虚拟资源对象领取条件信息数据库中获得具体领取条件的信息,以用于进行条件判断,等等。
需要说明的是,尽管上述设备仅示出了处理器710、视频显示适配器711、磁盘驱动器712、输入/输出接口713、网络接口714,存储器720,总线730等,但是在具体实施过程中,该设备还可以包括实现正常执行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本申请方案所必需的组件,而不必包含图中所示的全部组件。
实施例五
对应上述所有实施例,本申请实施例还提供一种计算机可读存储介质,其特征在于,其存储计算机程序,所述计算机程序使得计算机如下操作:
操作系统根据分区配置创建分区;
操作系统发起设备连接请求后,选择合适的分区,在所述分区内对每个核心创建物理线程及用户线程,其中,一个所述物理线程调用至少一个所述用户线程;
所述用户线程基于所述操作系统发起的队列创建请求,创建对应的队列;
所述操作系统通过所述物理线程调度用户线程,为分区内每个物理线程分配对应的队列,以便主机通过队列与NVMe-oF设备进行交互。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,云服务端,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅为本申请的较佳实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
- 线程管理方法、装置、电子设备及计算机可读存储介质
- 线程管理方法、装置、电子设备及计算机可读存储介质