CN116661948A - 一种基于eBPF的Java虚拟机内存访问方法和系统 - Google Patents
一种基于eBPF的Java虚拟机内存访问方法和系统 Download PDFInfo
- Publication number
- CN116661948A CN116661948A CN202310633601.5A CN202310633601A CN116661948A CN 116661948 A CN116661948 A CN 116661948A CN 202310633601 A CN202310633601 A CN 202310633601A CN 116661948 A CN116661948 A CN 116661948A
- Authority
- CN
- China
- Prior art keywords
- ebpf
- virtual machine
- java virtual
- program
- memory
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 83
- 238000013507 mapping Methods 0.000 claims abstract description 12
- 230000006870 function Effects 0.000 claims description 33
- 238000012544 monitoring process Methods 0.000 claims description 3
- 230000001133 acceleration Effects 0.000 abstract description 4
- 239000008186 active pharmaceutical agent Substances 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000005094 computer simulation Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
- 238000012360 testing method 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/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/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/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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明提供了一种基于eBPF的Java虚拟机内存访问方法和系统,涉及计算机技术领域,包括:预先提供一eBPF程序,所述eBPF程序配置一包括内核下内存数据的存储区域;所述eBPF程序监控应用层下Java虚拟机的内存空间,以将应用层下内存数据映射到所述存储区域;在应用层下接收一作用于内存数据的操作指令,Java虚拟机调用本地方法接口至内存空间;所述eBPF程序通过存储区域的映射获取所述操作指令并在内核下执行,将执行结果返回至所述Java虚拟机的内存空间;应用程序通过访问Java虚拟机的内存空间获得所述操作指令的执行结果,解决现有Java虚拟机内存访问加速方法操作复杂,占用资源较多的问题。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种基于eBPF的Java虚拟机内存访问方法和系统。
背景技术
JVM(Java Virtual Machine)是Java虚拟机的缩写,它是Java程序运行的环境。Java语言的特性之一就是可移植性,JAVA虚拟机为了实现这一特性,提供了一种中间层的抽象,将Java程序从底层的操作系统中解耦出来,使得Java程序可以在不同的操作系统上运行,而不需要修改源代码。
JVM提供了一种抽象的计算机模型,包括处理器架构、内存模型、指令集、类文件格式等,并提供了一系列的类库和运行时环境来支持Java程序的执行。当Java程序被编译后,生成的不是机器码,而是一种称为字节码的中间代码。JVM会将字节码解释为机器指令,使得Java程序可以在不同的操作系统和硬件平台上运行。
现有的JVM内存访问通常是在用户层通过应用程序调用JVM内存空间,而后根据操作系统的请求至内核下进行内存数据读取、幅值、写入等操作,因此访问过程进行用户层与内核之间的操作,为了增加内存现有访问速度,可采用编译器、原生内存访问、并发编程等方式进行访问,但是均操作复杂且占用系统资源。
发明内容
为了克服上述技术缺陷,本发明的目的在于提供一种基于eBPF的Java虚拟机内存访问方法和系统,解决现有Java虚拟机内存访问加速方法操作复杂,占用资源较多的问题。
本发明公开了一种基于eBPF的Java虚拟机内存访问方法,包括:
预先提供一eBPF程序,所述eBPF程序配置一包括内核下内存数据的存储区域;
所述eBPF程序监控应用层下Java虚拟机的内存空间,以将应用层下内存数据映射到所述存储区域;
应用程序发出作用于内存数据的操作指令,通过Java虚拟机调用本地方法接口至内存空间;
所述eBPF程序通过存储区域的映射获取所述操作指令并在内核下执行,将执行结果返回至所述Java虚拟机的内存空间;
所述应用程序通过访问Java虚拟机的内存空间获得所述操作指令的执行结果。
优选地,所述内存数据包括对象、线程栈和本地方法栈。
优选地,通过调用Java虚拟机中本地库中的本地访问接口,实现的内存数据本地调用,所述本地访问接口将函数调用传递到Java虚拟机内部的本地方法接口中,所述本地方法接口将函数调用传递到所述eBPF程序。
优选地,所述本地方法接口将函数调用传递到所述eBPF程序包括:
所述本地方法接口将本地内存数据传递给动态链接库,所述动态链接库将函数调用传递到所述eBPF程序。
优选地,所述提供一eBPF程序,包括:
编译可监控Java虚拟机的内存空间的eBPF程序,并通过编译器将所述eBPF程序编译为eBPF字节码;
通过加载工具将所述eBPF程序加载到内核中;
通过调用工具将所述eBPF程序挂载到内核下,以监控和跟踪内核下的执行事件或函数调用。
优选地,在提供一eBPF程序后,还包括:
检查eBPF程序的运行状态。
优选地,应用程序调用所述eBPF程序,通过存储区域获取内核下内存数据。
优选地,所述应用程序发出作用于内存数据的操作指令,包括:
应用程序调用所述eBPF程序,通过应用程序接口函数执行所述操作指令,对相应的内存数据进行读取、写入、更新或删除;
通过所述存储区域获取所述内核下内存数据。
优选地,通过定义存储区域类型、存储区域键类型和值类型以及存储区域大小配置一存储区域;其中,所述存储区域类型包括以下任一项或多项:哈希表、数组、计数器。
本发明还提供一种基于eBPF的Java虚拟机内存访问系统,
包括应用层、内核以及预先提供一eBPF程序,所述eBPF程序配置一包括内核下内存数据的存储区域;
所述eBPF程序监控应用层下Java虚拟机的内存空间,以将应用层下内存数据映射到所述存储区域,其中,所述内存数据包括对象、线程栈和本地方法栈;
应用层:应用程序发出作用于内存数据的操作指令,通过Java虚拟机调用本地方法接口至内存空间;应用程序通过访问Java虚拟机的内存空间获得所述操作指令的执行结果;
内核层:所述eBPF程序通过存储区域的映射获取所述操作指令并在内核下执行,将执行结果返回至所述Java虚拟机的内存空间。
优选地,在应用层,通过Java虚拟机中本地方法接口获取eBPF程序的存储区域中内存数据,并通过动态访问系统本地库对内存空间内的存数据进行调整。
采用了上述技术方案后,与现有技术相比,具有以下有益效果:
本申请中,通过eBPF程序的存储区域拷贝部分/全部内核下内存数据,同时可映射应用层下内存数据,实现应用层和内核内存数据的内存数据共享,应用程序在应用层发出操作指令后,Java虚拟机调用本地方法接口后,通过在eBPF程序在内核中执行,对相应的内存数据进行读取、写入、更新或删除,而后返回Java虚拟机,使用eBPF、eBPF Maps实现共享内存,减少Java虚拟机的内存拷贝,加速Java虚拟机内存访问速度,eBPF程序可在内核执行,无需占用系统资源,还可以短时间内进行数据查找,安全性较高,解决现有Java虚拟机内存访问加速方法操作复杂,占用资源较多的问题。
附图说明
图1为本发明所述一种基于eBPF的Java虚拟机内存访问方法和系统实施例一的流程图;
图2一种基于eBPF的Java虚拟机内存访问方法和系统实施例一或二的模块示意图。
附图标记:
5-基于eBPF的Java虚拟机内存访问系统;51-应用层;52-内核;53-eBPF程序。
具体实施方式
以下结合附图与具体实施例进一步阐述本发明的优点。
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本公开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本公开范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
在本发明的描述中,需要理解的是,术语“纵向”、“横向”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
在本发明的描述中,除非另有规定和限定,需要说明的是,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是机械连接或电连接,也可以是两个元件内部的连通,可以是直接相连,也可以通过中间媒介间接相连,对于本领域的普通技术人员而言,可以根据具体情况理解上述术语的具体含义。
在后续的描述中,使用用于表示元件的诸如“模块”、“部件”或“单元”的后缀仅为了有利于本发明的说明,其本身并没有特定的意义。因此,“模块”与“部件”可以混合地使用。
实施例一:本发明公开了一种基于eBPF的Java虚拟机内存访问方法,通过eBPF程序,基于eBPF技术实现共享内存,减少Java虚拟机的内存拷贝,提高Java虚拟机的内存访问速度,提升Java虚拟机的性能,具体的,参阅图1和图2,包括以下步骤:
S10:预先提供一eBPF程序,所述eBPF程序配置一包括内核下内存数据的存储区域;所述eBPF程序监控应用层下Java虚拟机的内存空间,以将应用层下内存数据映射到所述存储区域;
在本实施方式中,通过eBPF程序拷贝部分/全部内核下内存数据(如在内核下建立共享内存区),同时可映射应用层下内存数据,实现应用层和内核内存数据的集合/融合,当应用层需要内核下内存数据可从该存储区域直接获得,同时eBPF程序可在内核下执行操作,因此对于内存数据的处理可以在内核下进行,并可利用该程序的存储区域同步映射至应用层下,无需再通过应用层访问后内核处理返回,从而有效增加Java虚拟机内存访问速度。
在本实施方式中,上述存储区域为BPF Map,BPF Map是一种特殊的数据结构,它可以在内核中创建并存储数据,同时允许应用层的应用程序读写这些数据,使用BPF Map可以实现在内核和应用层共享状态信息,例如统计数据、网络连接状态等。BPF Map可以被视为一种“键-值”存储,其中键和值都可以是任意的数据类型。
上述BPF Map支持多种类型的数据结构,具体的,通过定义存储区域类型、存储区域键类型和值类型以及存储区域大小配置一存储区域;其中,所述存储区域类型包括但不限于以下其中一项或多项:哈希表(BPF_MAP_TYPE_HASH)、数组(BPF_MAP_TYPE_ARRAY)以及计数器(BPF_MAP_TYPE_PERCPU_ARRAY和BPF_MAP_TYPE_PERF_EVENT_ARRAY)。具体的,作为示例的,不同类型的BPF Map适用于不同的场景,可以根据实际情况选择合适的类型。如哈希表是最常用的一种BPFMap类型,哈希表和数组类型的BPF Map均是用于存储键值对,计数器类型的BPF Map是用于实现各种统计功能。
具体的,上述提供一eBPF程序,包括以下操作:编译可监控Java虚拟机的内存空间的eBPF程序代码(例如jvm_speed_up_memory_access_ebpf),并通过编译器将eBPF程序编译为字节码;通过加载工具将所述eBPF程序加载到内核中;通过调用工具将所述eBPF程序挂载到内核下,以监控和跟踪内核下的执行事件或函数调用。如上述可知的eBPF程序需要实现应用层和内核之间的内存映射,因此在内核加载后还需要挂载到应用层,作为举例的,可以使用加载工具(例如bpftool或其他工具等)将eBPF程序(例如jvm_speed_up_memory_access_ebpf)加载到内核中,通过调用工具(例如iproute2工具、BPF系统调用工具、bpftool命令行工具或内核模块工具等)将eBPF程序挂载到内核中的系统调用中,优选地,在另一些实施例中,除将eBPF程序挂载到内核中的系统调用中外,还可以将eBPF程序挂载到Tracepoint、Uprobe中,实现上述监控内核执行时间或应用层函数调用。
还需要说明的是,在提供一eBPF程序后,还包括:检查eBPF程序的运行状态。具体的,检查eBPF程序(例如jvm_speed_up_memory_access_ebpf)是否运行正常,包括但不限于是否可以正常调用,是否具有调用许可等,可根据实际场景进行测试。
在上述实施方式中,由于eBPF程序加载和操作均在内核中进行,可直接复制部分/全部内核下内存数据即可,将应用层下内存数据映射到所述存储区域可通过Java虚拟机中本地库中的本地访问接口和本地方法接口将内存数据映射到eBPF程序的存储区域中,作为示例的,使用Java虚拟机提供的本地库(例如Java Native Access(JNA))、本地访问接口(例如JNI(Java Native Interface))、本地方法接口(例如NMI(Native MethodInterface))来实现将Java虚拟机用户空间中的Java对象、线程栈、本地方法栈等内存数据映射到BPF Map中,如基于上述编译的eBPF程序和BPF Map,当出现内存(内核/应用层)拷贝时,将Java对象、线程栈和本地方法栈内存数据映射到BPF Map中,在eBPF程序中,通过bpf_map_update_elem()等函数操作BPF Map中的数据。
S20:应用程序发出作用于内存数据的操作指令,Java虚拟机调用本地方法接口至内存空间;
在本实施方式中,上述操作指令包括但不限于对内存数据的读取、拷贝、写入、更新、删除等,应用程序调用所述eBPF程序,通过应用程序接口函数执行所述操作指令,对相应的内存数据进行读取、写入、更新或删除;通过所述存储区域获取所述内核下内存数据。Java虚拟机调用接口至内存空间均为应用层的操作,该内存空间为Java虚拟机运行时数据区域。通过调用Java虚拟机中本地库中的本地访问接口,实现的内存数据本地调用,所述本地访问接口将函数调用传递到Java虚拟机内部的本地方法接口中,所述本地方法接口将函数调用传递到所述eBPF程序。基于前述的,具体的,作为示例而非限定的,设置Java程序(例如java_speed_up_memory_access_java.java)调用Java虚拟机中本地库(例如JNA(JavaNative Access))中的本地访问接口(例如JNI(Java Native Interface))实现本地调用。本地访问接口将函数调用传递到Java虚拟机内部的本地方法接口(例如NMI(NativeMethod Interface))中,并将包含需要操作的Java对象、线程栈和本地方法栈的内存地址的操作指令传递给本地方法接口,本地方法接口将前述调用映射到本地系统的函数库中,从而实现Java应用程序和本地系统之间的交互。在一些实施例中,所述本地方法接口将函数调用传递到所述eBPF程序包括:所述本地方法接口将本地内存数据传递给动态链接库,所述动态链接库将函数调用传递到所述eBPF程序。应用层下通过Java虚拟机实现应用程序和本地系统(内存空间)之间的交互,在本地系统中,动态链接库将函数调用传递给上述eBPF程序(例如jvm_speed_up_memory_access_ebpf)。例如,通过本地方法接口(例如NMI(Native Method Interface))将本地内存数据传递给动态链接库,然后通过动态链接库将函数调用传递到eBPF程序,从而实现本地方法接口将函数调用传递到eBPF程序中。eBPF程序通过使用BPF Maps实现在内核中对Java应用程序内存的读写操作。eBPF程序返回结果给动态链接库,然后传递给本地方法接口(例如NMI(Native Method Interface))。本地方法接口将结果返回给Java虚拟机内部的JNI(Java Native Interface)方法。通过eBPF程序实现用户态和内核的内存数据共享,通过将部分/全部内存数据映射到BPF Maps中,应用程序可以直接访问共享内存,避免了复制和同步的开销。BPF Maps可以在0(1)时间内进行数据查找,这对于需要快速查找数据的应用程序非常有用,eBPF提供了一组简单易用的API,可以方便地使用BPF Maps技术实现共享内存访问;eBPF在内核中运行,可以保证内存访问的安全性和可靠性。本实施方式实现基于eBPF程序进行Java虚拟机进行优化,降低了编写复杂度,解决现有Java虚拟机内存访问加速方法操作复杂,占用资源较多的问题。本实施方式提供的内存访问方法无需在用户态与内核态内存中进行内存拷贝,提升性能。
S30:所述eBPF程序通过存储区域的映射述eBPF程序,将执行结果返回至所述Java虚拟机的内存空间;
具体的,需要说明的是,上述在eBPF程序中执行的操作是在内核中进行,通过应用程序接口函数执行所述操作指令,对相应的内存数据进行读取、写入、更新或删除,在eBPF程序中,通过BPF Maps提供的应用程序接口函数(例如API函数)来访问BPF Maps中的数据,包括读取、写入、更新和删除,作为示例的,常用的应用程序接口函数(例如API函数)如bpf_map_lookup_elem():通过键值查找BPF Maps中的一个元素;bpf_map_update_elem():向BPF Maps中插入或更新一个元素;bpf_map_delete_elem():从BPF Maps中删除一个元素等,这些应用程序接口函数来访问操作BPF Maps中的应用层和内核的(共享)内存数据。
S40:应用程序通过访问Java虚拟机的内存空间获得所述操作指令的执行结果。
在本实施中,上述对于内存数据的操作在内核下执行后又返回Java虚拟机内部的本地访问接口(例如JNI(Java Native Interface)),本地访问接口将结果返回给上述应用程序,即应用程序直接在应用层获得执行结果,而无需等待内核操作反馈等,可视作为应用程序通过eBPF程序直接拷贝执行结果,应用程序可以直接访问用户层和内核的共享内存,无需在用户态与内核态内存中进行内存拷贝,提高内存访问速度。
在一个优选地实施方式中,还可直接通过上述所述eBPF程序直接获取内核下内存数据,无需拷贝,如应用程序调用所述eBPF程序,通过存储区域获取内核下内存数据,即编写Java应用程序,如:java_speed_up_memory_access_java.java,调用上述eBPF程序,实现在应用层直接对内核内存的操作。
进一步,在另一个优选地实施方式中,在应用层直接获取内核下内存数据后,还可在应用层直接进行数据处理,如具体的,在Java虚拟机中,通过本地方法接口获取存储区域的内存数据,并通过动态链接库访问系统本地库对内存空间内的内存数据进行调整。即,在Java虚拟机中,通过本地库(例如JNA)将修改后的值写回到相应的用户空间的内存(即还是那个数内存空间)中,以实现对Java对象、线程栈和本地方法栈的性能优化,减少了从用户态到内核态的切换开销,实现共享内存的使用。
实施例二:本实施例还提供一种基于eBPF的Java虚拟机内存访问系统5,参阅图2,包括应用层51、内核52以及预先提供一eBPF程序53,具体的:
所述eBPF程序配置一包括内核下内存数据的存储区域;所述eBPF程序监控应用层下Java虚拟机的内存空间,以将应用层下内存数据映射到所述存储区域,其中,所述内存数据包括对象、线程栈和本地方法栈;
作为说明的,eBPF程序需要实现应用层和内核之间的内存映射,因此在内核加载后还需要挂载到应用层,通过eBPF程序拷贝部分/全部内核下内存数据,同时可映射应用层下内存数据,实现应用层和内核内存数据的共享,当应用层需要内核下内存数据可从该存储区域直接获得,eBPF程序可在内核下执行操作,因此对于内存数据的处理可以在内核下进行,无需再通过应用层访问后内核处理返回,从而有效增加Java虚拟机内存访问速度。
应用层:接收应用程序发出的一作用于内存数据的操作指令,Java虚拟机调用本地方法接口至内存空间;应用程序通过访问Java虚拟机的内存空间获得所述操作指令的执行结果;
作为说明的,上述操作指令包括但不限于对内存数据的读取、拷贝、写入、更新、删除等,Java虚拟机调用接口至内存空间均为应用层的操作,应用程序通过Java虚拟机中本地库(例如JNA(Java Native Access))中的本地访问接口(例如JNI(Java NativeInterface))实现本地调用,并将包含需要操作的Java对象、线程栈和本地方法栈的内存地址的操作指令传递给本地方法接口(例如NMI(Native Method Interface)),而后通过下述eBPF程序在内核的操作,以获取对应指令的操作结果。
内核层:所述eBPF程序通过存储区域的映射获取所述操作指令并在内核下执行,将执行结果返回至所述Java虚拟机的内存空间。
作为说明的,上述在eBPF程序中执行在内核中进行,通过应用程序接口函数执行所述操作指令,对相应的内存数据进行读取、写入、更新或删除,操作结果直接返回至Java虚拟机的内存空间,使得应用程序直接在应用层获得执行结果,而无需等待内核操作反馈等,可视作为根据存储区域地址直接读取执行结果,提高内存访问速度,且操作方便,无需占用系统资源。
在本实施方式中,作为优选地,还可直接通过上述所述eBPF程序直接获取内核下内存数据进行应用层下的处理。具体的,在应用层,通过Java虚拟机中本地方法接口获取eBPF程序的存储区域中内存数据,并通过动态访问系统本地库对内存空间内的存数据进行调整。该调整也可包括如上述读取、写入、更新或删除,需要说明的是,该调整仅需要涉及读取内核下内存数据,当需要更改内核下内存数据,则需要如上述调用eBPF程序在内核下执行操作。
本实施方式提供的一基于eBPF的Java虚拟机内存访问系统,通过eBPF程序拷贝部分/全部内核下内存数据,同时可映射应用层下内存数据,实现应用层和内核内存数据的内存数据共享,减少Java虚拟机的内存拷贝,加速Java虚拟机内存访问速度,可以快速数据查找,无需在用户态与内核态内存中进行内存拷贝,减少系统资源占用。
应当注意的是,本发明的实施例有较佳的实施性,且并非对本发明作任何形式的限制,任何熟悉该领域的技术人员可能利用上述揭示的技术内容变更或修饰为等同的有效实施例,但凡未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何修改或等同变化及修饰,均仍属于本发明技术方案的范围内。
Claims (10)
1.一种基于eBPF的Java虚拟机内存访问方法,其特征在于,包括:
预先提供一eBPF程序,所述eBPF程序配置一包括内核下内存数据的存储区域;
所述eBPF程序监控应用层下Java虚拟机的内存空间,以将所述应用层下内存数据映射到所述存储区域;
应用程序发出作用于内存数据的操作指令,通过Java虚拟机调用本地方法接口至内存空间;
所述eBPF程序通过所述存储区域的映射获取所述操作指令并在内核下执行,将执行结果返回至所述Java虚拟机的内存空间;
所述应用程序通过访问所述Java虚拟机的内存空间获得所述操作指令的执行结果。
2.根据权利要求1所述的访问方法,其特征在于:
所述内存数据包括对象、线程栈和本地方法栈。
3.根据权利要求1所述的访问方法,其特征在于,所述通过Java虚拟机调用本地方法接口至内存空间,包括:
通过调用所述Java虚拟机中本地库中的本地访问接口,实现内存数据本地调用,所述本地访问接口将函数调用传递到所述Java虚拟机内部的所述本地方法接口中,所述本地方法接口将所述函数调用传递到所述eBPF程序。
4.根据权利要求3所述的访问方法,其特征在于,所述本地方法接口将所述函数调用传递到所述eBPF程序包括:
所述本地方法接口将所述内存数据传递给动态链接库,所述动态链接库将所述函数调用传递到所述eBPF程序。
5.根据权利要求1所述的访问方法,其特征在于,所述提供一eBPF程序,包括:
编译可监控Java虚拟机的内存空间的eBPF程序,并通过编译器将所述eBPF程序编译为eBPF字节码;
通过采用加载工具将所述eBPF程序加载到内核中;
通过调用工具将所述eBPF程序挂载到内核下,以监控和跟踪内核下的执行事件或函数调用。
6.根据权利要求1或5所述的访问方法,其特征在于,在提供一eBPF程序后,还包括:
检查eBPF程序的运行状态。
7.根据权利要求1所述的访问方法,所述应用程序发出作用于内存数据的操作指令,包括:
应用程序调用所述eBPF程序,通过应用程序接口函数执行所述操作指令,对相应的内存数据进行读取、写入、更新或删除;
通过所述存储区域获取所述内核下内存数据。
8.根据权利要求1所述的访问方法,其特征在于:
通过定义存储区域类型、存储区域键类型和值类型以及存储区域大小配置一存储区域;其中,所述存储区域类型包括以下任一项或多项:哈希表、数组、计数器。
9.一种基于eBPF的Java虚拟机内存访问系统,其特征在于:
包括应用层、内核以及预先提供一eBPF程序,所述eBPF程序配置一包括内核下内存数据的存储区域;
所述eBPF程序监控应用层下Java虚拟机的内存空间,以将应用层下内存数据映射到所述存储区域;
应用层:应用程序发出作用于所述内存数据的操作指令,通过所述Java虚拟机调用本地方法接口至所述内存空间;应用程序通过访问所述Java虚拟机的内存空间获得所述操作指令的执行结果;
内核层:所述eBPF程序通过存储区域的映射获取所述操作指令并在内核下执行,将执行结果返回至所述Java虚拟机的内存空间。
10.根据权利要求9所述的访问系统,其特征在于:
在应用层,通过Java虚拟机中本地方法接口获取eBPF程序的存储区域中内存数据,并通过动态访问系统本地库对内存空间内的存数据进行调整。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310633601.5A CN116661948A (zh) | 2023-05-31 | 2023-05-31 | 一种基于eBPF的Java虚拟机内存访问方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310633601.5A CN116661948A (zh) | 2023-05-31 | 2023-05-31 | 一种基于eBPF的Java虚拟机内存访问方法和系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116661948A true CN116661948A (zh) | 2023-08-29 |
Family
ID=87714759
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310633601.5A Pending CN116661948A (zh) | 2023-05-31 | 2023-05-31 | 一种基于eBPF的Java虚拟机内存访问方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116661948A (zh) |
-
2023
- 2023-05-31 CN CN202310633601.5A patent/CN116661948A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6519594B1 (en) | Computer-implemented sharing of java classes for increased memory efficiency and communication method | |
US6330709B1 (en) | Virtual machine implementation for shared persistent objects | |
US8359575B2 (en) | Protection domains for a computer operating system | |
US8453015B2 (en) | Memory allocation for crash dump | |
US6931544B1 (en) | Method and apparatus for executing multiple JAVA(™) applications on a single JAVA(™) virtual machine | |
US8028299B2 (en) | Computer architecture and method of operation for multi-computer distributed processing with finalization of objects | |
US8176142B2 (en) | Shared JAVA jar files | |
US5491808A (en) | Method for tracking memory allocation in network file server | |
US7028056B1 (en) | Method and arrangements for generating debugging information following software failures | |
US6996590B2 (en) | Method and system for the garbage collection of shared data | |
US6792606B2 (en) | Method and apparatus for object persistence | |
US6223335B1 (en) | Platform independent double compare and swap operation | |
US8200938B2 (en) | Computer system and method providing a memory buffer for use with native and platform-independent software code | |
US20020174265A1 (en) | Method and apparatus for caching active computing environments | |
US20110185129A1 (en) | Secondary java heaps in shared memory | |
Tevanian et al. | A UNIX Interface for Shared Memory and Memory Mapped Files Under Mach. | |
US7426720B1 (en) | System and method for dynamic preloading of classes through memory space cloning of a master runtime system process | |
US7546600B2 (en) | Method of assigning virtual process identifier to process within process domain | |
EP1971922B1 (en) | Memory architecture and access method | |
US7213098B2 (en) | Computer system and method providing a memory buffer for use with native and platform-independent software code | |
JPH02114335A (ja) | マルチ・プロセツシング方式 | |
US20060282840A1 (en) | Dynamic mapping of shared libraries | |
US8209707B2 (en) | Gathering state information for an application and kernel components called by the application | |
US7350210B2 (en) | Generic data persistence application program interface | |
US7401178B1 (en) | Expanded memory space in environments including virtual machines |
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 |