用于并行计算的方法和装置制造方法

文档序号:6500660阅读:118来源:国知局
用于并行计算的方法和装置制造方法
【专利摘要】本发明涉及用于并行计算的方法和装置。根据本发明的实施例,提供一种作业并行处理方法,对所述作业的处理至少包括在第一阶段中执行上游任务以及在随后的第二阶段中执行下游任务。该方法包括:定量地确定所述上游任务与所述下游任务之间的数据依赖关系;以及至少部分地基于所述数据依赖关系来选择所述下游任务的启动时间。还公开了相应的装置。根据本发明的实施例,能够更为准确地、定量地确定不同阶段任务之间的数据依赖关系,从而选择适当的下游任务启动时间。
【专利说明】用于并行计算的方法和装置
【技术领域】
[0001 ] 本发明的实施例涉及用于并行计算的方法和装置。
【背景技术】
[0002]并行计算已经得到了日益广泛的应用。根据这种计算模式,一个作业(job)可以被分为多个任务阶段。每个阶段的任务可被分发到多个不同的节点以便并行地被执行。而后,上一阶段产生的数据(称为“中间数据”)被传输给下一阶段的任务,以便进行后续处理。同一阶段中可以存在多个能够并发执行的任务,而不同阶段的任务之间存在数据依赖关系。在并行或分布式计算中,一个需要着重考虑的问题是不同任务阶段之间的数据依赖性。
[0003]以目前常被用于并行作业处理的MapReduce (映射化简)模型为例,它将一个作业划分为两个阶段:映射(map)阶段和化简(reduce)阶段。如本领域中已知的,在映射阶段和化简阶段中,各自可以存在多个可并发执行的任务;而在映射阶段与化简阶段之间则存在着数据依赖性。映射任务将生成中间数据,这些中间数据借助于磁盘被存储并通过网络传输给化简任务以作为其输入。化简任务需要完整地取回来自每个映射任务的相应中间数据,而后才能够开始执行后续数据处理。因此,映射任务和简化任务无需同时启动。在现有技术中,常见的做法是当执行完成的映射任务的数目达到预定阈值(例如,5%)时启动化简任务。
[0004]在现有技术方案中,化简任务的启动时机是基于静态规则而确定的。然而,这种静态规则并不一定能够确保特定的作业具有较高的执行效率。例如,基于这种静态方案,某些化简任务可能过早地被启动并且因此处于空闲状态。这将导致分配给这些化简任务的资源被浪费。同时,其他并发的化简任务可能由于潜在的资源饥饿而受到不利影响。反之,现有技术中的静态规则也有可能导致某些化简任务被过晚地启动。这将增加作业的总体执行时间,从而导致响应延迟。
[0005]应当理解,由不同阶段的任务之间的数据依赖关系引起的问题广泛存在于各种并行或者分布式计算中,不仅限于上文作为示例而被描述的MapReduce模型。一般地,在作业的并行化处理中,下游阶段任务的过早启动将导致资源浪费,而下游任务的过晚启动将导致整个任务执行效率下降,二者都将对作业的整体执行效率产生不利的影响。

【发明内容】

[0006]鉴于上述以及其他潜在问题,本领域中需要一种更为有效地管理并行计算的解决方案。
[0007]在本发明的一个方面,提供一种作业并行处理方法,对所述作业的处理至少包括在第一阶段中执行上游任务以及在随后的第二阶段中执行下游任务。所述方法包括:定量地确定所述上游任务与所述下游任务之间的数据依赖关系;以及至少部分地基于所述数据依赖关系来选择所述下游任务的启动时间。[0008]在本发明的另一方面,提供一种作业并行处理装置,对所述作业的处理至少包括在第一阶段中执行上游任务以及在随后的第二阶段中执行下游任务。所述装置包括:确定单元,被配置为定量地确定所述上游任务与所述下游任务之间的数据依赖关系;以及选择单元,被配置为至少部分地基于所述数据依赖关系来选择所述下游任务的启动时间。
[0009]通过下文描述将会理解,根据本发明的实施例,允许通过定量的方式对并行化处理的作业的不同阶段的任务之间存在的数据依赖关系进行表征或建模。由此,可以更为精确地选择下游任务的启动时机。以此方式,可以避免由于下游任务过早启动而导致的资源闲置和浪费,同时避免由于下游任务过晚启动而导致的作业总体执行效率下降和响应时间过长。
【专利附图】

【附图说明】
[0010]通过参考附图阅读下文的详细描述,本发明实施例的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施例,其中:
[0011]图1示出了根据本发明一个示例性实施例的作业并行处理方法的流程图;
[0012]图2示出了根据本发明另一示例性实施例的作业并行处理方法的流程图;
[0013]图3示出了根据本发明一个示例性实施例的作业并行处理装置的框图;以及
[0014]图4示出了可与本发明的示例性实施例结合使用的计算机系统的框图。
[0015]在各个附图中,相同或对应的标号表不相同或对应的部分。
【具体实施方式】
[0016]下面将参考附图中示出的若干示例性实施例来描述本发明的原理和精神。给出这些实施例仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。
[0017]通过下文描述将会理解,本发明的核心创造性思想之一在于:以定量地方式、特定于每个具体的并行化作业,确定作业的上游任务与下游任务之间的数据依赖关系。继而利用该数据依赖关系动态地确定下游任务的启动时机。这样,可以避免由于下游任务过早启动而导致的资源闲置和浪费,同时避免由于下游任务过晚启动而导致的作业总体执行效率下降和响应时间过长。
[0018]首先参考图1,其示出了根据本发明一个实施例的作业并行处理方法100的流程图。请注意,在此使用的术语“作业”是指任何计算任务,例如数据分析、数据处理、数据挖掘,等等。特别地,根据本发明的实施例,对作业的处理至少包括将在第一阶段中执行上游任务以及在随后的第二阶段中执行下游任务。换言之,作业的处理被划分为不同阶段的任务。注意,被率先执行的任务在此被称为“上游(upstream)任务”,而被随后执行的任务则被称为“下游(downstream)任务”。
[0019]根据本发明的实施例,在作业的处理过程中,同一阶段的任务可以并发地执行,不同阶段的任务按照时间顺序依次执行。特别地,应当理解,上游任务和下游任务是相对而言的。对于作业中的当前阶段的任务而言,它可以是先前阶段中任务的下游任务,同时也是后续阶段中任务的上游任务。作为示例,在基于MapReduce模型的并行作业处理中,映射阶段的任务(或简称映射任务)相对于化简阶段的任务(或简称化简任务)而言是上游任务。反之,化简任务相对于映射任务是下游任务。
[0020]如图1所示,方法100开始之后,在步骤S101,定量地确定上游任务与下游任务之间的数据依赖关系。如本领域技术人员知道的,上游任务和下游任务之间通常存在数据依赖关系。例如,下游任务往往要依赖于上游任务产生的中间数据或文件来执行其操作。在现有技术中,并没有针对特定的作业对上游任务与下游任务之间的这种数据依赖关系进行量化。例如,如上文所述,在传统的MapReduce模式中,采用静态的、预先确定的规则来粗略地表示上游任务与下游任务之间的这种依赖关系。
[0021]不同于现有技术,根据本发明的实施例,上游任务与下游任务之间的数据依赖关系被定量地确定或者表征。以此方式,对于任何给定的具体作业,都可以获取准确的、量化的数据依赖关系。根据本发明的实施例,数据依赖关系可以通过任何适当的手段被定量地表征或者说建模,这将在下文详述。
[0022]接下来,方法100进行到步骤S102,在此至少部分地基于步骤SlOl处确定的数据依赖关系选择下游任务的时间。根据本发明的实施例,由于数据依赖关系是针对具体作业而被定量确定的,因此可以确保下游任务在最为适当的时间被启动。具体而言,由于数据依赖关系被量化,可以保证下游任务不会被过早启动,从而避免资源的潜在浪费。另一方,还可以保证下游任务不会过晚启动,从而避免作业处理时间的延长。
[0023]方法100在步骤S102之后结束。
[0024]下面参考图2,其示出了根据本发明另一示例性实施例的作业并行处理方法200的流程图。方法200可以被视为上文描述的方法100的一种具体实现。
[0025]在方法200开始之后,在步骤S201获取上游任务的执行状态。如下文详述的,获取的执行状态将在定量确定上游任务与下游任务的数据依赖关系中被使用。这里的上游任务执行状态可以包括与上游任务的执行有关的任何信息,例如用于执行上游任务的节点的计算能力、作业本身的数据规模、输入数据的量、输出数据的量、数据生成率、当前执行进度、资源竞争情况等等。这些仅仅是示例,并非意在限制本发明的范围。
[0026]特别地,在某些实施例中,在步骤S201处获取的上游任务执行状态可以包括上游任务的剩余执行时间的估计。具体而言,可以首先计算上游任务资源槽为单位的平均执行速度Savg,并且使用该平均执行速度作为上游任务的其余部分的估计执行速度。此外,还可以获取上游任务将要处理的数据量,记为Dm。剩余数据量Dm例如可以通过从待处理的总数据量中减去已经由上游任务处理的数据量而获取。在此基础上,可以如下估计上游任务的剩余执行时间Tm:(假设可供执行上游任务的节点使用的计算资源的数量,以资源槽为单位的情况下,为R个,)
[0027]Trem = Drem/(Savg*R)
[0028]在某些实施例中,在估计上游任务的剩余执行时间时,还可以将上游任务的资源竞争情况纳入考虑。例如,假设一个上游任务获取所需资源的概率为Pm。此时,上面描述的用于估计上游任务剩余执行时间的公式可被进一步细化为:
[0029]Trem = Drem/ (Savg* (R*PJ)
[0030]接下来,方法200进行到步骤S202,在此获取上游任务产生的中间数据向下游任务的传输信息。如本领域技术人员知道的,上游任务所产生的中间文件需要借助于特定的介质(例如,网络、磁盘,等等)被传输给下游任务以作为输入,以便下游任务执行后续数据处理。可以理解,中间数据的传输将对下游任务的启动时间具有一定的影响。由此,根据本发明的实施例,在量化上游任务与下游任务之间的数据依赖关系时,与这种传输有关的信息被纳入考虑。
[0031]例如,根据本发明的某些实施例,在步骤S202获取的传输信息可以包括对中间数据被传输到下游任务所需的传输时间的估计。为此,可以首先计算上游任务的平均数据生成率(记为ER)。根据某些实施例,ER可以如下计算:
[0032]ER = Dcur/Dfin
[0033]其中Dfin是已由上游任务完成处理的输入数据的量,而Dcot是上游任务当前已产生的中间数据的量。
[0034]请注意,上文描述的仅仅是可以用来估计平均数据生成率ER的一个示例性实施例。备选地,在某些其他实施例中,可以采用来自数据库查询优化的标准技术来确定上游任务的平均数据生成率ER。例如,在MapReduce模型的映射任务中,对于那些预定义的函数(诸如连接、过滤等),可以使用分析成本公式来估计ER的值。对于其他预定义的映射函数,可以利用相同的MapReduce作业在输入数据集的某些样本上的调试运行来估计映射函数的数据选择性并由此计算ER。用于估计上游任务数据发射率ER的上述以及其他可选方式是本领域技术人员知道的,在此不再赘述。
[0035]接下来,可以通过如下方式来估计将由上游任务的中间数据的总量:
[0036]Di = D*ER
[0037]其中D是上游任务的总输入数据量,ER是上文描述的计算上游任务的平均数据生成率。
[0038]由此,中间数据在上游任务与下游任务之间的传输时间Ti可以利用如下公式来估计:
[0039]Ti = Di/ (N*S)
[0040]其中S是节点之间的平均数据传输带宽(例如,在利用网络传输的情况下是网络带宽),N是下游任务的总数(假设每个下游任务将消耗中间数据的总量的1/N)。
[0041]接下来,方法200进行到S203,在此至少部分地基于在步骤S201获取的上游任务执行状态和在步骤S203获取的中间数据传输信息,来定量地确定上游任务与下游任务之间的数据依赖关系。仅出于阐释之目的,仍然考虑上文描述的示例性实施例,其中上游任务执行状态包括上游任务的剩余执行时间Tm,而传输信息包括中间数据向下游任务的传输时间T”在这样的实施例中,确定数据依赖关系可以包括:根据上游任务的剩余执行时间与中间数据的传输时间之间的比较来表征数据依赖关系。例如,当Tm > Ti时,可以认为下游任务对上游任务仍然存在数据依赖性,由此可以确定不启动下游任务。反之,当Tm ( Ti时,可以认为下游任务对上游任务的数据依赖性已经消除,由此可以启动下游任务,这还将在下文详述。以此方式,与现有技术不同,上游任务与下游任务之间的数据依赖关系通过数值之间的比较和关系被定量地反映了出来。
[0042]接下来,方法200进行到步骤S204,在此基于步骤S203处定量确定的数据依赖关系来选择下游任务的启动时间。继续考虑上面描述的示例,根据某些实施例,传输时间凡可以在开始处理作业时计算。当然,也可以在随后的任何时间点更新T”上游任务的剩余执行时间Tm则可以在作业处理过程中被定期地计算。每当Tm被计算或更新时,可以判断以下定量关系(表示为不等式)是否成立:
[0043]Treffl > Ti
[0044]在作业的处理过程中,一旦发现上述不等式不再成立,S卩,上游任务的剩余执行时间变为小于或者等于中间数据向下游任务的传输时间,便可以立刻启动下游任务。下游任务的启动例如可以通过向资源调度器发送资源分配请求来完成,这是本领域技术人员所知道的,在此不再赘述。
[0045]根据本发明的某些实施例,在步骤S204处,对下游任务启动时间的选择还可以将下游任务的资源竞争情况纳入考虑。例如,可以根据执行下游任务的节点的数目和可用资源的量来估计下游节点获取执行其处理所需的资源要花费的时间,即下游节点的初始化时间(记为Tini)。在这些实施例中,在步骤S204处所考虑的不等式可以变为:
[0046]Treffl > TfTini
[0047]在作业的处理过程中,响应于上述不等式不成立,即上游任务的剩余执行时间小于或者等于中间数据的传输时间与下游节点的初始化时间之和,下游任务的执行将被启动。
[0048]过程200在步骤S204完成之后结束。
[0049]请注意,上文描述的以上游任务的剩余执行时间和中间数据传输时间为基础对数据依赖关系进行建模仅仅是示例性的,本发明的范围不限于此。例如,在某些备选实施例中,还可以根据上游任务待处理的输入数据的大小来量化数据依赖关系。又如,还可以根据上游任务生成的中间数据的量和已经在先前执行的下游任务中被处理的中间数据的量之间的比例来表征上下游之间的数据依赖关系。实际上,基于本发明所给出的启示,本领域技术人员可以想到任何适当的方式对上游任务与下游任务之间的数据依赖关系进行表征或建模。相应地,所有这些变形均落入本发明的范围之内。
[0050]下面参考图3,其示出了根据本发明一个示例性实施例的作业并行处理装置300的框图。如上所述,对待处理作业的处理至少包括在第一阶段中执行上游任务以及在随后的第二阶段中执行下游任务。
[0051]如图所示,装置300包括:确定单元301,被配置为定量地确定上游任务与下游任务之间的数据依赖关系;以及选择单元302,被配置为至少部分地基于数据依赖关系来选择下游任务的启动时间。
[0052]根据某些实施例,确定单元301可以包括:第一获取单元,被配置为获取上游任务的执行状态;以及第二获取单元,被配置为获取上游任务产生的中间数据向下游任务的传输信息。在这些实施例中,确定单元301可被进一步被配置为至少部分地基于执行状态和传输信息来确定数据依赖关系。另外,第一获取单元可以包括被配置为估计上游任务的剩余执行时间的单元。可选地,上游任务的剩余执行时间至少部分地基于上游任务阶段的资源竞争情况而被估计。相应地,第二获取单元包括被配置为估计中间数据被传输到下游任务所需的传输时间的单元。
[0053]根据某些实施例,确定单元301可以包括被配置为利用上游任务的剩余执行时间与中间数据的传输时间的比较来表征数据依赖关系的单元。可选地,选择单元302可以包括:被配置为响应于上游任务的剩余执行时间小于或等于中间数据的传输时间而启动下游任务的单元。
[0054]根据某些实施例,装置300还可以包括:估计单元,被配置为估计下游任务的资源竞争情况。在这些实施例中,下游任务的启动时间基于数据依赖关系和下游任务的资源竞争情况而被选择。
[0055]特别地,作为示例,待处理的作业可以基于映射化简MapReduce模型被处理。在这些实施例中,上游任务可以包括映射任务,而下游任务可以包括化简任务。
[0056]为清晰起见,在图3没有示出装置300包含的可选单元以及各个单元所包含的子单元。然而,应当理解,装置300对应于上文参考图1和图2描述的方法100和200的各个步骤。由此,上文参考图1和图2描述的所有特征同样适用于装置300,在此不再赘述。
[0057]应当理解,装置300可以利用各种方式实现。例如,在某些实施例中,装置300可以利用软件和/或固件来实现。例如,装置300可以被实现为包含在计算机可读介质上的计算机程序产品,其中的每个单元是通过计算机指令来实现其功能的程序模块。备选地或附加地,装置300可以部分地或者完全地基于硬件来实现。例如,装置300可被实现为集成电路(IC)芯片、专用集成电路(ASIC)或者片上系统(SOC)。现在已知或者将来开发的其他方式也是可行的,本发明的范围在此方面不受限制。
[0058]图4示出了适于用来实践本发明实施方式的计算机系统的示意性框图。如图4所示,计算机系统可以包括:CPU(中央处理单元)401、RAM(随机存取存储器)402、ROM(只读存储器)403、系统总线404、硬盘控制器405、键盘控制器406、串行接口控制器407、并行接口控制器408、显示控制器409、硬盘410、键盘411、串行外部设备412、并行外部设备413和显示器414。在这些设备中,与系统总线404耦合的有CPU401、RAM402、R0M403、硬盘控制器405、键盘控制器406、串行控制器407、并行控制器408和显示控制器409。硬盘410与硬盘控制器405耦合,键盘411与键盘控制器406耦合,串行外部设备412与串行接口控制器407耦合,并行外部设备413与并行接口控制器408耦合,以及显示器414与显示控制器409耦合。应当理解,图4所述的结构框图仅仅为了示例的目的而示出的,而不是对本发明范围的限制。在某些情况下,可以根据具体情况而增加或者减少某些设备。
[0059]如上所述,装置300可以通过硬件实现,例如芯片、ASIC、S0C等。这些硬件可以集成在计算机系统400中。此外,本发明的实施例也可以通过计算机程序产品的形式实现。例如,本发明的方法均可通过计算机程序产品来实现。该计算机程序产品可以存储在例如图4所示的RAM404、R0M404、硬盘410和/或任何适当的存储介质中,或者通过网络从适当的位置下载到计算机系统400上。计算机程序产品可以包括计算机代码部分,其包括可由适当的处理设备(例如,图4中示出的CPU401)执行的程序指令。所述程序指令至少可以包括用于实现本发明方法的步骤的指令。
[0060]本发明的实施例可以通过硬件、软件或者软件和硬件的结合来实现。硬件部分可以利用专用逻辑来实现;软件部分可以存储在存储器中,由适当的指令执行系统,例如微处理器或者专用设计硬件来执行。本领域的普通技术人员可以理解上述的系统和方法可以使用计算机可执行指令和/或包含在处理器控制代码中来实现,例如在诸如磁盘、CD或DVD-ROM的载体介质、诸如只读存储器(固件)的可编程的存储器或者诸如光学或电子信号载体的数据载体上提供了这样的代码。本发明系统可以由诸如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用由各种类型的处理器执行的软件实现,也可以由上述硬件电路和软件的结合例如固件来实现。
[0061]应当注意,尽管在上文详细描述中提及了系统的若干装置或子装置,但是这种划分仅仅并非强制性的。实际上,根据本发明的实施例,上文描述的两个或更多装置的特征和功能可以在一个装置中具体化。反之,上文描述的一个装置的特征和功能可以进一步划分为由多个装置来具体化。
[0062]此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。相反,流程图中描绘的步骤可以改变执行顺序。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
[0063]虽然已经参考若干具体实施例描述了本发明,但是应该理解,本发明并不限于所公开的具体实施例。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。所附权利要求的范围符合最宽泛的解释,从而包含所有这样的修改及等同结构和功能。
【权利要求】
1.一种作业并行处理方法,所述作业的处理至少包括在第一阶段中执行上游任务以及在随后的第二阶段中执行下游任务,所述方法包括: 定量地确定所述上游任务与所述下游任务之间的数据依赖关系;以及 至少部分地基于所述数据依赖关系来选择所述下游任务的启动时间。
2.根据权利要求1所述的方法,其中确定所述数据依赖关系包括: 获取所述上游任务的执行状态; 获取所述上游任务产生的中间数据向下游任务的传输信息;以及 至少部分地基于所述执行状态和所述传输信息来确定所述数据依赖关系。
3.根据权利要求2所述的方法,其中获取所述上游任务的执行状态包括估计所述上游任务的剩余执行时间,以及 其中获取所述传输信息包括估计所述中间数据向所述下游任务的传输时间。
4.根据权利要求3所述的方法,其中所述上游任务的所述剩余执行时间至少部分地基于所述上游任务阶段的资源竞争情况而被估计。
5.根据权利要求3所述的方法,其中确定所述数据依赖关系包括: 利用所述上游任务的所述剩余执行时间与所述中间数据的所述传输时间的比较来表征所述数据依赖关系 。
6.根据权利要求5所述的方法,其中选择所述下游任务的所述启动时间包括: 响应于所述上游任务的所述剩余执行时间小于或等于所述中间数据的所述传输时间而启动所述下游任务。
7.根据权利要求1所述的方法,还包括: 估计所述下游任务的资源竞争情况, 其中所述下游任务的所述启动时间基于所述数据依赖关系和所述下游任务的所述资源竞争情况而被选择。
8.根据权利要求1-7任一项所述的方法,其中所述作业基于映射化简MapReduce模型而被处理,并且其中所述上游任务包括映射任务并且所述下游任务包括化简任务。
9.一种作业并行处理装置,所述作业的处理至少包括在第一阶段中执行上游任务以及在随后的第二阶段中执行下游任务,所述装置包括: 确定单元,被配置为定量地确定所述上游任务与所述下游任务之间的数据依赖关系;以及 选择单元,被配置为至少部分地基于所述数据依赖关系来选择所述下游任务的启动时间。
10.根据权利要求9所述的装置,其中所述确定单元包括: 第一获取单元,被配置为获取所述上游任务的执行状态;以及 第二获取单元,被配置为获取所述上游任务产生的中间数据向下游任务的传输信息,其中所述确定单元进一步被配置为至少部分地基于所述执行状态和所述传输信息来确定所述数据依赖关系。
11.根据权利要求10所述的装置,其中所述第一获取单元包括被配置为估计所述上游任务的剩余执行时间的单元,以及 其中所述第二获取单元包括被配置为估计所述中间数据向所述下游任务的传输时间的单元。
12.根据权利要求11所述的装置,其中所述上游任务的所述剩余执行时间至少部分地基于所述上游任务阶段的资源竞争情况而被估计。
13.根据权利要求11所述的装置,其中所述确定单元包括: 被配置为利用所述上游任务的所述剩余执行时间与所述中间数据的所述传输时间的比较来表征所述数据依赖关系的单元。
14.根据权利要求13所述的装置,其中所述选择单元包括: 被配置为响应于所述上游任务的所述剩余执行时间小于或等于所述中间数据的所述传输时间而启动所述下游任务的单元。
15.根据权利要求9所述的装置,还包括: 估计单元,被配置为估计所述下游任务的资源竞争情况, 其中所述下游任务的所述启动时间基于所述数据依赖关系和所述下游任务的所述资源竞争情况而被选择。
16.根据权利要求9-15任一项所述的装置,其中所述作业基于映射化简MapReduce模型被处理,并且其中所述 上游任务包括映射任务并且所述下游任务包括化简任务。
【文档编号】G06F9/38GK104035747SQ201310078391
【公开日】2014年9月10日 申请日期:2013年3月7日 优先权日:2013年3月7日
【发明者】向东, 曹逾, 陶隽 申请人:伊姆西公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1