CN109992352A - 数据传输方法、装置、电子设备及可读取存储介质 - Google Patents
数据传输方法、装置、电子设备及可读取存储介质 Download PDFInfo
- Publication number
- CN109992352A CN109992352A CN201711498190.4A CN201711498190A CN109992352A CN 109992352 A CN109992352 A CN 109992352A CN 201711498190 A CN201711498190 A CN 201711498190A CN 109992352 A CN109992352 A CN 109992352A
- Authority
- CN
- China
- Prior art keywords
- data
- virtual machine
- host
- memory block
- chained list
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash 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/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/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/45583—Memory management, e.g. access or allocation
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 And Data Communications (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供一种数据传输方法、装置、电子设备及可读取存储介质,电子设备中的宿主机通过字符设备驱动模块生成的写数据指令,将用于表征待发送数据的地址指针和数据长度写入内核态的宿主机目标内存块中,将宿主机目标内存块加入到预先创建的虚拟机对应的数据发送内存管理链表中,虚拟机通过字符设备驱动模块生成的唤醒指令以及字符设备驱动模块生成的读数据指令,将宿主机目标内存块从数据发送内存管理链表中取下,并将从宿主机目标内存块中获得的待发送数据存储到虚拟机的虚拟机目标内存块中。宿主机向虚拟机发送数据时,只需要预先创建一数据发送内存管理链表对内存块进行管理,进而减少内存的浪费,也提高了数据发送效率。
Description
技术领域
本发明涉及数据传输技术领域,具体而言,涉及一种数据传输方法、装置、电子设备及可读取存储介质。
背景技术
随着虚拟化服务器在数据中心的应用,用户对网络设备的虚拟化也提出了要求,例如某公司新增一个业务部门,可以通过服务器搭建后台的应用,同时也需要对服务器连接的网络设备进行系列配置。重新购买部署网络设备会带来预算费用的增加,而将已经部署的设备划分出一个虚拟网络设备来承担新的业务数据转发,是一个更好的方案。划分出来的虚拟设备是个逻辑设备,可以单独组网、单独配置、单独管理,而对于已经部署网络没有影响。
当前网络设备采用Linux操作系统,使用LXC技术可以有效生成虚拟设备运行的内存、CPU等硬件环境。通常的使用方法是,在Linux操作系统的网络设备上,正常启动。此时启动的设备为宿主机,宿主机启动后,可以根据配置启动虚拟设备,先使用LXC生成运行环境,再在运行环境中启动虚拟设备的业务。虚拟设备业务启动后,即可实现网络业务和网络管理等网络设备功能。
发明内容
有鉴于此,本发明实施例的目的在于提供一种数据传输方法、装置、电子设备及可读取存储介质。
第一方面,本发明实施例提供了一种数据传输方法,所述方法包括:电子设备中的宿主机通过所述电子设备的字符设备驱动模块生成的写数据指令,将需要发送给所述电子设备中的虚拟机的用于表征待发送数据的地址指针和数据长度写入内核态的宿主机目标内存块中;所述宿主机将所述宿主机目标内存块加入到预先创建的所述虚拟机对应的数据发送内存管理链表中;所述虚拟机通过所述字符设备驱动模块生成的唤醒指令以及所述字符设备驱动模块生成的读数据指令,将所述宿主机目标内存块从所述数据发送内存管理链表中取下,并将从所述宿主机目标内存块中获得的所述待发送数据存储到所述虚拟机的虚拟机目标内存块中,本方法中宿主机向虚拟机发送数据时,只需要预先创建一数据发送内存管理链表对内存块进行管理,进而减少内存的浪费,也提高了数据发送效率。
进一步地,将所述宿主机目标内存块从所述数据发送内存管理链表中取下之后,所述方法还包括:所述虚拟机将所述宿主机目标内存块加入到预先创建的所述虚拟机对应的空闲内存管理链表中。即可实现该宿主机目标内存块的再次利用,从而可用于在虚拟机向宿主机发送数据时还可以使用该宿主机目标内存块进行数据传输,避免了内存的浪费。
进一步地,电子设备中的宿主机通过所述电子设备的字符设备驱动模块生成的写数据指令之前,所述方法还包括:所述宿主机响应虚拟机创建请求,创建所述虚拟机;并且所述宿主机创建所述数据发送内存管理链表;以及所述宿主机将多个空闲内存块写入所述内核态中以形成所述空闲内存管理链表。上述方案的效果是:在创建虚拟机时通过创建的链表来对内存块进行管理,由于该链表占用的内存较少,且在创建一个虚拟机时才需创建链表,以此减少了内存的浪费,而不用在宿主机与虚拟机进行通信时,还需单独创建特定的共享内存,在虚拟机数量少的情况下,共享内存的利用率不高,浪费共享内存。
第二方面,本发明实施例提供了数据传输方法,所述方法包括:电子设备中的虚拟机通过所述电子设备的字符设备驱动模块生成的写数据指令,将需要发送给所述电子设备中的宿主机的待发送数据写入内核态中的从预先创建的用于所述虚拟机对应的空闲内存管理链表中申请的一目标内存块中;所述虚拟机将所述目标内存块加入到预先创建的所述虚拟机对应的数据接收内存管理链表中;所述宿主机通过所述字符设备驱动模块生成的唤醒指令以及所述字符设备驱动模块生成的读数据指令,将所述目标内存块从所述数据接收内存管理链表中取下,并将从所述目标内存块中获得所述待发送数据。从而虚拟机在向宿主机发送数据时,只需要预先创建一数据接收内存管理链表和空闲内存管理链表对内存块进行管理,进而减少内存的浪费,也提高了数据发送效率。
第三方面,本发明实施例提供了一种数据传输装置,运行于电子设备,所述电子设备包括宿主机和虚拟机,所述装置包括:数据写入模块,用于通过所述电子设备的字符设备驱动模块生成的写数据指令,将需要发送给所述电子设备中的虚拟机的用于表征待发送数据的地址指针和数据长度写入内核态的宿主机目标内存块中;数据加入模块,用于将所述宿主机目标内存块加入到预先创建的所述虚拟机对应的数据发送内存管理链表中;数据读取模块,用于通过所述字符设备驱动模块生成的唤醒指令以及所述字符设备驱动模块生成的读数据指令,将所述宿主机目标内存块从所述数据发送内存管理链表中取下,并将从所述宿主机目标内存块中获得的所述待发送数据存储到所述虚拟机的虚拟机目标内存块中。宿主机向虚拟机发送数据时,只需要预先创建一数据发送内存管理链表对内存块进行管理,进而减少内存的浪费,也提高了数据发送效率。
进一步地,所述装置还包括:目标内存块加入模块,用于将所述宿主机目标内存块加入到预先创建的所述虚拟机对应的空闲内存管理链表中。即,可实现该宿主机目标内存块的再次利用,从而可用于在虚拟机向宿主机发送数据时还可以使用该宿主机目标内存块进行数据传输,避免了内存的浪费。
进一步地,所述装置还包括:虚拟机创建模块,用于响应虚拟机创建请求,创建所述虚拟机;第一链表创建模块,用于创建所述数据发送内存管理链表;第二链表创建模块,用于将多个空闲内存块写入所述内核态中以形成所述空闲内存管理链表。上述方案的效果是:在创建虚拟机时通过创建的链表来对内存块进行管理,由于该链表占用的内存较少,且在创建一个虚拟机时才需创建链表,以此减少了内存的浪费,而不用在宿主机与虚拟机进行通信时,还需单独创建特定的共享内存,在虚拟机数量少的情况下,共享内存的利用率不高,浪费共享内存。
第四方面,本发明实施例提供了一种数据传输装置,运行于电子设备,所述电子设备包括宿主机和虚拟机,所述装置包括:写入模块,用于通过所述电子设备的字符设备驱动模块生成的写数据指令,将需要发送给所述电子设备中的宿主机的待发送数据写入内核态中的从预先创建的用于所述虚拟机对应的空闲内存管理链表中申请的一目标内存块中;加入模块,用于将所述目标内存块加入到预先创建的所述虚拟机对应的数据接收内存管理链表中;读取模块,用于通过所述字符设备驱动模块生成的唤醒指令以及所述字符设备驱动模块生成的读数据指令,将所述目标内存块从所述数据接收内存管理链表中取下,并将从所述目标内存块中获得所述待发送数据。从而虚拟机在向宿主机发送数据时,只需要预先创建一数据接收内存管理链表和空闲内存管理链表对内存块进行管理,进而减少内存的浪费,也提高了数据发送效率。
第五方面,本发明实施例提供了一种电子设备,包括处理器以及存储器,所述存储器存储有计算机可读取指令,当所述计算机可读取指令由所述处理器执行时,运行如第一方面提供的所述的方法。
第六方面,本发明实施例提供了一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面提供的所述的方法。
本发明的其他特征和优点将在随后的说明书阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明实施例了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本发明第一实施例提供的一种数据传输方法的流程图;
图2为发明实施例提供的一种数据传输方法的应用示意图;
图3为本发明第二实施例提供的一种数据传输方法的流程图;
图4为本发明第三实施例提供的数据传输装置的结构框图;
图5为本发明第四实施例提供的数据传输装置的结构框图;
图6为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
通过虚拟化技术,可以在一台主机设备(主机设备也可称为计算机设备、物理主机、物理计算机或宿主机)上模拟出一台或多台虚拟机(VirtualMachine,VM)。虚拟机可以向主机设备一样工作,例如,用于可以在虚拟机上安装操作系统和应用程序,又如,用户可以通过虚拟机访问网络资源。对于用户而言,虚拟机可以看成是运行在主机设备上的应用程序,但对于运行在虚拟机中的应用程序而言,虚拟机就像真正的主机设备一样为该应用程序提供工作环境。
但是,虚拟机运行在虚拟环境中,真实的物理资源则由宿主机管理和操作,所以虚拟机需要和宿主机通信,来实现资源的访问。
现有技术中,宿主机和虚拟机之间通信,通常的方案是按照标准的socket通信,在宿主机和虚拟机之间建立socket连接,采用标准的socket编程模型进行数据的发送和接收,但是这种方法存在数据从发送方的用户态,拷贝到内核态,再从内核态拷贝到接收方的用户态,性能较低,则对于通信设备这种性能要求较高的环境,不满足要求。
并且,宿主机和虚拟机之间共享一块内存,通过对共享内存的有效管理,来提升数据的发送和接收性能。发送方将数据写入到共享内存里面。接收方直接从共享内存里面获取,发送方需要拷贝数据到共享内存中,接收方则可以直接使用共享内存进行操作,因为共享内存需要在设备启动时就预留好,比如,如果是一虚4,则需要预留3块共享内存,但是实际应用中可能仅仅只开了1个虚拟机,则另外2块共享内存就浪费了。
其中,内核态是指Linux操作系统上,内核态可以访问所有资源,例如内存数据、外围设备、CPU时间等等。
用户态是指Linux操作系统上,用户进程/线程的运行在用户态,用户态只能受限的访问内存,且不允许访问外围设备等,用户态的业务程序可以通过系统调用,陷入到内核态,访问内核资源。
以上现有技术中的方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本发明实施例针对上述问题所提出的解决方案,都应该是发明人在本发明过程中对本发明做出的贡献。
因此,为了解决现有技术中宿主机与虚拟机之间通信效率低且内存利用率低的问题,本发明实施例提供一种数据传输方法。
本发明实施例提供的数据传输方法及装置可应用于一电子设备上,其中,所述电子设备可以为采用Linux操作系统的服务器、个人电脑(Personal Computer,PC)、路由器等。
所述电子设备包括宿主机和虚拟机,所述虚拟机可以为一个或多个,所述一个或多个虚拟机运行于所述宿主机上,并由宿主机进行启动和管理,即虚拟机是运行在Linux操作系统上,基于LXC容器技术,宿主机和虚拟机运行在同一个硬件环境中,宿主机可以动态创建虚拟机。
宿主机和虚拟机可通过通信接口进行通信,通信接口主要给用户态的业务模块提供数据的收发接口,从而实现宿主机和虚拟机之间的通信。
第一实施例
请参照图1,图1为本发明第一实施例提供的一种数据传输方法的流程图,所述方法包括如下步骤:
步骤S110:电子设备中的宿主机通过所述电子设备的字符设备驱动模块生成的写数据指令,将需要发送给所述电子设备中的虚拟机的用于表征待发送数据的地址指针和数据长度写入内核态的宿主机目标内存块中。
本实施例中,宿主机在需要创建虚拟机时,可获取用户触发的虚拟机创建请求,基于该虚拟机创建请求创建一虚拟机,在创建该虚拟机时,同时为每个虚拟机创建三个链表:数据发送内存管理链表、空闲内存管理链表以及数据接收内存管理链表,这三个链表均用于管理宿主机中的内存块,这些内存块是在宿主机中申请和释放的,虚拟机中仅仅在内核态使用这些内存块。
在创建虚拟机时通过创建的三个链表来对内存块进行管理,由于该三个链表占用的内存较少,且在创建一个虚拟机时才需创建这三个链表,以此减少了内存的浪费,而不用在宿主机与虚拟机进行通信时,还需单独创建特定的共享内存,在虚拟机数量少的情况下,共享内存的利用率不高,造成共享内存的浪费。
并且,上述内存块是DMA(direct memory access,直接存储器存取)内存,即从内核态映射到用户态,可以连续访问的内存块,这些内存块宿主机中的其他模块也可以使用,同虚拟机通信时也可以使用。
即,宿主机中的内存以内存块来进行区分,例如,若宿主机有128M内存,将该128M内存可分为大小不同的多个内存块,如2K、3K不等,宿主机中的每个应用程序可占据一个内存块,从而各个应用程序之间的运行互不影响。
上述创建空闲内存管理链表时,宿主机可从内存块中申请一些空闲的内存块,即没有应用程序使用的内存块,这些空闲的内存块可构成空闲内存管理的链表结点,从而形成空闲内存管理链表,以避免在创建虚拟机后,该虚拟机首先向宿主机发送报文时没有可用的内存块,由此虚拟机可以从空闲内存管理链表上申请一内存块来传输数据。
宿主机和虚拟机通过字符设备驱动模块进行数据的读取。
字符设备驱动模块运行于Linux内核态中,虚拟机在初始化和运行阶段通过该字符设备驱动模块可以向内核态中传递并存储数据,宿主机也可以通过字符设备驱动模块从内核态中获取对应的数据。
字符设备驱动模块通过字符设备的驱动实现,字符设备是个能够像字节流(类似文件)一样被访问的设备,是以字节为单位逐个进行I/O操作,在对字符设备发出读写请求后,实际的硬件I/O紧接着就发生了。
字符设备的操作有open、close、write和read,其中,write函数调用实现数据的写入,即将用户态数据传输到内核态;read函数调用实现数据的读取,即将内核态数据传输到用户态。
具体地,结合图2,当创建虚拟机时,首先在宿主机中通过打开对应虚拟机的字符设备,通过write系统调用,首先写入多个空闲内存块到内核态中,添加到空闲内存管理链表中,即多个空闲内存块形成空闲内存管理链表。
其中,数据发送内存管理链表和数据接收内存管理链表在创建时均为空链表,即只有一个头结点。
宿主机在向虚拟机发送数据时,首先通过字符设备驱动模块生成的写数据指令,即write调用,向虚拟机发送数据,宿主机即从用户态将待发送数据写入内核态的宿主机目标内存块中,由于宿主机的内存块宿主机可以直接使用,即该内存块宿主机的用户态和内核态可以共享,则宿主机将数据从用户态传输至内核态时,可以不用再将用户态的数据拷贝到内核态中的内存块中,而是直接从用户态将用于表征数据的物理指针和数据长度写入到内核态的内存块中,即宿主机目标内存块,从而减少了数据传输过程的复杂,提高了宿主机和虚拟机之间的数据传输性能。
步骤S120:所述宿主机将所述宿主机目标内存块加入到预先创建的所述虚拟机对应的数据发送内存管理链表中。
其中,write调用中传递给内核态的待发送数据,该待发送数据通过物理地址指针和数据长度来表示,将该待发送数据的地址指针和数据长度写入到宿主机目标内存块中,陷入内核态后,将数据的信息(即待发送数据的物理地址指针和数据长度),组织成链表结点,加入到数据发送内存管理链表中。
也就是说,若将待发送数据写入到宿主机目标内存块中后,该数据的物理地址指针指向该宿主机目标内存块的起始位置,从而可以通过数据的物理地址指针和数据长度来从宿主机目标内存块中读取待发送数据了。
步骤S130:所述虚拟机通过所述字符设备驱动模块生成的唤醒指令以及所述字符设备驱动模块生成的读数据指令,将所述宿主机目标内存块从所述数据发送内存管理链表中取下,并将从所述宿主机目标内存块中获得的所述待发送数据存储到所述虚拟机的虚拟机目标内存块中。
在将宿主机目标内存块加入到所述数据发送内存管理链表上后,通过该数据发送内存管理链表对宿主机目标内存块进行管理,然后通过字符设备驱动模块生成的唤醒指令,以唤醒虚拟机准备接收数据,从而虚拟机通过字符设备驱动模块生成的唤醒指令被唤醒,然后字符设备驱动模块生成读数据指令(即read调用),虚拟机将所述宿主机目标内存块从所述数据发送内存管理链表中取下,由于虚拟机无法直接从内核态中获取数据,所以虚拟机还需从用户态中申请一内存块作为虚拟机目标内存块,然后从所述宿主机目标内存块中获得的所述待发送数据存储到该虚拟机目标内存块内,即将宿主机目标内存块中的待发送数据拷贝到虚拟机目标内存块中,然后在传输至虚拟机的用户态,从而虚拟机获得宿主机发送的待发送数据。
宿主机向虚拟机发送数据时,可通过创建的数据发送内存管理链表对内存进行管理,从而可实现宿主机和虚拟机的高效通信,且内存利用率高。
当然,为了实现宿主机目标内存块的再次利用,所述虚拟机将所述宿主机目标内存块加入到预先创建的所述虚拟机对应的空闲内存管理链表中,表面该宿主机目标内存块中的数据已被虚拟机读取了,从而可用于在虚拟机向宿主机发送数据时还可以使用该宿主机目标内存块进行数据传输。
本发明第一实施例提供一种数据传输方法,电子设备中的宿主机通过所述电子设备的字符设备驱动模块生成的写数据指令,将需要发送给所述电子设备中的虚拟机的用于表征待发送数据的地址指针和数据长度写入内核态的宿主机目标内存块中,然后所述宿主机将所述宿主机目标内存块加入到预先创建的所述虚拟机对应的数据发送内存管理链表上,所述虚拟机通过所述字符设备驱动模块生成的唤醒指令以及所述字符设备驱动模块生成的读数据指令,将所述宿主机目标内存块从所述数据发送内存管理链表中取下,并将从所述宿主机目标内存块中获得的所述待发送数据存储到所述虚拟机的虚拟机目标内存块中,从而宿主机向虚拟机发送数据时,只需要预先创建一数据发送内存管理链表对内存块进行管理,进而减少内存的浪费,也提高了数据发送效率。
第二实施例
请参照图3,图3为本发明第二实施例提供的一种数据传输方法的流程图,所述方法包括如下步骤:
步骤S210:电子设备中的虚拟机通过所述电子设备的字符设备驱动模块生成的写数据指令,将需要发送给所述电子设备中的宿主机的待发送数据写入内核态中的从预先创建的用于所述虚拟机对应的空闲内存管理链表中申请的一目标内存块中。
当虚拟机向宿主机发送数据时,通信字符设备驱动模块生成的写数据指令,即write调用,将待转发数据写入虚拟机内存块中,陷入内核态,然后将虚拟机内存块中的待转发数据拷贝到从预先创建的用于所述虚拟机对应的空闲内存管理链表中申请的一目标内存块中。
其中,空闲内存管理链表为在宿主机创建一虚拟机时创建的,具体的请参照第一实施例的相关描述,在此不再过多赘述。
步骤S220:所述虚拟机将所述目标内存块加入到预先创建的所述虚拟机对应的数据接收内存管理链表中。
其中,待发送数据以该数据的物理指针和数据长度表示,而将所述目标内存块加入到数据接收内存管理链表上实际上是将该待发送数据的物理指针和数据长度作为链表结点加入到该数据接收内存管理链表上。
其中,数据接收内存管理链表为在宿主机创建一虚拟机时创建的,具体的请参照第一实施例的相关描述,在此不再过多赘述。
步骤S230:所述宿主机通过所述字符设备驱动模块生成的唤醒指令以及所述字符设备驱动模块生成的读数据指令,将所述目标内存块从所述数据接收内存管理链表中取下,并将从所述目标内存块中获得的所述待发送数据。
在将目标内存块加入到数据接收内存管理链表上后,所述字符设备驱动模块生成唤醒指令,以唤醒宿主机进行数据读取,然后所述字符设备驱动模块生成读数据指令(即read调用),宿主机该读数据指令,将目标内存块从所述数据接收内存管理链表中取下,以从所述目标内存块中获得所述待发送数据。
另外,宿主机在读取数据时,一次read调用可以读取多个内存块数据,每个内存块数据通过数据的物理地址指针和数据长度表示,由此可以将多个数据的信息组织在一个内存块中返回宿主机的用户态,用户态read调用返回时,携带了多个数据的描述信息,进行解析,以对各种数据进行分别处理。
本发明第二实施例提供了一种数据传输方法,首先,电子设备中的虚拟机通过所述电子设备的字符设备驱动模块生成的写数据指令,将需要发送给所述电子设备中的宿主机的待发送数据写入内核态中的从预先创建的用于所述虚拟机对应的空闲内存管理链表中申请的一目标内存块中,然后所述虚拟机将所述目标内存块加入到预先创建的所述虚拟机对应的数据接收内存管理链表上,所述宿主机通过所述字符设备驱动模块生成的唤醒指令以及所述字符设备驱动模块生成的读数据指令,将所述目标内存块从所述数据接收内存管理链表中取下,并将从所述目标内存块中获得所述待发送数据,从而虚拟机在向宿主机发送数据时,只需要预先创建一数据接收内存管理链表和空闲内存管理链表对内存块进行管理,进而减少内存的浪费,也提高了数据发送效率。
第三实施例
请参照图4,图4为本发明第三实施例提供的数据传输装置200的结构框图,该装置运行于电子设备,所述电子设备包括宿主机和虚拟机,所述装置包括:
数据写入模块210,用于通过所述电子设备的字符设备驱动模块生成的写数据指令,将需要发送给所述电子设备中的虚拟机的用于表征待发送数据的地址指针和数据长度写入内核态的宿主机目标内存块中。
数据加入模块220,用于将所述宿主机目标内存块加入到预先创建的所述虚拟机对应的数据发送内存管理链表上。
数据读取模块230,用于通过所述字符设备驱动模块生成的唤醒指令以及所述字符设备驱动模块生成的读数据指令,将所述宿主机目标内存块从所述数据发送内存管理链表中取下,并将从所述宿主机目标内存块中获得的所述待发送数据存储到所述虚拟机的虚拟机目标内存块中。
作为一种方式,所述装置还包括:
目标内存块加入模块,用于将所述宿主机目标内存块加入到预先创建的所述虚拟机对应的空闲内存管理链表上。
作为一种方式,所述装置还包括:
虚拟机创建模块,用于响应虚拟机创建请求,创建所述虚拟机。
第一链表创建模块,用于创建所述数据发送内存管理链表。
第二链表创建模块,用于将多个空闲内存块写入所述内核态中以形成所述空闲内存管理链表。
第四实施例
请参照图5,图5为本发明第四实施例提供的数据传输装置300的结构框图,该装置运行于电子设备,所述电子设备包括宿主机和虚拟机,所述装置包括:
写入模块310,用于通过所述电子设备的字符设备驱动模块生成的写数据指令,将需要发送给所述电子设备中的宿主机的待发送数据写入内核态中的从预先创建的用于所述虚拟机对应的空闲内存管理链表中申请的一目标内存块中。
加入模块320,用于将所述目标内存块加入到预先创建的所述虚拟机对应的数据接收内存管理链表上。
读取模块330,用于通过所述字符设备驱动模块生成的唤醒指令以及所述字符设备驱动模块生成的读数据指令,将所述目标内存块从所述数据接收内存管理链表中取下,并将从所述目标内存块中获得所述待发送数据。
请参照图6,图6为本申请实施例提供的一种电子设备的结构示意图,所述电子设备可以包括:至少一个处理器110,例如CPU,至少一个通信接口120,至少一个存储器130和至少一个通信总线140。其中,通信总线140用于实现这些组件直接的连接通信。其中,本申请实施例中设备的通信接口120用于与其他节点设备进行信令或数据的通信。存储器130可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器130可选的还可以是至少一个位于远离前述处理器的存储装置。存储器130中存储有计算机可读取指令,当所述计算机可读取指令由所述处理器110执行时,电子设备执行上述图1或图3所示方法过程。
本发明实施例提供一种可读取存储介质,所述计算机程序被处理器执行时,执行如图1或图3所示方法实施例中电子设备所执行的方法过程。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置的具体工作过程,可以参考前述方法中的对应过程,在此不再过多赘述。
综上所述,本发明实施例提供一种数据传输方法、装置、电子设备及可读取存储介质,电子设备中的宿主机通过所述电子设备的字符设备驱动模块生成的写数据指令,将需要发送给所述电子设备中的虚拟机的用于表征待发送数据的地址指针和数据长度写入内核态的宿主机目标内存块中,然后所述宿主机将所述宿主机目标内存块加入到预先创建的所述虚拟机对应的数据发送内存管理链表上,所述虚拟机通过所述字符设备驱动模块生成的唤醒指令以及所述字符设备驱动模块生成的读数据指令,将所述宿主机目标内存块从所述数据发送内存管理链表中取下,并将从所述宿主机目标内存块中获得的所述待发送数据存储到所述虚拟机的虚拟机目标内存块中,从而宿主机向虚拟机发送数据时,只需要预先创建一数据发送内存管理链表对内存块进行管理,进而减少内存的浪费,也提高了数据发送效率。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
Claims (10)
1.一种数据传输方法,其特征在于,所述方法包括:
电子设备中的宿主机通过所述电子设备的字符设备驱动模块生成的写数据指令,将需要发送给所述电子设备中的虚拟机的用于表征待发送数据的地址指针和数据长度写入内核态的宿主机目标内存块中;
所述宿主机将所述宿主机目标内存块加入到预先创建的所述虚拟机对应的数据发送内存管理链表中;
所述虚拟机通过所述字符设备驱动模块生成的唤醒指令以及所述字符设备驱动模块生成的读数据指令,将所述宿主机目标内存块从所述数据发送内存管理链表中取下,并将从所述宿主机目标内存块中获得的所述待发送数据存储到所述虚拟机的虚拟机目标内存块中。
2.根据权利要求1所述的方法,其特征在于,将所述宿主机目标内存块从所述数据发送内存管理链表中取下之后,所述方法还包括:
所述虚拟机将所述宿主机目标内存块加入到预先创建的所述虚拟机对应的空闲内存管理链表中。
3.根据权利要求1-2任一所述的方法,其特征在于,电子设备中的宿主机通过所述电子设备的字符设备驱动模块生成的写数据指令,将需要发送给所述电子设备中的虚拟机的用于表征待发送数据的地址指针和数据长度写入内核态的宿主机目标内存块中之前,所述方法还包括:
所述宿主机响应虚拟机创建请求,创建所述虚拟机;并且
所述宿主机创建所述数据发送内存管理链表;以及
所述宿主机将多个空闲内存块写入所述内核态中以形成所述空闲内存管理链表。
4.一种数据传输方法,其特征在于,所述方法包括:
电子设备中的虚拟机通过所述电子设备的字符设备驱动模块生成的写数据指令,将需要发送给所述电子设备中的宿主机的待发送数据写入内核态中的从预先创建的用于所述虚拟机对应的空闲内存管理链表中申请的一目标内存块中;
所述虚拟机将所述目标内存块加入到预先创建的所述虚拟机对应的数据接收内存管理链表中;
所述宿主机通过所述字符设备驱动模块生成的唤醒指令以及所述字符设备驱动模块生成的读数据指令,将所述目标内存块从所述数据接收内存管理链表中取下,并将从所述目标内存块中获得所述待发送数据。
5.一种数据传输装置,其特征在于,运行于电子设备,所述电子设备包括宿主机和虚拟机,所述装置包括:
数据写入模块,用于通过所述电子设备的字符设备驱动模块生成的写数据指令,将需要发送给所述电子设备中的虚拟机的用于表征待发送数据的地址指针和数据长度写入内核态的宿主机目标内存块中;
数据加入模块,用于将所述宿主机目标内存块加入到预先创建的所述虚拟机对应的数据发送内存管理链表中;
数据读取模块,用于通过所述字符设备驱动模块生成的唤醒指令以及所述字符设备驱动模块生成的读数据指令,将所述宿主机目标内存块从所述数据发送内存管理链表中取下,并将从所述宿主机目标内存块中获得的所述待发送数据存储到所述虚拟机的虚拟机目标内存块中。
6.根据权利要求5所述的装置,其特征在于,所述装置还包括:
目标内存块加入模块,用于将所述宿主机目标内存块加入到预先创建的所述虚拟机对应的空闲内存管理链表中。
7.根据权利要求5-6任一所述的装置,其特征在于,所述装置还包括:
虚拟机创建模块,用于响应虚拟机创建请求,创建所述虚拟机;
第一链表创建模块,用于创建所述数据发送内存管理链表;
第二链表创建模块,用于将多个空闲内存块写入所述内核态中以形成所述空闲内存管理链表。
8.一种数据传输装置,其特征在于,运行于电子设备,所述电子设备包括宿主机和虚拟机,所述装置包括:
写入模块,用于通过所述电子设备的字符设备驱动模块生成的写数据指令,将需要发送给所述电子设备中的宿主机的待发送数据写入内核态中的从预先创建的用于所述虚拟机对应的空闲内存管理链表中申请的一目标内存块中;
加入模块,用于将所述目标内存块加入到预先创建的所述虚拟机对应的数据接收内存管理链表中;
读取模块,用于通过所述字符设备驱动模块生成的唤醒指令以及所述字符设备驱动模块生成的读数据指令,将所述目标内存块从所述数据接收内存管理链表中取下,并将从所述目标内存块中获得所述待发送数据。
9.一种电子设备,其特征在于,包括处理器以及存储器,所述存储器存储有计算机可读取指令,当所述计算机可读取指令由所述处理器执行时,运行如权利要求1-3中任一权项所述的方法。
10.一种可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-3任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711498190.4A CN109992352B (zh) | 2017-12-29 | 2017-12-29 | 数据传输方法、装置、电子设备及可读取存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711498190.4A CN109992352B (zh) | 2017-12-29 | 2017-12-29 | 数据传输方法、装置、电子设备及可读取存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109992352A true CN109992352A (zh) | 2019-07-09 |
CN109992352B CN109992352B (zh) | 2021-10-08 |
Family
ID=67111285
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711498190.4A Active CN109992352B (zh) | 2017-12-29 | 2017-12-29 | 数据传输方法、装置、电子设备及可读取存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109992352B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112463662A (zh) * | 2020-12-16 | 2021-03-09 | 福州创实讯联信息技术有限公司 | 一种用户态控制i2c设备的方法与终端 |
CN112631975A (zh) * | 2020-12-09 | 2021-04-09 | 珠海全志科技股份有限公司 | 基于Linux的SPI传输方法 |
CN113515387A (zh) * | 2021-09-13 | 2021-10-19 | 渔翁信息技术股份有限公司 | 数据处理方法、装置及电子装置 |
WO2022160714A1 (zh) * | 2021-01-28 | 2022-08-04 | 华为技术有限公司 | 一种通信方法、装置以及系统 |
CN116501476A (zh) * | 2023-06-28 | 2023-07-28 | 成都赛力斯科技有限公司 | linux通用字符设备处理方法、装置、设备和介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101094183A (zh) * | 2007-07-25 | 2007-12-26 | 杭州华三通信技术有限公司 | 一种缓存管理方法及装置 |
CN101504617A (zh) * | 2009-03-23 | 2009-08-12 | 华为技术有限公司 | 一种基于处理器共享内存的数据发送、接收方法及装置 |
CN103176833A (zh) * | 2013-03-11 | 2013-06-26 | 华为技术有限公司 | 一种基于虚拟机的数据发送方法、接收方法及系统 |
US20150242231A1 (en) * | 2014-02-27 | 2015-08-27 | International Business Machines Corporation | Data swap in virtual machine environment |
CN106778275A (zh) * | 2016-12-29 | 2017-05-31 | 北京瑞星信息技术股份有限公司 | 基于虚拟化环境下的安全防护方法及系统和物理主机 |
CN107135189A (zh) * | 2016-02-26 | 2017-09-05 | 华为技术有限公司 | 一种报文发送方法及物理机 |
-
2017
- 2017-12-29 CN CN201711498190.4A patent/CN109992352B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101094183A (zh) * | 2007-07-25 | 2007-12-26 | 杭州华三通信技术有限公司 | 一种缓存管理方法及装置 |
CN101504617A (zh) * | 2009-03-23 | 2009-08-12 | 华为技术有限公司 | 一种基于处理器共享内存的数据发送、接收方法及装置 |
CN103176833A (zh) * | 2013-03-11 | 2013-06-26 | 华为技术有限公司 | 一种基于虚拟机的数据发送方法、接收方法及系统 |
US20150242231A1 (en) * | 2014-02-27 | 2015-08-27 | International Business Machines Corporation | Data swap in virtual machine environment |
CN107135189A (zh) * | 2016-02-26 | 2017-09-05 | 华为技术有限公司 | 一种报文发送方法及物理机 |
CN106778275A (zh) * | 2016-12-29 | 2017-05-31 | 北京瑞星信息技术股份有限公司 | 基于虚拟化环境下的安全防护方法及系统和物理主机 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112631975A (zh) * | 2020-12-09 | 2021-04-09 | 珠海全志科技股份有限公司 | 基于Linux的SPI传输方法 |
CN112463662A (zh) * | 2020-12-16 | 2021-03-09 | 福州创实讯联信息技术有限公司 | 一种用户态控制i2c设备的方法与终端 |
CN112463662B (zh) * | 2020-12-16 | 2024-04-05 | 福州创实讯联信息技术有限公司 | 一种用户态控制i2c设备的方法与终端 |
WO2022160714A1 (zh) * | 2021-01-28 | 2022-08-04 | 华为技术有限公司 | 一种通信方法、装置以及系统 |
CN113515387A (zh) * | 2021-09-13 | 2021-10-19 | 渔翁信息技术股份有限公司 | 数据处理方法、装置及电子装置 |
CN116501476A (zh) * | 2023-06-28 | 2023-07-28 | 成都赛力斯科技有限公司 | linux通用字符设备处理方法、装置、设备和介质 |
CN116501476B (zh) * | 2023-06-28 | 2023-09-12 | 成都赛力斯科技有限公司 | linux通用字符设备处理方法、装置、设备和介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109992352B (zh) | 2021-10-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109992352A (zh) | 数据传输方法、装置、电子设备及可读取存储介质 | |
CN102467408B (zh) | 一种虚拟机数据的访问方法和设备 | |
CN104965757B (zh) | 虚拟机热迁移的方法、虚拟机迁移管理装置及系统 | |
CN104424122B (zh) | 一种电子设备及内存划分方法 | |
CN108880898A (zh) | 主备容器系统切换方法及装置 | |
CN103412822A (zh) | 操作非易失性内存和数据操作的方法和相关装置 | |
CN103440111B (zh) | 虚拟机磁盘空间的扩展方法、宿主机和平台 | |
JP6974510B2 (ja) | データを処理するための方法、装置、デバイス及び媒体 | |
US11237761B2 (en) | Management of multiple physical function nonvolatile memory devices | |
JP6042454B2 (ja) | ユーザ生成によるデータセンターの省電力 | |
CN109086119A (zh) | 一种快速检测容器运行状态的方法 | |
CN103927215A (zh) | 基于内存盘与SSD硬盘的kvm虚拟机调度的优化方法及系统 | |
CN110162396A (zh) | 内存回收方法、装置、系统和存储介质 | |
CN110162563A (zh) | 一种数据入库方法、系统及电子设备和存储介质 | |
CN107250980A (zh) | 具有图形和系统存储器冲突检查的计算方法和设备 | |
CN105450704A (zh) | 一种用于闪存的网络存储设备及其处理方法 | |
US10552318B2 (en) | Working set adjustment in a managed environment | |
CN115102851B (zh) | 一种面向hpc与ai融合计算的融合平台及其资源管理方法 | |
CN114840148B (zh) | 在Kubernetes中基于linux内核bcache技术实现磁盘加速的方法 | |
CN109933435A (zh) | 控制方法、装置及计算机设备 | |
CN116578416A (zh) | 一种基于gpu虚拟化的信号级仿真加速方法 | |
CN115080242A (zh) | 一种pci设备资源统一调度的方法、装置及介质 | |
Lim et al. | SWAM: Revisiting Swap and OOMK for Improving Application Responsiveness on Mobile Devices | |
CN114860380A (zh) | 数据同步的方法、装置、电子设备及计算机可读存储介质 | |
CN109271179A (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 |