一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种容器的GPU进程统计方法和装置与流程

2021-12-03 23:41:00 来源:中国专利 TAG:
一种容器的gpu进程统计方法和装置
技术领域
:1.本发明涉及计算机领域,更具体地,特别是指一种容器的gpu进程统计方法和装置。
背景技术
::2.在人工智能大数据时代,随着数据量的不断增大,对算力的需求也越来越高,gpu的超高计算力使其广泛应用于各个行业,但是由于其高昂的价格,实际各个企业在应用中多采用k8s(kubernetes)等工具来管理平台资源,并通过容器的方式来分配和管理各个用户申请的资源,从而尽可能的隔离各个用户之间的干扰。3.然而,在容器内使用nvidia自带的nvidia‑smi命令或者nvidia‑ml库函数是无法获取和显示容器内gpu任务的统计信息的,用户只能通过在host主机端来查看所有gpu运行任务,无法直观的区分哪些任务属于自己的容器。更进一步,当多个用户运行的gpu任务名相同时,用户更加难以区分,且当用户想监控自己gpu任务运行状态时不得不监控整个host上的gpu任务,造成大量无效信息的输出,造成系统资源的浪费。4.虽然有方案指出对nvidia管理库函数进行劫持并利用linuxproc目录查找容器内进程,但只对nvidia管理库函数进行劫持,对nvidia驱动自带的可执行命令而言是失效的,导致两者调用不一致;且直接利用proc目录来查找进程信息,造成大量无用的磁盘文件读取和分析。5.针对现有技术中难以监控特定容器的gpu进程状态的问题,目前尚无有效的解决方案。技术实现要素:6.有鉴于此,本发明实施例的目的在于提出一种容器的gpu进程统计方法和装置,能够高效获取容器的gpu进程统计信息,提升容器的易用性。7.基于上述目的,本发明实施例的第一方面提供了一种容器的gpu进程统计方法,包括执行以下步骤:8.重定义原生动态库的原生动态链接符号函数和gpu状态显示命令中的原生进程统计函数,并基于重定义的进程统计函数构建劫持函数表;9.运行包括多个原生进程统计函数的函数符号的gpu状态显示命令;10.使用打开函数调用原生动态库以获得操作句柄,并使用原生动态链接符号函数基于操作句柄和多个函数符号分别获得多个原生函数地址;11.使用重定义的动态链接符号函数分别判断多个函数符号是否记载于劫持函数表内,并将记载于劫持函数表内的多个函数符号重定向到劫持函数表中对应的劫持函数地址以获取gpu进程标识和进程名称;12.将gpu进程标识替换为对应的容器进程标识以显示容器的gpu进程状态。13.在一些实施方式中,基于重定义的进程统计函数构建劫持函数表包括:向劫持函数表中写入重定义的进程统计函数的函数符号、劫持函数地址、以及指针类型。14.在一些实施方式中,在将记载于劫持函数表内的多个函数符号重定向到劫持函数表中对应的劫持函数地址以获取gpu进程标识和进程名称的同时,还使用未记载于劫持函数表内的多个函数符号各自的原生函数地址来获取gpu进程标识和进程名称。15.在一些实施方式中,将gpu进程标识替换为对应的容器进程标识以显示容器的gpu进程状态包括:16.使用读取进程表获取每个容器进程标识,利用匹配规则基于每个容器进程标识来搜索并分别对应每个容器进程标识的调度文件;17.从每个调度文件中分别读取每个容器进程标识对应的gpu进程标识和进程名称,并响应于从每个调度文件中分别读取的gpu进程标识和进程名称、与根据多个函数符号分别获取的gpu进程标识和进程名称相匹配,而将根据多个函数符号分别获取的gpu进程标识替换为对应的容器进程标识;18.输出进程名称、对应的容器进程标识、以及容器的gpu进程状态。19.在一些实施方式中,在使用读取进程表获取每个容器进程标识之后,先剔除容器进程标识0或1的进程以及gpu状态显示命令其本身所使用的进程,再利用匹配规则基于其余的容器进程标识来搜索并分别对应每个容器进程标识的调度文件。20.本发明实施例的第二方面提供了一种容器的gpu进程统计装置,包括:21.处理器;22.控制器,存储有处理器可运行的程序代码,处理器在运行程序代码时执行以下步骤:23.重定义原生动态库的原生动态链接符号函数和gpu状态显示命令中的原生进程统计函数,并基于重定义的进程统计函数构建劫持函数表;24.运行包括多个原生进程统计函数的函数符号的gpu状态显示命令;25.使用打开函数调用原生动态库以获得操作句柄,并使用原生动态链接符号函数基于操作句柄和多个函数符号分别获得多个原生函数地址;26.使用重定义的动态链接符号函数分别判断多个函数符号是否记载于劫持函数表内,并将记载于劫持函数表内的多个函数符号重定向到劫持函数表中对应的劫持函数地址以获取gpu进程标识和进程名称;27.将gpu进程标识替换为对应的容器进程标识以显示容器的gpu进程状态。28.在一些实施方式中,基于重定义的进程统计函数构建劫持函数表包括:向劫持函数表中写入重定义的进程统计函数的函数符号、劫持函数地址、以及指针类型。29.在一些实施方式中,在将记载于劫持函数表内的多个函数符号重定向到劫持函数表中对应的劫持函数地址以获取gpu进程标识和进程名称的同时,还使用未记载于劫持函数表内的多个函数符号各自的原生函数地址来获取gpu进程标识和进程名称。30.在一些实施方式中,将gpu进程标识替换为对应的容器进程标识以显示容器的gpu进程状态包括:31.使用读取进程表获取每个容器进程标识,利用匹配规则基于每个容器进程标识来搜索并分别对应每个容器进程标识的调度文件;32.从每个调度文件中分别读取每个容器进程标识对应的gpu进程标识和进程名称,并响应于从每个调度文件中分别读取的gpu进程标识和进程名称、与根据多个函数符号分别获取的gpu进程标识和进程名称相匹配,而将根据多个函数符号分别获取的gpu进程标识替换为对应的容器进程标识;33.输出进程名称、对应的容器进程标识、以及容器的gpu进程状态。34.在一些实施方式中,在使用读取进程表获取每个容器进程标识之后,先剔除容器进程标识0或1的进程以及gpu状态显示命令其本身所使用的进程,再利用匹配规则基于其余的容器进程标识来搜索并分别对应每个容器进程标识的调度文件。35.本发明具有以下有益技术效果:本发明实施例提供的容器的gpu进程统计方法和装置,通过重定义原生动态库的原生动态链接符号函数和gpu状态显示命令中的原生进程统计函数,并基于重定义的进程统计函数构建劫持函数表;运行包括多个原生进程统计函数的函数符号的gpu状态显示命令;使用打开函数调用原生动态库以获得操作句柄,并使用原生动态链接符号函数基于操作句柄和多个函数符号分别获得多个原生函数地址;使用重定义的动态链接符号函数分别判断多个函数符号是否记载于劫持函数表内,并将记载于劫持函数表内的多个函数符号重定向到劫持函数表中对应的劫持函数地址以获取gpu进程标识和进程名称;将gpu进程标识替换为对应的容器进程标识以显示容器的gpu进程状态的技术方案,能够高效获取容器的gpu进程统计信息,提升容器的易用性。附图说明36.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。37.图1为本发明提供的容器的gpu进程统计方法的流程示意图;38.图2为本发明提供的容器的gpu进程统计方法的前半部分的详细流程图;39.图3为本发明提供的容器的gpu进程统计方法的后半部分的详细流程图。具体实施方式40.为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明实施例进一步详细说明。41.需要说明的是,本发明实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称非相同的实体或者非相同的参量,可见“第一”、“第二”仅为了表述的方便,不应理解为对本发明实施例的限定,后续实施例对此不再一一说明。42.基于上述目的,本发明实施例的第一个方面,提出了一种高效获取容器的gpu进程统计信息,提升容器的易用性的容器的gpu进程统计方法的一个实施例。图1示出的是本发明提供的容器的gpu进程统计方法的流程示意图。43.所述的容器的gpu进程统计方法,如图1所示,包括执行以下步骤:44.步骤s101,重定义原生动态库的原生动态链接符号函数和gpu状态显示命令中的原生进程统计函数,并基于重定义的进程统计函数构建劫持函数表;45.步骤s103,运行包括多个原生进程统计函数的函数符号的gpu状态显示命令;46.步骤s105,使用打开函数调用原生动态库以获得操作句柄,并使用原生动态链接符号函数基于操作句柄和多个函数符号分别获得多个原生函数地址;47.步骤s107,使用重定义的动态链接符号函数分别判断多个函数符号是否记载于劫持函数表内,并将记载于劫持函数表内的多个函数符号重定向到劫持函数表中对应的劫持函数地址以获取gpu进程标识和进程名称;48.步骤s109,将gpu进程标识替换为对应的容器进程标识以显示容器的gpu进程状态。49.本发明通过重定义和劫持nvidia驱动自带的管理库函数和nvidia可执行命令,实现容器内获取gpu进程统计信息时调用的重定向,同时使用在主机和容器间进程pid转换的策略完成gpu进程pid的转换。两者结合实现在容器内获取gpu进程的统计信息的一致性和高效性,方便用户在各自的运行环境(容器内)直观查看和监控自己的gpu任务以及整个hostgpu的运行状态,该方法和策略在一定程度也提升了管理平台的易用性,对于用户十分有用。50.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(rom)或随机存储记忆体(ram)等。所述计算机程序的实施例,可以达到与之对应的前述任意方法实施例相同或者相类似的效果。51.结合这里的公开所描述的方法或算法的步骤可以直接包含在硬件中、由处理器执行的软件模块中或这两者的组合中。软件模块可以驻留在ram存储器、快闪存储器、rom存储器、eprom存储器、eeprom存储器、寄存器、硬盘、可移动盘、cd‑rom、或本领域已知的任何其它形式的存储介质中。示例性的存储介质被耦合到处理器,使得处理器能够从该存储介质中读取信息或向该存储介质写入信息。在一个替换方案中,所述存储介质可以与处理器集成在一起。处理器和存储介质可以驻留在asic中。asic可以驻留在用户终端中。在一个替换方案中,处理器和存储介质可以作为分立组件驻留在用户终端中。52.劫持函数表中写入重定义的进程统计函数的函数符号、劫持函数地址、以及指针类型。53.在一些实施方式中,在将记载于劫持函数表内的多个函数符号重定向到劫持函数表中对应的劫持函数地址以获取gpu进程标识和进程名称的同时,还使用未记载于劫持函数表内的多个函数符号各自的原生函数地址来获取gpu进程标识和进程名称。54.在一些实施方式中,将gpu进程标识替换为对应的容器进程标识以显示容器的gpu进程状态包括:55.使用读取进程表获取每个容器进程标识,利用匹配规则基于每个容器进程标识来搜索并分别对应每个容器进程标识的调度文件;56.从每个调度文件中分别读取每个容器进程标识对应的gpu进程标识和进程名称,并响应于从每个调度文件中分别读取的gpu进程标识和进程名称、与根据多个函数符号分别获取的gpu进程标识和进程名称相匹配,而将根据多个函数符号分别获取的gpu进程标识替换为对应的容器进程标识;57.输出进程名称、对应的容器进程标识、以及容器的gpu进程状态。58.在一些实施方式中,在使用读取进程表获取每个容器进程标识之后,先剔除容器进程标识0或1的进程以及gpu状态显示命令其本身所使用的进程,再利用匹配规则基于其余的容器进程标识来搜索并分别对应每个容器进程标识的调度文件。59.结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。为了清楚地说明硬件和软件的这种可互换性,已经就各种示意性组件、方块、模块、电路和步骤的功能对其进行了一般性的描述。这种功能是被实现为软件还是被实现为硬件取决于具体应用以及施加给整个系统的设计约束。本领域技术人员可以针对每种具体应用以各种方式来实现所述的功能,但是这种实现决定不应被解释为导致脱离本发明实施例公开的范围。60.结合这里的公开所描述的各种示例性逻辑块、模块和电路可以利用被设计成用于执行这里所述功能的下列部件来实现或执行:通用处理器、数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)或其它可编程逻辑器件、分立门或晶体管逻辑、分立的硬件组件或者这些部件的任何组合。通用处理器可以是微处理器,但是可替换地,处理器可以是任何传统处理器、控制器、微控制器或状态机。处理器也可以被实现为计算设备的组合,例如,dsp和微处理器的组合、多个微处理器、一个或多个微处理器结合dsp和/或任何其它这种配置。61.下面根据具体实施例来进一步阐述本发明的具体实施方式。62.首先重定义nvidia‑ml动态库中获取gpu进程统计信息的函数。nvidia‑ml动态库是nvidia驱动自带的,其实现细节未知,因此调用nvidia‑ml动态库函数获取gpu进程统计信息时,先重定向到自定义的函数,并再次调用nvidia‑ml动态库的原始函数获取hostgpu进程的统计信息。63.其次重定义dlsym函数,并创建劫持函数映射表。nvidia驱动自带的nvidia‑smi可执行命令在获取gpu进程的统计信息时并未采用直接调用nvidia‑ml动态库中函数的方式,而是通过dlopen、dlsym、dlclose和nvidia‑ml动态库的结合方式,因此只劫持和重定向nvidia‑ml动态库中函数对nvidia驱动自带的nvidia‑smi命令是无效的,造成两者调用结果的不一致。本发明实施例采取重定义和劫持dlsym函数的方式,使nvidia‑smi命令执行时重定向到自定义的函数,同时为了不影响其他操作和最小化调用性能损失,本方法和策略中创建劫持函数表来控制函数的调用,当函数符号位于劫持函数表时,则重定向到自定义的函数,否则返回原始函数的地址,完成调用。本方案和策略中nvidia‑smi的具体执行过程如图2所示。64.然后将获取的gpu进程pid转换为容器内的进程pid。由于nvidia驱动是基于主机的,因此在容器内无论是直接或者间接利用可执行命令调用nvidia‑ml动态库,其得到的gpu进程信息都是基于host主机的,对于容器内而言,该gpu进程的pid是无效的,这也正是容器内无法统计和显示gpu进程信息的原因。本方法和策略中,我们提出一种高效的主机和容器间进程pid转换的方法和策略,完成容器内gpu进程pid的正确统计,具体过程如图3所示:在容器内直接调用nvidia‑ml动态库或者运行nvidia‑smi命令,获取当前容器内运行的gpu进程统计信息,记为table1;定义readpoctab模块,该模块是为了避免直接对linux/proc目录的遍历;通过该模块获取容器内的运行进程,并剔除pid等于0和1的进程,记为table2;遍历table2中的进程,利用匹配规则,搜寻对应pid的/proc/pid/sched文件,获取容器内进程的hostpid和name,直到遍历结束;判断进程的name,如果name为nvidia‑smi则剔除,原因是nvidia‑smi是命令本身不做统计;在table1中查找和匹配hostpid,一致则用table2中的进程pid替换table1中的进程pid,并将结果添加到result集合。65.在事先要编译生成动态劫持库并设置preload选项。将重定义或者自定义的函数编译生成动态劫持库,如libnvidia‑preload.so;在用户创建开发环境时(容器或者pod,k8s管理资源的最小运行单元),将劫持库libnvidia‑preload.so映射到开发环境中,如映射路径为/usr/local/lib/libnvidia‑preload.so,并将映射路径添加到开发环境的/etc/ld.so.preload文件中,确保劫持库libnvidia‑preload.so的加载位于libnvidia‑ml.so和libc.so之前,这样调用时会优先调用劫持函数。最后在容器内创建gpu训练任务,即可利用nvidia驱动自带的管理库或者命令来查看该容器内正在运行的gpu进程统计信息以及整个主机上gpu卡的使用信息。66.此外,根据本发明实施例公开的方法还可以被实现为由cpu执行的计算机程序,该计算机程序可以存储在计算机可读存储介质中。在该计算机程序被cpu执行时,执行本发明实施例公开的方法中限定的上述功能。上述方法步骤以及系统单元也可以利用控制器以及用于存储使得控制器实现上述步骤或单元功能的计算机程序的计算机可读存储介质实现。67.从上述实施例可以看出,本发明实施例提供的容器的gpu进程统计方法,通过重定义原生动态库的原生动态链接符号函数和gpu状态显示命令中的原生进程统计函数,并基于重定义的进程统计函数构建劫持函数表;运行包括多个原生进程统计函数的函数符号的gpu状态显示命令;使用打开函数调用原生动态库以获得操作句柄,并使用原生动态链接符号函数基于操作句柄和多个函数符号分别获得多个原生函数地址;使用重定义的动态链接符号函数分别判断多个函数符号是否记载于劫持函数表内,并将记载于劫持函数表内的多个函数符号重定向到劫持函数表中对应的劫持函数地址以获取gpu进程标识和进程名称;将gpu进程标识替换为对应的容器进程标识以显示容器的gpu进程状态的技术方案,能够高效获取容器的gpu进程统计信息,提升容器的易用性。68.需要特别指出的是,上述容器的gpu进程统计方法的各个实施例中的各个步骤均可以相互交叉、替换、增加、删减,因此,这些合理的排列组合变换之于容器的gpu进程统计方法也应当属于本发明的保护范围,并且不应将本发明的保护范围局限在所述实施例之上。69.基于上述目的,本发明实施例的第二个方面,提出了一种高效获取容器的gpu进程统计信息,提升容器的易用性的容器的gpu进程统计装置的一个实施例。装置包括:70.处理器;71.控制器,存储有处理器可运行的程序代码,处理器在运行程序代码时执行以下步骤:72.重定义原生动态库的原生动态链接符号函数和gpu状态显示命令中的原生进程统计函数,并基于重定义的进程统计函数构建劫持函数表;73.运行包括多个原生进程统计函数的函数符号的gpu状态显示命令;74.使用打开函数调用原生动态库以获得操作句柄,并使用原生动态链接符号函数基于操作句柄和多个函数符号分别获得多个原生函数地址;75.使用重定义的动态链接符号函数分别判断多个函数符号是否记载于劫持函数表内,并将记载于劫持函数表内的多个函数符号重定向到劫持函数表中对应的劫持函数地址以获取gpu进程标识和进程名称;76.将gpu进程标识替换为对应的容器进程标识以显示容器的gpu进程状态。77.在一些实施方式中,基于重定义的进程统计函数构建劫持函数表包括:向劫持函数表中写入重定义的进程统计函数的函数符号、劫持函数地址、以及指针类型。78.在一些实施方式中,在将记载于劫持函数表内的多个函数符号重定向到劫持函数表中对应的劫持函数地址以获取gpu进程标识和进程名称的同时,还使用未记载于劫持函数表内的多个函数符号各自的原生函数地址来获取gpu进程标识和进程名称。79.在一些实施方式中,将gpu进程标识替换为对应的容器进程标识以显示容器的gpu进程状态包括:80.使用读取进程表获取每个容器进程标识,利用匹配规则基于每个容器进程标识来搜索并分别对应每个容器进程标识的调度文件;81.从每个调度文件中分别读取每个容器进程标识对应的gpu进程标识和进程名称,并响应于从每个调度文件中分别读取的gpu进程标识和进程名称、与根据多个函数符号分别获取的gpu进程标识和进程名称相匹配,而将根据多个函数符号分别获取的gpu进程标识替换为对应的容器进程标识;82.输出进程名称、对应的容器进程标识、以及容器的gpu进程状态。83.在一些实施方式中,在使用读取进程表获取每个容器进程标识之后,先剔除容器进程标识0或1的进程以及gpu状态显示命令其本身所使用的进程,再利用匹配规则基于其余的容器进程标识来搜索并分别对应每个容器进程标识的调度文件。84.本发明例公开所述的装置、设备等可为各种电子终端设备,例如手机、个人数字助理(pda)、平板电脑(pad)、智能电视等,也可以是大型终端设备,如装置等,因此本发明实施例公开的保护范围不应限定为某种特定类型的装置、设备。本发明实施例公开所述的客户端可以是以电子硬件、计算机软件或两者的组合形式应用于上述任意一种电子终端设备中。85.从上述实施例可以看出,本发明实施例提供的容器的gpu进程统计装置,通过重定义原生动态库的原生动态链接符号函数和gpu状态显示命令中的原生进程统计函数,并基于重定义的进程统计函数构建劫持函数表;运行包括多个原生进程统计函数的函数符号的gpu状态显示命令;使用打开函数调用原生动态库以获得操作句柄,并使用原生动态链接符号函数基于操作句柄和多个函数符号分别获得多个原生函数地址;使用重定义的动态链接符号函数分别判断多个函数符号是否记载于劫持函数表内,并将记载于劫持函数表内的多个函数符号重定向到劫持函数表中对应的劫持函数地址以获取gpu进程标识和进程名称;将gpu进程标识替换为对应的容器进程标识以显示容器的gpu进程状态的技术方案,能够高效获取容器的gpu进程统计信息,提升容器的易用性。86.需要特别指出的是,上述装置的实施例采用了所述容器的gpu进程统计方法的实施例来具体说明各模块的工作过程,本领域技术人员能够很容易想到,将这些模块应用到所述容器的gpu进程统计方法的其他实施例中。当然,由于所述容器的gpu进程统计方法实施例中的各个步骤均可以相互交叉、替换、增加、删减,因此,这些合理的排列组合变换之于所述装置也应当属于本发明的保护范围,并且不应将本发明的保护范围局限在所述实施例之上。87.本发明实施例还可以包括相应的计算机设备。计算机设备包括存储器、至少一个处理器以及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时执行上述任意一种方法。88.其中,存储器作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本技术实施例中的所述容器的gpu进程统计方法对应的程序指令/模块。处理器通过运行存储在存储器中的非易失性软件程序、指令以及模块,从而执行装置的各种功能应用以及数据处理,即实现上述方法实施例的容器的gpu进程统计方法。89.存储器可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据装置的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至本地模块。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。90.最后需要说明的是,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(rom)或随机存储记忆体(ram)等。所述计算机程序的实施例,可以达到与之对应的前述任意方法实施例相同或者相类似的效果。91.以上是本发明公开的示例性实施例,但是应当注意,在不背离权利要求限定的本发明实施例公开的范围的前提下,可以进行多种改变和修改。根据这里描述的公开实施例的方法权利要求的功能、步骤和/或动作不需以任何特定顺序执行。此外,尽管本发明实施例公开的元素可以以个体形式描述或要求,但除非明确限制为单数,也可以理解为多个。92.所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本发明实施例公开的范围(包括权利要求)被限于这些例子;在本发明实施例的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,并存在如上所述的本发明实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。因此,凡在本发明实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本发明实施例的保护范围之内。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献