CN114662162A - 实现动态分配vf的多算法核高性能sr-iov加解密系统及方法 - Google Patents
实现动态分配vf的多算法核高性能sr-iov加解密系统及方法 Download PDFInfo
- Publication number
- CN114662162A CN114662162A CN202210574434.7A CN202210574434A CN114662162A CN 114662162 A CN114662162 A CN 114662162A CN 202210574434 A CN202210574434 A CN 202210574434A CN 114662162 A CN114662162 A CN 114662162A
- Authority
- CN
- China
- Prior art keywords
- encryption
- decryption
- algorithm
- client
- vfdev
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/71—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
- G06F21/72—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information in cryptographic circuits
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/40—Bus structure
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
-
- 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]
-
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- Mathematical Physics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Storage Device Security (AREA)
Abstract
本发明提供了一种实现动态分配VF的多算法核高性能SR‑IOV加解密系统及方法,包括主机、带有多加解密卡VF的PCIE芯片以及若干客户机,主机和客户机之间创建有对应的共享内存,所述主机包括VF算法核管理器和PF驱动,所述带有多加解密卡VF的PCIE芯片包括设置有VF信箱中断寄存器、算法IP核中断状态寄存器和算法IP核空闲状态寄存器的算法控制器,本发明设计方案下针对具有SR‑IOV功能的加密卡VF的扩展性不足,在PCIe加解密芯片的VF的数量固定的情形下,当客户机数量多于VF的数量时,通过热插拔机制将VF提供到有加解密需求的客户机上,从而提升SR‑IOV加密卡VF的有效利用率。
Description
技术领域
本发明涉及加解密芯片技术领域,尤其涉及一种实现动态分配VF的多算法核高性能SR-IOV加解密系统及方法。
背景技术
随着对虚拟化I/O技术需求的快速增长,SR-IOV技术也面临着一些问题,比如SR-IOV的VF数目是固定的,可能少于虚拟机的数量,无法根据实际需要灵活地生成相应数量的VF。与软件实现的I/O虚拟化技术相比,SR-IOV的灵活性和兼容性相对较差。当虚拟机对SR-IOV设备的需求大于SR-IOV设备能够提供的VF数量时,则无法充分发挥设备的共享能力。目前看到的SR-IOV加密卡的解决方案有1. 提供足够多的VF资源,例如提供128个VF供客户机使用;2. 使用半虚拟化技术将设备驱动分为前端和后端两个驱动,由前后端驱动协同实现I/O虚拟化。后端驱动位于具有I/O特权的特权虚拟机中,能够直接使用I/O设备,前端驱动位于非特权的普通虚拟机。特权虚拟机中的后端驱动直接访问普通虚拟机保存数据的共享内存,然后使用设备驱动直接读写数据。基于前后端驱动实现的I/O虚拟化方式需要修改虚拟机的系统内核,通用性较低,加解密性能较低。
在目前市场上,有的SR-IOV加密卡中,客户机VF驱动程序必须和底层的VF硬件绑定,分配给客户机的VF资源是固定的,当客户机没有使用加解密功能时,会浪费VF资源,并且使得别的客户机加解密需求受到影响,不够灵活。 有的PCIe接口SR-IOV加密卡,VF数量是固定的,当全部VF被全部分配掉时,当客户机要申请加密VF时,因为没有VF可分配,系统报告错误,不支持随后的加密操作。有的PCIe接口SR-IOV加密卡,在VF数量是固定的情形下,在客户机需要加密时,当没有VF可用时,当客户机驱动发起一次I/O操作,由于I/O缺页错误陷入到VMM中,由VMM将此请求转发给主机PF/VF管理模块,随后由主机PF/VF管理模块按一定的规则分配VF给客户机,而后客户机使用分配到的VF进行I/O操作,这样的处理不够高效。
在已有的网卡VF动态管理专利中,针对具有SR-IOV功能的高速网卡VF的扩展性不足,提供一种基于高速网卡SR-IOV功能的VF资源动态调度方法,一方面增加VF的数量,其网卡VF动态管理的方式是:动态调度模块用于管理和调度VF硬件资源,运行在Linux操作系统内核,与PCI子系统、资源配置模块相连。动态调度模块管理两个队列,分别为已处理请求队列和未处理请求队列。动态调度模块从资源配置模块接收“VF硬件资源对象分配请求”(后面简称请求),将未处理的“VF硬件资源对象分配请求”放入未处理请求队列中。动态调度模块按先入先出的顺序对未处理请求队列中的请求进行处理,取出队列头的请求,获取资源配置模块中VF硬件资源对象队列中的VF硬件资源对象,判断VF硬件资源对象的使用情况,如果VF硬件资源对象队列中有空闲的VF硬件资源对象,则将空闲的VF硬件资源对象分配给VF软件资源对象,然后将请求放入到已处理队列;如果资源配置模块中VF硬件资源对象队列中没有空闲的VF硬件资源对象,则循环访问已处理请求队列中的每个已处理请求,获取已处理请求的优先级,与当前请求(即从未处理请求队列取出的队头的请求)的优先级进行比较,如果已处理请求的优先级低于当前请求,则当前请求抢占已处理请求的VF硬件资源对象,反之则将当前请求重新放入未处理请求队列中,等待下一次的处理。动态调度模块循环处理未处理队列中的请求。
发明内容
本发明的目的在于提供一种实现动态分配VF的多算法核高性能SR-IOV加解密系统及方法,从而解决现有技术中存在的前述问题。
为了实现上述目的,本发明采用的技术方案如下:
一种实现动态分配VF的多算法核高性能SR-IOV加解密系统,包括主机、带有多加解密卡VF的PCIE芯片以及若干客户机,主机和客户机之间创建有对应的共享内存,所述主机包括VF算法核管理器和PF驱动,所述带有多加解密卡VF的PCIE芯片包括设置有VF信箱中断寄存器、算法IP核中断状态寄存器和算法IP核空闲状态寄存器的算法控制器,所述PF驱动负责从所述PCIE芯片的VF信箱中断寄存器和算法IP核中断状态寄存器中接收VF信箱MSI中断信号及算法IP核完成MSI中断信号,并将算法IP核完成状态发送给主机的所述VF算法核管理器;所述VF算法核管理器负责配置和管理算法IP核及客户机的加解密卡VF,通过共享内存获取加解密卡VF的使用状态,当主机的VF算法核管理器检测到PCIE芯片中可用加解密卡VF的个数为0时,根据共享内存消息队列中加解密卡VF使用状态,将使用频率最低的客户机加解密卡VF热拔除,以供主机创建客户机时由PF驱动分配使用;当主机VF算法核管理器检测共享内存有申请VF资源状态消息时,将从空闲的加解密卡VF队列上热拔除一个加解密卡VF,并热插入到当前请求加解密卡VF的客户机上。
优选的,所述共享内存是指客户机指向共享消息VF_Dev_ShareMsg结构类型的内存缓冲区VFDev,其中共享消息包括对应的客户机编号dom_index,加解密卡VF优先级propriety,对应的加解密卡VF编号vf_index,加解密线程数thread_Num,加解密卡VF是否处于空闲状态vf_idle,加解密卡VF请求算法IP核消息AlgKernal_Req_Msg以及算法IP核完成状态消息AlgKernal_Done_Msg;
所述VF算法核管理器用于维护VF_Dev_ShareMsg结构列表,对加解密卡VF进行动态分配,其数据结构的字段包括已分配加解密卡VF的个数VF_Num、客户机共享内存主机链表VFDevCtrl和客户机加解密卡VF优先级降序主机链表VFDevIdle;
所述VF算法核管理器检查客户机的共享内存VFDev的vf_idle字段,如果是空闲状态,就对共享内存VFDev的加解密卡VF优先级propriety字段增加1处理;VFDevIdle链表的排序是根据VF_Dev_ShareMsg中的加解密卡VF的优先级propriety对VFDevCtrl链表进行降序排列,使得快速查找使用率最低的客户机加解密卡VF进行热拔除,并将已拔除的加解密卡VF热插到有加解密请求的客户机上。
优选的,所述带有多加解密卡VF的PCIE芯片包括PCIe3.0核、算法控制器和32个算法IP核,其中所述算法控制器包括VF信箱中断寄存器;
所述VF信箱中断寄存器具有读操作清零属性,与VF信箱的中断输出信号相连接,每个比特位连接到一个VF信箱,当客户机X加密VF驱动初始化时,当客户机X将共享内存VFDev地址信息写入到VFx信箱寄存器中后,产生高电平给VF信箱中断寄存器的X比特位,由VF驱动将VFDev首地址信息通过PCIE接口写入到所述VF信箱中断寄存器对应的比特位上,随后产生MSI中断通知主机PF驱动,主机PF驱动将客户机X的VFDev地址信息取出,将VFDev的地址转换成主机逻辑地址,从而链接到主机中VF_AlgKernalCtrl的VFDevCtrl字段,供主机VF算法核管理器使用。
优选的,所述当客户机X加密VF驱动初始化时,由VF驱动将VFDev首地址信息通过PCIE接口写入到所述VF信箱中断寄存器对应的比特位上,随后产生MSI中断通知主机PF驱动具体为:当客户机X将共享内存VFDev地址信息写入到VFx信箱寄存器中后,产生高电平给VF信箱中断寄存器的X比特位,上位主机PF驱动在MSI ISR中读取PCIe加解密芯片的VF信箱中断寄存器时,得到比特位X值是1,随后该X比特位会变成低电平,即比特位X的值变成了0。
优选的,所述VF算法核管理器需要判断是否需要进行创建空闲链表,其判断过程是:首先判断所有的客户机共享内存VFDev中所对应的加解密卡VF编号,如果有编号,则说明对应的客户机有加解密卡VF;然后进一步判断该加解密卡VF是否处于空闲,若字段是1,则属于空闲,此时加解密优先级加1;若不是1,则说明该加解密卡VF属于运行中;如果对应的加解密卡VF编号为-1,则表示该共享内存VFDev需要请求分配VF,然后设置idlelist是1;或者取出VF算法核管理器VF_AlgKernalCtrl中的VF_Num字段,若等于加解密卡VF的最大值,那么此时已没有空闲的加解密卡VF,则设置idlelist是1;idlelist是1,表明需要重新构建一个空闲链表。
优选的,创建空闲链表的过程具体包括:针对每个客户机的VF_Dev_ShareMsg结构共享内存VFDev进行空闲状态检查,采用VF算法核管理器VF_AlgKernalCtrl中的VFDevCtrl链表指针检查客户机共享内存VFDev的vf_idle字段,确认是否处于空闲状态,若是,则将该客户机共享内存VFDev插入到VFDevIdle链表中,加解密卡VF优先级propriety字段增加1;重复上述步骤直到所有的客户机完成空闲状态检查过程, VFDevIdle链表中存在多个共享内存VFDev;且VFDevIdle链表中的共享内存VFDev按照根据VF_Dev_ShareMsg中的加解密卡VF优先级propriety进行降序排列。
优选的,当新创建一个客户机,需要对该客户机分配加解密卡VF时,首先判断目前是否还有空闲的加解密卡VF,也就是需要读取VF算法核管理器VF_AlgKernalCtrl中的VF_Num字段,如果VF_Num等于加解密卡VF的最大值,那么此时已没有空闲的加解密卡VF,需要从VFDevIdle链表中找到使用率最低的加解密卡VF进行热拔除,将共享内存VFDev从VFDevIdle链表中去除,VF_Num减少1,然后分配给新的客户机;热拔除时直接从第一个链表指针开始,取出共享内存VFDev,依次通过vf_idle字段进行空闲状态检测;如果其中的vf_idle字段是1,则该共享内存VFDev处于空闲,对其进行热拔除;若不是1,则该共享内存VFDev不空闲,则对第二个链表指针重复上述空闲状态检测,直到有共享内存VFDev处于空闲并进行热拔除;这个热拔除的过程具体包括:取出VFDev的客户机编号dom_index字段和加解密卡VF编号vf_index字段信息,调用系统API将dom_index占用的vf_index加解密卡VF热拔除,将vf_index赋值给vf_insert字段,最后将vf_index字段写入值0,表示已被热拔除加解密卡VF,将VFDev从VFDevIdle链表中去除;
取出共享内存VFDev其中的客户机编号 dom_index字段信息,调用系统API将为客户机dom_index热插入vf_insert指示的加解密卡VF,将vf_insert赋值给共享内存 VFDev中的加解密卡VF编号vf_index字段, 用于通知客户机的虚拟机加密卡VF及算法核管理任务模块VM_X_VF_AlgKernal_Task,进而唤醒加解密线程继续运行。
本发明的另一个目的在于提供一种实现动态分配VF的多算法核高性能SR-IOV加解密方法,包括以下步骤:
S1,主机PF驱动SR-IOV加解密系统初始化,此时所有算法IP核及加解密卡VF均为空闲状态;
S2,创建客户机m,所述PF驱动负责配置和管理客户机的加解密卡VF;初始化所述客户机m及其VF驱动,分配其与PF驱动通信的共享内存VFDev;将共享内存VFDev的地址同步到主机PF驱动;
所述客户机m通过共享内存VFDev向主机请求当前可用的算法IP核X,创建加解密线程Thread_m_X,同时创建用于获取算法IP核X请求结果的客户机内核RTOS算法线程间完成状态通信的消息队列VM_m_Thread_Msg_Q及VM_m_ReqAlgKernal_Msg_Q;
S3,待VM_m_Thread_Msg_Q获取到算法IP核X的完成状态消息,则唤醒加解密线程Thread_m_X, 完成PCIE加密芯片算法控制器执行加解密过程;
S4, 待该加解密操作完成后将算法IP核空闲状态寄存器中的X比特位设置为1,算法IP核中断状态寄存器对应的X比特位为高电平,产生MSI消息中断给主机PF驱动,从而实现每个算法IP核按主机分配的中断向量号实时产生MSI消息中断请求给主机,由主机PF驱动MSI ISR统一处理算法IP核的完成状态中断;
S5,重复步骤S2-S4,当创建的客户机数量大于加解密卡VF数量或VF算法核管理器检测到可用加解密卡VF的个数为0时,需要对加解密卡VF实现动态调配,包括以下步骤:
获取使用率最低的加解密卡VF及其对应的客户机,确定其状态是否处于空闲状态,若处于空闲状态,则该加解密卡VF被拔除并分配给当前请求加解密卡VF的客户机上;继续执行步骤S3-S4。
优选的,步骤S2中具体包括:
S21,配置空间,内存空间映射,并为主机PF驱动分配MSI中断向量,从内存空间中读取算法IP核空闲状态寄存器即ALG_KERNEL_IDLE_Reg,并将读取到的算法IP核空闲状态寄存器值赋值给算法管理器全局变量ALG_KERNEL_IDLE,其32个比特位就对应到32个算法IP核;
S22,创建客户机,并分配空闲的加解密卡VF;初始化客户机,加解密卡VF驱动初始化,分配与PF驱动通信的共享内存VFDev,共享内存VFDev包括对应的客户机编号dom_index,加解密卡VF优先级propriety,对应的加解密卡VF编号vf_index,加解密线程数thread_Num,加解密卡VF请求算法IP核消息AlgKernal_Req_Msg以及算法IP核完成状态消息AlgKernal_Done_Msg;其中的dom_index字段设置为客户机编号,vf_index字段设置为加解密卡VF的编号;
S23, 由VF驱动将VFDev首地址信息通过PCIE接口写入到SR-IOV加解密芯片的客户机VF驱动对应的VF信箱中断寄存器阵列中,随后产生MSI中断通知主机PF驱动,主机PF驱动MSI ISR将VFDev地址信息取出,并将共享内存VFDev地址转换成主机逻辑地址,供主机VF算法核管理器使用。
优选的,步骤S5中,获取使用率最低的加解密卡VF及其对应的客户机之前还包括创建空闲链表过程,具体包括以下步骤:
采用VF算法核管理器VF_AlgKernalCtrl中的VFDevCtrl链表指针,针对每个客户机的VF_Dev_ShareMsg结构共享内存VFDev,检查客户机共享内存VFDev的vf_idle字段,确认是否处于空闲状态,若是,则将该客户机VFDev插入到VFDevIdle链表中,加解密VF优先级propriety字段增加1;重复该过程,VFDevIdle链表中存在多个共享内存VFDev;且VFDevIdle链表中的VFDev按照根据VF_Dev_ShareMsg中的加解密VF优先级propriety进行降序排列。
优选的,在建立空闲链表之前所述VF算法核管理器需要判断是否需要进行创建空闲链表,其判断过程是:首先判断所有的客户机共享内存VFDev中所对应的加解密VF编号,如果有编号,则说明对应的客户机有加解密卡VF;然后进一步判断该加解密VF是否处于空闲,若字段是1,则属于空闲,此时加解密优先级加1;若不是1,则说明该加解密VF属于运行中;如果对应的加解密VF编号为-1,则表示该共享内存需要请求分配VF,然后设置idlelist是1;或者取出VF算法核管理器VF_AlgKernalCtrl中的VF_Num字段,若等于VF的最大值,那么此时已没有空闲的加解密卡VF,则设置idlelist是1;idlelist是1,表明需要重新构建一个空闲链表。
优选的,当需要进行热拔除时,具体步骤为:从VFDevIdle链表中找到使用率最低的VF进行热拔除,将共享内存VFDev从VFDevIdle链表中去除,VF_Num减少1,然后分配给新的客户机;热拔除时直接从第一个链表指针开始,取出共享内存VFDev;如果其中的vf_idle字段是1,则该共享内存VFDev处于空闲,对其进行热拔除;若不是1,则该VFDev不空闲,则对第二个链表指针重复上述处理。这个热拔除的过程具体包括:取出VFDev的客户机编号dom_index字段和加解密VF编号vf_index字段信息,调用系统API将dom_index占用的vf_index加解密VF热拔除,将vf_index赋值给vf_insert字段,最后将vf_index字段写入值0,表示已被热拔除VF,将共享内存VFDev从VFDevIdle链表中去除;
取出共享内存VFDev其中的客户机编号 dom_index字段信息,调用系统API将为客户机dom_index热插入vf_insert指示的加解密VF,将vf_insert赋值给共享内存 VFDev中的加解密VF编号vf_index字段, 用于通知客户机VM_X_VF_AlgKernal_Task,进而唤醒加解密线程继续运行。
优选的,步骤S3中具体包括:
S31,当客户机m有加解密进程需求时,所述客户机m通过共享内存VFDevm中的AlgKernal_Req_Msg字段向主机PF驱动VF算法核管理器请求当前可用的算法IP核的编号为X,创建加解密线程Thread_m_X;
S32,创建用于获取算法IP核X请求结果的客户机内核RTOS算法线程间完成状态通信的消息队列VM_m_Thread_Msg_Q及VM_m_ReqAlgKernal_Msg_Q,客户机创建具有较高优先级的进程:VF算法核管理任务VM_m_VF_AlgKernal_Task:
(a)检测AlgKernal_Req_Msg中如果有请求算法IP核X回应消息,则将会向VM_m_ReqAlgKernal_Msg_Q写入X消息用于唤醒将使用算法IP核的线程继续运行。
(b)检测AlgKernal_Done_Msg中如果有算法核X完成状态消息,则将会向VM_m_Thread_Msg_Q写入值为 2^X 的消息,用于唤醒客户机m线程Thread_m继续运行。
优选的,步骤S4具体包括:
S41,将选定算法的密钥信息组织成数据包,用户待加解密数据的PCIE总线起始地址StartAddr_X及长度Size_X,读写Offset置0,算法IP核编号X及其算法种类等寄存器配置信息组织成数据包,通过PCIe接口发送给加密芯片的算法IP核X;
S42,Thread_m_X向VM_m_Thread_Msg_Q获取值为 2^X 的消息,被阻塞住,主动放弃本线程的运行权;
S43,等待算法IP核X将待加解密数据完成加解密操作后,加密芯片发出PCIe MSI中断,由客户机m的VM_m_VF_AlgKernal_Task向客户机m内核消息对列VM_m_Thread_Msg_Q中写入2^X 消息后,线程Thread_m_X被客户机m系统内核调度唤醒;
S44, 线程Thread_m_X刷新待加密数据PCIE总线起始地址处的数据高速缓存内容,而后从该地址读出加密后的数据,从而完成本次加密任务,最后释放中间件线程Thread_m_X相关资源。
更优选的,步骤S43中所述等待算法IP核X将待加解密数据完成加解密操作,具体包括:
1) PCIe加密芯片内部算法控制器将ALG_KERNEL_IDLE_Reg对应的X比特位设置成0表示繁忙;
2) PCIe加密芯片内部算法控制器配合算法IP核X,使用DMA模块完成加解密操作及结果数据的搬移工作,当加密全部操作完成后,算法IP核X将ALG_KERNEL_INT_STATUS_Reg对应的X比特位置成高电平状态;
3) 当目标全部的待加解密源数据加密作业操作完毕,算法控制器先将ALG_KERNEL_IDLE_Reg寄存器对应的X比特位设置成1表示空闲;同时当ALG_KERNEL_INT_STATUS_Reg对应的X比特位是高电平时,读出算法核X的中断向量号并写入MSI中断“Message Data”寄存器,为算法IP核X产生相对应的MSI消息中断,通知上位主机PF驱动芯片算法内核已完成加解密操作。
本发明的有益效果是:
本发明提供了一种实现动态分配VF的多算法核高性能SR-IOV加解密系统及方法,该在本发明设计方案下针对具有SR-IOV功能的加密卡VF的扩展性不足,在PCIe加解密芯片的VF的数量固定的情形下,当客户机数量多于VF的数量时,提供一种基于SR-IOV加密卡VF资源动态调度方法,即通过热插拔机制将VF提供到有加解密需求的客户机上,提升SR-IOV加密卡VF的有效利用率。在本设计中,始终会有产生一个空闲加解密VF,为新创建的客户机提供VF加解密服务通道;已分配加解密VF的客户机还是可以按正常方式去使用VF加解密功能。
附图说明
图1是实施例1中提供的多算法核高性能SR-IOV加解密系统组成;
图2是实施例1中提供的算法控制器为算法IP核X、MAILBOX产生MSI中断处理示意图;
图3是实施例2中提供的任一客户机m进行加解密处理流程示意图;
图4是实施例2中PCIe加密芯片算法控制器加解密处理流程示意图;
图5是实施例2中上位主机PF驱动MSI ISR 处理流程示意图;
图6是实施例2中主机PF驱动VF算法核管理器处理流程示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不用于限定本发明。
实施例1
本实施例提供了一种实现动态分配VF的多算法核高性能SR-IOV加解密系统,如图1所示,包括主机、带有多加解密卡VF的PCIE芯片以及若干客户机,主机和客户机之间创建有对应的共享内存,所述主机包括VF算法核管理器和PF驱动,所述带有多加解密卡VF的PCIE芯片包括设置有VF信箱中断寄存器、算法IP核中断状态寄存器和算法IP核空闲状态寄存器的算法控制器,所述PF驱动负责从所述PCIE芯片的VF信箱中断寄存器和算法IP核中断状态寄存器中接收VF信箱MSI中断信号及算法IP核完成MSI中断信号,并将算法IP核完成状态发送给主机的所述VF算法核管理器;所述VF算法核管理器负责配置和管理算法IP核及客户机的VF,通过共享内存获取加解密卡VF的使用状态,当主机的VF算法核管理器检测到PCIE芯片中可用加解密卡VF的个数为0时,根据共享内存消息队列中VF使用状态,将使用频率最低的客户机加解密卡VF热拔除,以供主机创建客户机时由PF驱动分配使用;当主机VF算法核管理器检测共享内存有申请VF资源状态消息时,将从空闲的加解密卡VF队列上热拔除一个VF,并热插入到当前请求加解密卡VF的客户机上。
本实施例中的所述共享内存是指客户机指向共享消息VF_Dev_ShareMsg结构类型的内存缓冲区VFDev,其中共享消息包括对应的客户机编号dom_index,加解密VF优先级propriety,对应的加解密VF编号vf_index,加解密线程数thread_Num,对应的加解密VF编号vf_index,加解密VF是否处于空闲状态vf_idle,加解密VF请求算法IP核消息AlgKernal_Req_Msg以及算法IP核完成状态消息AlgKernal_Done_Msg;
表 1. Struct VF_Dev_ShareMsg结构体的主要成员
所述VF算法核管理器用于维护VF_Dev_ShareMsg结构列表,对加密卡VF进行动态分配,其数据结构的字段包括已分配加解密VF的个数VF_Num、客户机共享内存主机链表VFDevCtrl和客户机VF优先级降序主机链表VFDevIdle;
表 2. Struct VF_AlgKernalCtrl结构体的主要成员
所述VF算法核管理器检查客户机的VFDev的vf_idle字段,如果是空闲状态,就对VFDev的加解密卡VF优先级propriety字段增加1处理;VFDevIdle链表的排序是根据VF_Dev_ShareMsg中的加解密卡VF的优先级propriety对VFDevCtrl链表进行降序排列,使得快速查找使用率最低的客户机VF进行热拔除,并将已拔除的加解密卡VF热插到有加解密请求的客户机上。
本实施例中的所述带有多加解密卡VF的PCIE芯片包括PCIe3.0核、算法控制器和32个算法IP核,其中所述算法控制器包括VF信箱中断寄存器;
所述VF信箱中断寄存器具有读操作清零属性,与VF信箱的中断输出信号相连接,每个比特位连接到一个VF信箱,当客户机X加密VF驱动初始化时,由VF驱动将VFDev首地址信息通过PCIE接口写入到VF信箱寄存器中后,产生高电平给所述VF信箱中断寄存器对应的比特位上,随后产生MSI中断通知主机PF驱动,主机PF驱动将客户机X的VFDev地址信息取出,将VFDev的地址转换成主机逻辑地址,从而链接到主机中VF_AlgKernalCtrl的VFDevCtrl字段,供主机VF算法核管理器使用。
所述当客户机X加密VF驱动初始化时,由VF驱动将VFDev首地址信息通过PCIE接口写入到VF信箱寄存器中后,产生高电平给所述VF信箱中断寄存器对应的比特位上,随后产生MSI中断通知主机PF驱动具体为:当客户机X将共享内存VFDev地址信息写入到VFx信箱寄存器中后,产生高电平给VF信箱中断寄存器的X比特位,上位主机PF驱动在MSI ISR中读取PCIe加解密芯片的VF信箱中断寄存器时,得到比特位X值是1,随后该X比特位会变成低电平,即比特位X的值变成了0。
所述算法IP核空闲状态寄存器中的每个算法IP核对应到其中的一个比特位,当有算法核X产生加解密业务时,对应的X比特位清除成0,表示繁忙状态;当某个算法IP核X产生作业完成状态时,其对应的比特位X会被置成1,表示空闲可用状态;
所述算法IP核中断状态寄存器具有读操作清零属性,与算法IP核的中断输出信号相连接,每个比特位对应一个算法IP核,当算法IP核X完成作业操作时,输出高电平给算法IP核中断状态寄存器的X比特位,当算法IP核中断状态寄存器中某个算法IP核X对应的比特位X处于高电平时, PCIE芯片内的算法控制器读出算法IP核X的中断向量号并写入到MSI中断向量号寄存器中,每个算法IP核按特权域主机系统分配的中断向量号实时地产生MSI消息中断请求给主机,由主机PF驱动MSI ISR统一处理算法IP核的完成状态中断,通知上位主机PF驱动芯片算法内核已完成加解密操作。
本实施例中的所述VF算法核管理器需要判断是否需要进行创建空闲链表,其判断过程是:首先判断所有的客户机共享内存VFDev中所对应的加解密VF编号,如果有编号,则说明对应的客户机有加解密卡VF;然后进一步判断该加解密VF是否处于空闲,若字段是1,则属于空闲,此时加解密优先级加1;若不是1,则说明该加解密VF属于运行中;如果对应的加解密VF编号为-1,则表示该共享内存需要请求分配VF,然后设置idlelist是1;或者取出VF算法核管理器VF_AlgKernalCtrl中的VF_Num字段,若等于VF的最大值,那么此时已没有空闲的加解密卡VF,则设置idlelist是1;idlelist是1,表明需要重新构建一个空闲链表。
创建空闲链表的过程具体包括:采用VF算法核管理器VF_AlgKernalCtrl中的VFDevCtrl链表指针,针对每个客户机的VF_Dev_ShareMsg结构共享内存VFDev,检查客户机VFDev的vf_idle字段,确认是否处于空闲状态,若是,则将该客户机VFDev插入到VFDevIdle链表中,加解密VF优先级propriety字段增加1;重复该过程,VFDevIdle链表中存在多个VFDev;且VFDevIdle链表中的VFDev按照根据VF_Dev_ShareMsg中的加解密VF优先级propriety进行降序排列。
当新创建一个客户机,需要对该客户机分配加解密卡VF时,首先判断目前是否还有空闲的加解密卡VF,也就是需要读取VF算法核管理器VF_AlgKernalCtrl中的VF_Num字段,如果VF_Num等于VF的最大值,那么此时已没有空闲的加解密卡VF,需要从VFDevIdle链表中找到使用率最低的VF进行热拔除,将VFDev从VFDevIdle链表中去除,VF_Num减少1,然后分配给新的客户机;热拔除时直接从第一个链表指针开始,取出VFDev;如果其中的vf_idle字段是1,则该VFDev处于空闲,对其进行热拔除;若不是1,则该VFDev不空闲,则对第二个链表指针重复上述处理。这个热拔除的过程具体包括:取出VFDev的客户机编号dom_index字段和加解密VF编号vf_index字段信息,调用系统API将dom_index占用的vf_index加解密VF热拔除,将vf_index赋值给vf_insert字段,最后将vf_index字段写入值0,表示已被热拔除VF,将VFDev从VFDevIdle链表中去除;
取出VFDev其中的客户机编号 dom_index字段信息,调用系统API将为客户机dom_index热插入vf_insert指示的加解密VF,将vf_insert赋值给 VFDev中的加解密VF编号vf_index字段, 用于通知客户机VM_X_VF_AlgKernal_Task,进而唤醒加解密线程继续运行。
实施例2
本实施例提供了一种实现动态分配VF的多算法核高性能SR-IOV加解密方法,基于实施例1中提供的实现动态分配VF的多算法核高性能SR-IOV加解密系统,包括以下步骤:
S1,主机PF驱动SR-IOV加解密系统初始化,此时所有算法IP核及加解密卡VF均为空闲状态;
S2,创建客户机,所述PF驱动负责配置和管理客户机的加解密卡VF;初始化所述客户机及其VF驱动,分配其与PF驱动通信的共享内存VFDev;将共享内存地址VFDev同步到主机PF驱动;
所述客户机通过共享内存VFDev向主机请求当前可用的算法IP核X,创建加解密线程Thread_m_X,同时创建用于获取算法IP核X请求结果的客户机内核RTOS算法线程间完成状态通信的消息队列VM_m_Thread_Msg_Q及VM_m_ReqAlgKernal_Msg_Q;
S3,待VM_m_Thread_Msg_Q获取到算法IP核X的完成状态消息,则唤醒加解密线程Thread_m_X,完成PCIE加密芯片算法控制器执行加解密过程;
S4, 待该加解密操作完成后将算法IP核空闲状态寄存器中的X比特位设置为1,算法IP核中断状态寄存器对应的X比特位为高电平,产生MSI消息中断给主机PF驱动,从而实现每个算法IP核按主机分配的中断向量号实时产生MSI消息中断请求给主机,由主机PF驱动MSI ISR统一处理算法IP核的完成状态中断;
S5,重复步骤S2-S4,当创建的客户机数量大于加解密卡VF数量或VF算法核管理器检测到可用加解密VF的个数为0时,需要对加解密卡VF实现动态调配,包括以下步骤:
获取使用率最低的加解密卡VF及其对应的客户机,确定其状态是否处于空闲状态,若处于空闲状态,则该加解密卡VF被拔除并分配给当前请求加解密卡VF的客户机上;继续执行步骤S3-S4。
本实施例中的步骤S2中具体包括:
S21,配置空间,内存空间映射,并为主机PF驱动分配MSI中断向量,从内存空间中读取算法IP核空闲状态寄存器即ALG_KERNEL_IDLE_Reg,并将该值赋值给算法管理器全局变量ALG_KERNEL_IDLE,其32个比特位就对应到32个算法IP核;
S22,创建客户机,并分配空闲的加密卡VF;初始化客户机,VF驱动初始化,分配与PF驱动通信的共享内存VFDev,共享内存VFDev包括对应的客户机编号dom_index,加解密VF优先级propriety,对应的加解密VF编号vf_index,加解密线程数thread_Num,加解密VF请求算法IP核消息AlgKernal_Req_Msg以及算法IP核完成状态消息AlgKernal_Done_Msg;其中的dom_index字段设置为客户机编号,vf_index字段设置为加解密卡VF的编号;
S23, 由VF驱动将VFDev首地址信息通过PCIE接口写入到SR-IOV加解密芯片的客户机VF驱动对应的VF信箱中断寄存器阵列中,随后产生MSI中断通知主机PF驱动,主机PF驱动MSI ISR将VFDev地址信息取出,并将VFDev地址转换成主机逻辑地址,供主机VF算法核管理器使用。
步骤S3中具体包括:
S31,当客户机m有加解密进程需求时,所述客户机m通过共享内存VFDevm中的AlgKernal_Req_Msg字段向主机PF驱动VF算法核管理器请求当前可用的算法IP核的编号为X,创建加解密线程Thread_m_X;
S32,创建用于获取算法IP核X请求结果的客户机内核RTOS算法线程间完成状态通信的消息队列VM_m_Thread_Msg_Q及VM_m_ReqAlgKernal_Msg_Q,客户机创建具有较高优先级的进程:VF算法核管理任务VM_m_VF_AlgKernal_Task:
(a)检测AlgKernal_Req_Msg中如果有请求算法IP核X回应消息,则将会向VM_m_ReqAlgKernal_Msg_Q写入X消息用于唤醒将使用算法IP核的线程继续运行。
(b)检测AlgKernal_Done_Msg中如果有算法核X完成状态消息,则将会向VM_m_Thread_Msg_Q写入值为 2^X 的消息,用于唤醒客户机m线程Thread_m继续运行。
步骤S4具体包括:
S41,将选定算法的密钥信息组织成数据包,用户待加解密数据的PCIE总线起始地址StartAddr_X及长度Size_X,读写Offset置0,算法IP核编号X及其算法种类等寄存器配置信息组织成数据包,通过PCIe接口发送给加密芯片的算法IP核X;
S42,Thread_m_X向VM_m_Thread_Msg_Q获取值为2^X 的消息,被阻塞住,主动放弃本线程的运行权;
S43,等待算法IP核X将待加解密数据完成加解密操作后,加密芯片发出PCIe MSI中断,由客户机m的VM_m_VF_AlgKernal_Task向客户机m内核消息对列VM_m_Thread_Msg_Q中写入2^X 消息后,线程Thread_m_X被客户机m系统内核调度唤醒;
S44, 线程Thread_m_X刷新待加密数据PCIE总线起始地址处的数据高速缓存内容,而后从该地址读出加密后的数据,从而完成本次加密任务,最后释放中间件线程Thread_m_X相关资源。
步骤S43中所述等待算法IP核X将待加解密数据完成加解密操作,具体包括:
1)PCIe加密芯片内部算法控制器将ALG_KERNEL_IDLE_Reg对应的X比特位设置成0表示繁忙;
2)PCIe加密芯片内部算法控制器配合算法IP核X,使用DMA模块完成加解密操作及结果数据的搬移工作,当加密全部操作完成后,算法IP核X将ALG_KERNEL_INT_STATUS_Reg对应的X比特位置成高电平状态;
3)当目标全部的待加解密源数据加密作业操作完毕,算法控制器先将ALG_KERNEL_IDLE_Reg寄存器对应的X比特位设置成1表示空闲;同时当ALG_KERNEL_INT_STATUS_Reg对应的X比特位是高电平时,读出算法核X的中断向量号并写入MSI中断“Message Data”寄存器,为算法IP核X产生相对应的MSI消息中断,通知上位主机PF驱动芯片算法内核已完成加解密操作。
本实施例的步骤S5中,获取使用率最低的加解密卡VF及其对应的客户机之前还包括创建空闲链表过程,具体包括以下步骤:
采用VF算法核管理器VF_AlgKernalCtrl中的VFDevCtrl链表指针,针对每个客户机的VF_Dev_ShareMsg结构共享内存VFDev,检查客户机VFDev的vf_idle字段,确认是否处于空闲状态,若是,则将该客户机VFDev插入到VFDevIdle链表中,加解密VF优先级propriety字段增加1;重复该过程,VFDevIdle链表中存在多个VFDev;且VFDevIdle链表中的VFDev按照根据VF_Dev_ShareMsg中的加解密VF优先级propriety进行降序排列。
优选的,在建立空闲链表之前所述VF算法核管理器需要判断是否需要进行创建空闲链表,其判断过程是:首先判断所有的客户机共享内存VFDev中所对应的加解密VF编号,如果有编号,则说明对应的客户机有加解密卡VF;然后进一步判断该加解密VF是否处于空闲,若字段是1,则属于空闲,此时加解密优先级加1;若不是1,则说明该加解密VF属于运行中;如果对应的加解密VF编号为-1,则表示该共享内存需要请求分配VF,然后设置idlelist是1;或者取出VF算法核管理器VF_AlgKernalCtrl中的VF_Num字段,若等于VF的最大值,那么此时已没有空闲的加解密卡VF,则设置idlelist是1;idlelist是1,表明需要重新构建一个空闲链表。
当需要进行热拔除时,具体步骤为:从VFDevIdle链表中找到使用率最低的VF进行热拔除,将VFDev从VFDevIdle链表中去除,VF_Num减少1,然后分配给新的客户机;热拔除时直接从第一个链表指针开始,取出VFDev;如果其中的vf_idle字段是1,则该VFDev处于空闲,对其进行热拔除;若不是1,则该VFDev不空闲,则对第二个链表指针重复上述处理。这个热拔除的过程具体为:取出VFDev的客户机编号dom_index字段和加解密VF编号vf_index字段信息,调用系统API将dom_index占用的vf_index加解密VF热拔除,将vf_index赋值给vf_insert字段,最后将vf_index字段写入值0,表示已被热拔除VF,将VFDev从VFDevIdle链表中去除;
取出VFDev其中的客户机编号 dom_index字段信息,调用系统API将为客户机dom_index热插入vf_insert指示的加解密VF,将vf_insert赋值给 VFDev中的加解密VF编号vf_index字段,用于通知客户机VM_X_VF_AlgKernal_Task,进而唤醒加解密线程继续运行。
本发明设计的SR-IOV加解密卡具有如下的优点:
1.本设计的PCIe加解密芯片驱动软件根据上位主机PF驱动分配的连续中断的个数n,按顺序的方式,每n个一组,循环的将这n个中断向量写入到芯片内部每个算法IP核的ALG_KERNEL_X_MSI_IV_Reg寄存器中,每个算法IP核按特权域主机系统分配的中断向量号实时地产生MSI消息中断请求给主机,由主机PF驱动MSI ISR统一处理算法IP核的完成状态中断,并且不会与特权域主机中的用户进程有相关性。为避免中断共享及虚拟中断开销,客户机VF加解密不会产生给客户机VF的中断。在本发明设计中,使用少量的MSI中断就可以保证SR-IOV加密卡正常工作,解决SR-IOV虚拟化的中断向量短缺的问题,避免了虚拟机监视器对客户机VF开销,保证了SR-IOV系统的可扩展性。
2. 每个PCIe加解密算法核完成加解密操作后,最后产生MSI消息中断,通知上位主机PF驱动作业完成状态。因为设计使用ALG_KERNEL_INT_STATUS_Reg寄存器具有读清零属性,可以减少PCIe接口上的MSI中断相关寄存器读写事务,所以相比常规的MSI使用中断掩码方式更高效。针对SR-IOV加解密高性能虚拟化面临的中断处理开销问题,在客户机VF使用中不产生中断,由主机PF驱动去处理全部的算法核MSI中断,去除了VF设备中断事件以及虚拟机监视器和客户机操作系统对物理中断和客户机中断的处理开销,从而进一步大大提高性能。
3. 在PCIe多算法IP核的应用环境下,每个PCIe加密算法核完成状态可以在第一时间上传同步给上位主机PF驱动,因为算法核完成状态信息是被别的MSI中断ISR同步到上位机的,算法管理器统一管理并将中断向量号写入MSI中断“Message Data”寄存器从而产生MSI消息中断,由于系统存在处理时间差,可以减少PCIe加解密芯片发出的MSI消息中断的个数,减轻了特权域主机系统内核MSI中断处理负载,提高了主机系统处理MSI中断的效率, 提高了上位机主机/客户机多线程的作业处理效率。
4. 每个PCIe加密算法核完成状态,均能够同步到上位机PCIe驱动中, 在任何场景下,不会出现上位机与PCIe芯片算法IP核完成状态不一致的情形,因而上位机的每个线程都能够高效正常工作并释放系统资源。
5.按本发明设计的动态分配VF的设计使用方案,硬件及软件设计比较简单,可以为PCIe加解密操作提供高效的工作方式,降低整体研发成本,缩短研发时间。
6.由主机VF算法核管理器动态管理VF和算法IP核,可以根据客户机使用需求动态分配使用VF和算法IP核,客户机VF线程加解密可达到原生PCIe加解卡的性能指标最大化。
7. 本发明设计实现,无须修改编译上层主机操作系统内核,本SR-IOV加解密芯片具有更好的适应性,MSI中断在主机PF ISR中处理,客户机VF不会产生加解密中断,可以很好的解决虚拟化应用虚拟化中断模拟及虚拟机监视器和虚拟机之间的上下文切换开销,这是本发明设计的创新之处。
通过采用本发明公开的上述技术方案,得到了如下有益的效果:
在PCIe加解密芯片VF的数量受限的情形下,当客户机数量多于VF数量时不能满足所有客户机加密需求的情况,提供一种基于SR-IOV加密卡PF/VF通信的VF资源动态调度模型方法,提升SR-IOV加密卡有效利用率,为主机及客户机VF提供高效PCIe加解密操作:每个客户机在创建时为它分配一个加解密VF,当主机VF算法核管理器检测到可用加解密VF的个数为0时,根据共享内存消息队列中VF使用状态,将使用频率最低的客户机加密卡VF热拔除,供主机创建客户机时分配使用;当主机VF算法核管理器检测共享内存有申请VF资源状态消息时,将从空闲VF队列上热拔除一个VF,并热插入到当前请求VF的客户机上。使用热拔除的方式,可以在不需要修改主机、客户机系统内核的情形下,按正常的方式去使用SR-IOV加密卡,所有的客户机都有平等的机会使用加解密VF,并且能够达到较高的加解密性能,本设计方案对不同的主机系统应用环境具有更好的适应性、通用性。
主机VF算法核管理器针对创建的客户机,通过共享内存的方式来管理VF及算法IP核状态,可以根据客户机使用需求动态分配使用算法IP核,客户机VF加解密可以达到原生PCIe加解密卡最大化性能指标。本发明设计的软件实现无须修改编译上位机系统内核,本SR-IOV加解密芯片对不同的应用环境具有更好的适应性,具有较高的通用性。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。
Claims (10)
1.一种实现动态分配VF的多算法核高性能SR-IOV加解密系统,其特征在于,包括主机、带有多加解密卡VF的PCIE芯片以及若干客户机,主机和客户机之间创建有对应的共享内存,所述主机包括VF算法核管理器和PF驱动,所述带有多加解密卡VF的PCIE芯片包括设置有VF信箱中断寄存器、算法IP核中断状态寄存器和算法IP核空闲状态寄存器的算法控制器,所述PF驱动负责从所述PCIE芯片的VF信箱中断寄存器和算法IP核中断状态寄存器中接收VF信箱MSI中断信号及算法IP核完成MSI中断信号,并将算法IP核完成状态发送给主机的所述VF算法核管理器;所述VF算法核管理器负责配置和管理算法IP核及客户机的加解密卡VF,通过共享内存获取加解密卡VF的使用状态,当主机的VF算法核管理器检测到PCIE芯片中可用加解密卡VF的个数为0时,根据共享内存消息队列中加解密卡VF使用状态,将使用频率最低的客户机加解密卡VF热拔除,以供主机创建客户机时由PF驱动分配使用;当主机VF算法核管理器检测共享内存有申请VF资源状态消息时,将从空闲的加解密卡VF队列上热拔除一个加解密卡VF,并热插入到当前请求加解密卡VF的客户机上。
2.根据权利要求1所述的实现动态分配VF的多算法核高性能SR-IOV加解密系统,其特征在于,所述共享内存是指客户机指向共享消息VF_Dev_ShareMsg结构类型的内存缓冲区VFDev,其中共享消息包括对应的客户机编号dom_index,加解密卡VF优先级propriety,对应的加解密卡VF编号vf_index,加解密线程数thread_Num,加解密卡VF是否处于空闲状态vf_idle,加解密卡VF请求算法IP核消息AlgKernal_Req_Msg以及算法IP核完成状态消息AlgKernal_Done_Msg;
所述VF算法核管理器用于维护VF_Dev_ShareMsg结构列表,对加解密卡VF进行动态分配,其数据结构的字段包括已分配加解密卡VF的个数VF_Num、客户机共享内存主机链表VFDevCtrl和客户机加解密卡VF优先级降序主机链表VFDevIdle;
所述VF算法核管理器检查客户机的共享内存VFDev的vf_idle字段,如果是空闲状态,就对共享内存VFDev的加解密卡VF优先级propriety字段增加1处理;VFDevIdle链表的排序是根据VF_Dev_ShareMsg中的加解密卡VF的优先级propriety对VFDevCtrl链表进行降序排列,使得快速查找使用率最低的客户机VF进行热拔除,并将已拔除的加解密卡VF热插到有加解密请求的客户机上。
3.根据权利要求2所述的实现动态分配VF的多算法核高性能SR-IOV加解密系统,其特征在于,所述带有多加解密卡VF的PCIE芯片包括PCIe3.0核、算法控制器和32个算法IP核,其中所述算法控制器包括VF信箱中断寄存器;
所述VF信箱中断寄存器具有读操作清零属性,与VF信箱的中断输出信号相连接,每个比特位连接到一个VF信箱,当客户机X加密VF驱动初始化时,当客户机X将共享内存VFDev地址信息写入到VFx信箱寄存器中后,产生高电平给VF信箱中断寄存器的X比特位,由VF驱动将VFDev首地址信息通过PCIE接口写入到所述VF信箱中断寄存器对应的比特位上,随后产生MSI中断通知主机PF驱动,主机PF驱动将客户机X的VFDev地址信息取出,将VFDev的地址转换成主机逻辑地址,从而链接到主机中VF_AlgKernalCtrl的VFDevCtrl字段,供主机VF算法核管理器使用。
4.根据权利要求3所述的实现动态分配VF的多算法核高性能SR-IOV加解密系统,其特征在于,所述当客户机X加密VF驱动初始化时,由VF驱动将VFDev首地址信息通过PCIE接口写入到所述VF信箱中断寄存器对应的比特位上,随后产生MSI中断通知主机PF驱动具体为:当客户机X将共享内存VFDev地址信息写入到VFx信箱寄存器中后,产生高电平给VF信箱中断寄存器的X比特位,上位主机PF驱动在MSI ISR中读取PCIe加解密芯片的VF信箱中断寄存器时,得到比特位X值是1,随后该X比特位会变成低电平,即比特位X的值变成了0。
5.根据权利要求2所述的实现动态分配VF的多算法核高性能SR-IOV加解密系统,其特征在于,所述VF算法核管理器需要判断是否需要进行创建空闲链表,其判断过程是:首先判断所有的客户机共享内存VFDev中所对应的加解密卡VF编号,如果有编号,则说明对应的客户机有加解密卡VF;然后进一步判断该加解密卡VF是否处于空闲,若字段是1,则属于空闲,此时加解密优先级加1;若不是1,则说明该加解密卡VF属于运行中;如果对应的加解密卡VF编号为-1,则表示该共享内存VFDev需要请求分配加解密卡VF,然后设置idlelist是1;或者取出VF算法核管理器VF_AlgKernalCtrl中的VF_Num字段,若等于加解密卡VF的最大值,那么此时已没有空闲的加解密卡VF,则设置idlelist是1;idlelist是1,表明需要重新构建一个空闲链表。
6.根据权利要求5所述的实现动态分配VF的多算法核高性能SR-IOV加解密系统,其特征在于,创建空闲链表的过程具体包括:针对每个客户机的VF_Dev_ShareMsg结构共享内存VFDev进行空闲状态检查,采用VF算法核管理器VF_AlgKernalCtrl中的VFDevCtrl链表指针检查客户机共享内存VFDev的vf_idle字段,确认是否处于空闲状态,若是,则将该客户机共享内存VFDev插入到VFDevIdle链表中,加解密卡VF优先级propriety字段增加1;重复上述空闲状态检查步骤直到所有的客户机完成空闲状态检查过程, VFDevIdle链表中存在多个共享内存VFDev;且VFDevIdle链表中的共享内存VFDev按照根据VF_Dev_ShareMsg中的加解密卡VF优先级propriety进行降序排列。
7.根据权利要求6所述的实现动态分配VF的多算法核高性能SR-IOV加解密系统,其特征在于,当新创建一个客户机,需要对该客户机分配加解密卡VF时,首先判断目前是否还有空闲的加解密卡VF,也就是需要读取VF算法核管理器VF_AlgKernalCtrl中的VF_Num字段,如果VF_Num等于加解密卡VF的最大值,那么此时已没有空闲的加解密卡VF,需要从VFDevIdle链表中找到使用率最低的加解密卡VF进行热拔除,将共享内存VFDev从VFDevIdle链表中去除,VF_Num减少1,然后分配给新的客户机;热拔除时直接从第一个链表指针开始,取出共享内存VFDev,依次通过vf_idle字段进行空闲状态检测;如果其中的vf_idle字段是1,则该共享内存VFDev处于空闲,对其进行热拔除;若不是1,则该共享内存VFDev不空闲,则对第二个链表指针重复上述空闲状态检测,直到有共享内存VFDev处于空闲并进行热拔除;这个热拔除的过程具体包括:取出共享内存VFDev的客户机编号dom_index字段和加解密卡VF编号vf_index字段信息,调用系统API将dom_index占用的vf_index加解密卡VF热拔除,将vf_index赋值给vf_insert字段,最后将vf_index字段写入值0,表示已被热拔除加解密卡VF,将共享内存VFDev从VFDevIdle链表中去除;
取出共享内存VFDev其中的客户机编号 dom_index字段信息,调用系统API将为客户机dom_index热插入vf_insert指示的加解密卡VF,将vf_insert赋值给共享内存 VFDev中的加解密卡VF编号vf_index字段, 用于通知客户机的虚拟机加密卡VF及算法核管理任务模块VM_X_VF_AlgKernal_Task,进而唤醒加解密线程继续运行。
8.一种实现动态分配VF的多算法核高性能SR-IOV加解密方法,其特征在于,基于权利要求1-7任一所述的实现动态分配VF的多算法核高性能SR-IOV加解密系统,包括以下步骤:
S1,主机PF驱动SR-IOV加解密系统初始化,此时所有算法IP核及加解密卡VF均为空闲状态;
S2,创建客户机m,所述PF驱动负责配置和管理客户机的加解密卡VF;初始化所述客户机m及其VF驱动,分配其与PF驱动通信的共享内存VFDev;将共享内存VFDev的地址同步到主机PF驱动;
所述客户机m通过共享内存VFDev向主机请求当前可用的算法IP核X,创建加解密线程Thread_m_X,同时创建用于获取算法IP核X请求结果的客户机内核RTOS算法线程间完成状态通信的消息队列VM_m_Thread_Msg_Q及VM_m_ReqAlgKernal_Msg_Q;
S3,待VM_m_Thread_Msg_Q获取到算法IP核X的完成状态消息,则唤醒加解密线程Thread_m_X, 完成PCIE加密芯片算法控制器执行加解密过程;
S4, 待该加解密过程完成后将算法IP核空闲状态寄存器中的X比特位设置为1,算法IP核中断状态寄存器对应的X比特位为高电平,产生MSI消息中断给主机PF驱动,从而实现每个算法IP核按主机分配的中断向量号实时产生MSI消息中断请求给主机,由主机PF驱动MSIISR统一处理算法IP核的完成状态中断;
S5,重复步骤S2-S4,当创建的客户机数量大于加解密卡VF数量或VF算法核管理器检测到可用加解密卡VF的个数为0时,需要对加解密卡VF实现动态调配,包括以下步骤:
获取使用率最低的加解密卡VF及其对应的客户机,确定其状态是否处于空闲状态,若处于空闲状态,则该加解密卡VF被拔除并分配给当前请求加解密卡VF的客户机上;继续执行步骤S3-S4。
9.根据权利要求8所述的实现动态分配VF的多算法核高性能SR-IOV加解密方法,其特征在于,步骤S2中具体包括:
S21,配置空间,内存空间映射,并为主机PF驱动分配MSI中断向量,从内存空间中读取算法IP核空闲状态寄存器即ALG_KERNEL_IDLE_Reg,并将读取到的算法IP核空闲状态寄存器值赋值给算法管理器全局变量ALG_KERNEL_IDLE,其32个比特位就对应到32个算法IP核;
S22,创建客户机,并分配空闲的加解密卡VF;初始化客户机,加解密卡VF驱动初始化,分配与PF驱动通信的共享内存VFDev,共享内存VFDev包括对应的客户机编号dom_index,加解密卡VF优先级propriety,对应的加解密卡VF编号vf_index,加解密线程数thread_Num,加解密卡VF请求算法IP核消息AlgKernal_Req_Msg以及算法IP核完成状态消息AlgKernal_Done_Msg;其中的dom_index字段设置为客户机编号,vf_index字段设置为加解密卡VF的编号;
S23, 由VF驱动将VFDev首地址信息通过PCIE接口写入到SR-IOV加解密芯片的客户机VF驱动对应的VF信箱中断寄存器阵列中,随后产生MSI中断通知主机PF驱动,主机PF驱动MSI ISR将VFDev地址信息取出,并将VFDev地址转换成主机逻辑地址,供主机VF算法核管理器使用。
10.根据权利要求8所述的实现动态分配VF的多算法核高性能SR-IOV加解密方法,其特征在于,步骤S5中,获取使用率最低的加解密卡VF及其对应的客户机之前还包括创建空闲链表过程,具体包括以下步骤:
针对每个客户机的VF_Dev_ShareMsg结构共享内存VFDev进行空闲状态检查,采用VF算法核管理器VF_AlgKernalCtrl中的VFDevCtrl链表指针,检查客户机共享内存VFDev的vf_idle字段,确认是否处于空闲状态,若是,则将该客户机共享内存VFDev插入到VFDevIdle链表中,加解密卡VF优先级propriety字段增加1;重复上述空闲状态检查步骤直到所有的客户机完成空闲状态检查过程, VFDevIdle链表中存在多个共享内存VFDev;且VFDevIdle链表中的共享内存VFDev按照根据VF_Dev_ShareMsg中的加解密卡VF优先级propriety进行降序排列。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210574434.7A CN114662162B (zh) | 2022-05-25 | 2022-05-25 | 实现动态分配vf的多算法核高性能sr-iov加解密系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210574434.7A CN114662162B (zh) | 2022-05-25 | 2022-05-25 | 实现动态分配vf的多算法核高性能sr-iov加解密系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114662162A true CN114662162A (zh) | 2022-06-24 |
CN114662162B CN114662162B (zh) | 2022-09-20 |
Family
ID=82038194
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210574434.7A Active CN114662162B (zh) | 2022-05-25 | 2022-05-25 | 实现动态分配vf的多算法核高性能sr-iov加解密系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114662162B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150149661A1 (en) * | 2013-11-22 | 2015-05-28 | Ineda Systems Pvt. Ltd | Sharing single root io virtualization peripheral component interconnect express devices |
CN106557444A (zh) * | 2015-09-30 | 2017-04-05 | 中兴通讯股份有限公司 | 实现sr-iov网卡的方法和装置、实现动态迁移的方法和装置 |
US20180052701A1 (en) * | 2016-08-17 | 2018-02-22 | Red Hat Israel, Ltd. | Hot-plugging of virtual functions in a virtualized environment |
CN109190420A (zh) * | 2018-09-11 | 2019-01-11 | 网御安全技术(深圳)有限公司 | 一种服务器加解密刀片、系统、及加解密方法 |
CN110113184A (zh) * | 2019-04-17 | 2019-08-09 | 中国科学院深圳先进技术研究院 | Sr-iov环境下的kvm虚拟机网络优化方法及装置 |
CN110162378A (zh) * | 2018-02-13 | 2019-08-23 | 华为技术有限公司 | 一种资源调度的方法、装置、设备及系统 |
-
2022
- 2022-05-25 CN CN202210574434.7A patent/CN114662162B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150149661A1 (en) * | 2013-11-22 | 2015-05-28 | Ineda Systems Pvt. Ltd | Sharing single root io virtualization peripheral component interconnect express devices |
CN106557444A (zh) * | 2015-09-30 | 2017-04-05 | 中兴通讯股份有限公司 | 实现sr-iov网卡的方法和装置、实现动态迁移的方法和装置 |
US20180052701A1 (en) * | 2016-08-17 | 2018-02-22 | Red Hat Israel, Ltd. | Hot-plugging of virtual functions in a virtualized environment |
CN110162378A (zh) * | 2018-02-13 | 2019-08-23 | 华为技术有限公司 | 一种资源调度的方法、装置、设备及系统 |
CN109190420A (zh) * | 2018-09-11 | 2019-01-11 | 网御安全技术(深圳)有限公司 | 一种服务器加解密刀片、系统、及加解密方法 |
CN110113184A (zh) * | 2019-04-17 | 2019-08-09 | 中国科学院深圳先进技术研究院 | Sr-iov环境下的kvm虚拟机网络优化方法及装置 |
Non-Patent Citations (1)
Title |
---|
马龙宇: "基于 SR-IOV 虚拟化技术高速密码卡的设计与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Also Published As
Publication number | Publication date |
---|---|
CN114662162B (zh) | 2022-09-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9710310B2 (en) | Dynamically configurable hardware queues for dispatching jobs to a plurality of hardware acceleration engines | |
US20210216453A1 (en) | Systems and methods for input/output computing resource control | |
US8478926B1 (en) | Co-processing acceleration method, apparatus, and system | |
JP5159884B2 (ja) | 論理区分の間におけるネットワーク・アダプタ・リソース割振り | |
US10496427B2 (en) | Method for managing memory of virtual machine, physical host, PCIE device and configuration method thereof, and migration management device | |
WO2018041075A9 (zh) | 一种应用于计算机的资源访问方法和计算机 | |
WO2018119952A1 (zh) | 一种设备虚拟化方法、装置、系统及电子设备、计算机程序产品 | |
EP3992790B1 (en) | Information processing method, physical machine and pcie device | |
WO2016130487A1 (en) | Resource management | |
CN114662136B (zh) | 一种基于pcie通道的多算法ip核的高速加解密系统及方法 | |
US20190102317A1 (en) | Technologies for flexible virtual function queue assignment | |
CN113760560A (zh) | 一种进程间通信方法以及进程间通信装置 | |
CN115114013A (zh) | 高速外围组件互连装置及其操作方法 | |
CN114817965A (zh) | 基于多算法ip核实现msi中断处理的高速加解密系统及方法 | |
US20140149528A1 (en) | Mpi communication of gpu buffers | |
US6598097B1 (en) | Method and system for performing DMA transfers using operating system allocated I/O buffers | |
CN109558210B (zh) | 一种虚拟机应用主机gpu设备的方法及系统 | |
TW200945033A (en) | Memory allocation and access method and device using the same | |
US20200201691A1 (en) | Enhanced message control banks | |
CN114662162B (zh) | 实现动态分配vf的多算法核高性能sr-iov加解密系统及方法 | |
CN114943087A (zh) | 一种多算法核高性能sr-iov加解密系统及方法 | |
CN113268356B (zh) | 基于LINUX系统的多GPU板卡bounding的系统、方法及介质 | |
US9176910B2 (en) | Sending a next request to a resource before a completion interrupt for a previous request | |
CN116745754A (zh) | 一种访问远端资源的系统及方法 | |
CN117389685B (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 |