CN102346710B - 一种基于动态插桩技术的数据包处理时延分析方法 - Google Patents
一种基于动态插桩技术的数据包处理时延分析方法 Download PDFInfo
- Publication number
- CN102346710B CN102346710B CN201110309258.6A CN201110309258A CN102346710B CN 102346710 B CN102346710 B CN 102346710B CN 201110309258 A CN201110309258 A CN 201110309258A CN 102346710 B CN102346710 B CN 102346710B
- Authority
- CN
- China
- Prior art keywords
- machine
- function
- packet
- kernel
- module
- 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.)
- Expired - Fee Related
Links
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
一种基于动态插桩技术的数据包处理时延分析方法,它有五大步骤:步骤一、收集内核符号表,获取可以进行插桩的函数列表;步骤二、确定需要进行插桩的函数列表;步骤三、部署插桩模块,给每个需要插桩的函数***一段代码,并将函数地址和函数调用时的时间戳添加到正在处理的数据包中;步骤四、启动发包和收包模块;步骤五、对步骤四中存储起来的数据包进行统计和分析,得出内核各个函数所消耗的时间。该方法开销小,具有很强的实时性和适应性,能够详尽的分析Linux内核处理数据包过程中每个函数所带来的开销及数据包在队列中等待的时延,可以为网络分析和优化提供强有力的依据,它在计算机技术领域里具有较好的实用价值和广阔地应用前景。
Description
(一)技术领域
本发明涉及一种基于动态插桩技术的数据包处理时延分析方法,具体涉及到一种运用基于动态插桩技术对数据包处理过程中操作***内核的各个函数的处理时延进行分析的方法,属于计算机技术领域。
(二)背景技术
近年来随着网络应用的不断丰富,网络分布越来越广,网络流量也越来越大,对于数据中心的网络性能提出了新的需求和挑战。为了应对这种挑战,数据中心有必要对网络结构进行调整,提高服务器的处理能力。然而,目前许多数据中心为了提高服务器的利用率、简化服务器的管理和维护、提高应用程序的可用性、降低成本,大多开始采用虚拟化技术。虚拟化技术有很多的优势,但也会引入额外的开销,尤其是在I/O虚拟化方面。在虚拟化环境下,数据包的处理过程更加复杂,传输路径更长,使得总体的网络性能很差。
为了对网络性能进行优化,就必须知道***的瓶颈在哪儿,***的哪些环节开销最大,然后有针对性的进行改进。目前有许多人在研究如何提高虚拟化环境下的网络性能,这些研究大多是从虚拟化的原理出发,试图降低虚拟化的开销,提高网络带宽,降低网络时延。然而,这些研究并没有对数据包的处理时延进行量化的分析,目前也没有工具能够自动的分析数据包从接收到发送整个处理过程中的各个函数的时延。本发明基于动态插桩技术,设计了一种能够自动分析操作***内核各个函数在数据包发送和接收过程中的时延的方法。
插桩技术是一种在软件测试中有广泛的运用,GCC编译器也提供相应的功能用于测试代码覆盖率,有些操作***也支持插桩技术,如Solaris的DTrace、Linux的Kprobe等。动态插桩技术则更近一步,能够在程序运行的时候动态的将一段代码***到程序的某个位置用于收集信息或改变程序的行为,而不需要对原程序作任何修改。本发明就是基于动态插桩技术对操作***数据包处理时延进行分析的。
(三)发明内容
1、目的
本发明的目的是提供一种基于动态插桩技术的数据包处理时延分析方法,它能够统计出数据包处理过程中操作***内核的每个函数所消耗的时间以及在队列中排队等待的时间,为进一步的网络优化提供了强有力的依据。
2、技术方案
本发明的技术方案如下:一种基于动态插桩技术的数据包处理时延分析方法,其总体的框架如图1所示,图1中的机器可以是真实的计算机,也可以是通过虚拟化软件虚拟出来的虚拟计算机,图1中的机器1和机器2主要是从功能的角度来划分的,它们可以同时部署在同一个物理机上。机器1的主要功能是提供控制界面,分析并输出结果,机器1上部署了发包模块和统计模块,机器2的主要功能是收集信息,并将收集到的信息反馈给机器1,机器2上部署了插桩模块和收包模块。具体流程如图2所示,本发明一种基于动态插桩技术的数据包处理时延分析方法,该方法包括以下步骤:
步骤201.在机器2上收集内核符号表,获取内核函数与地址的对应关系,输出可以进行插桩的函数列表,并传递给机器1。
步骤202.在机器1上根据优化的目标,确定需要分析的函数,输出需要插桩的函数列表,并传递给机器2。
步骤203.将步骤202所确定的函数列表传递到机器2上,机器2运用动态插桩技术在需要监控的函数的头部***一段代码,该代码会将函数的地址和当前的时间戳写入数据包。
步骤204.启动收包模块和发包模块。机器1开始发送数据包,数据包传递到机器2的内核之后,若检测到数据包的目的地是机器2的收包模块的话,就将当前正在执行的函数的地址和时间戳写入数据包。当数据包到达机器2的收包模块时,收包模块将数据包返还给机器1,机器1的发包模块将来自机器2的数据包以文件的形式存储起来。
步骤205.机器1统计所有来自机器2接收模块的数据包,计算并输出统计结果。
其中,步骤201在机器2上收集内核符号表是要收集正在运行的内核的符号表,内核符号表中记录了内核函数和变量在内存中的地址,在Linux***下,通过读取/boot目录下与内核版本相对应的System.map或直接读取/proc/ksyms就可以获取到内核符号表了,此外,还可以通过分析内核文件或内核调试信息来获得的内核符号表。由于内核符号表中不仅记录了内核函数的在内存中的地址,还记录了内核变量的地址,因此需要对读取到的内核符号表进行分析,过滤掉那些非函数的内核符号,输出所有内核函数的符号表,这些函数就是可以进行插桩的函数列表,确定之后,将其传递给机器1。
其中,步骤202在机器1上根据优化的目标,确定需要分析的函数,输出需要插桩的函数列表。当机器1收到机器2的可以插桩的函数列表之后,可以手动或自动确定需要插桩的函数列表。手动确定需要对于内核处理过程比较熟悉,知道内核会调用哪些函数来处理数据包,然后手动的将需要插桩的函数写入文件形成需要插桩的函数列表。除了手动确定外,也可以写些脚步通过名字匹配的方法来自动确定。当然手动确定可以减少插桩的数量,可以降低插桩对网络性能的影响。
其中,步骤203首先要将步骤202所确定的函数列表传递到机器2上,然后在机器上2运用动态插桩技术在所有需要监控的函数的头部***一小段代码,***完成之后,内核执行该函数时会首先执行***的代码,接着执行原函数。***的代码的功能是对当前正在处理的数据包进行检测,若满足某些条件则将当前正在执行的函数的地址和当前的时间戳添加数据包后面。
其中,步骤204会在部署好插桩模块之后激活机器1的发包模块和机器2的收包模块。机器1的发包模块和机器2的收包模块都是运行在用户态下的应用程序。机器1的发包模块被激活之后会根据用户的配置以一定的速率向机器2的收包模块发送数据包,数据包的结构如图3所示,数据包包含两部分信息,元信息部分记录了数据包总共的大小、数据信息的偏移量及目前需要***信息的偏移量等信息;数据信息则相对简单,就是一个函数地址与时间戳的表格,插桩模块每次都将函数地址和时间戳写入到数据信息的末尾。机器1的发包模块发送的数据包的数据信息部分用零填充,数据包到达机器2之后,位于内核中的插桩模块会将需要监控的函数的地址及内核调用该函数时的时间戳写入数据包的数据信息部分,并修改数据包的元信息。当数据包传递到收包模块之后,收包模块不会修改数据包,而是直接将数据包返还给机器1的发包模块。
其中,步骤205机器1的发包模块接收到机器2返还的数据包之后,先将数据包以文件的形式存储起来,结束后再结合步骤201收集到的内核符号表,通过分析数据包的数据信息,可以计算出内核在数据包处理过程中调用了哪些函数,以及各个函数所消耗的时间。如果对于内核的数据包处理过程比较熟悉的话,通过查看入队列和出队列的时间戳,还能够分析出数据包在处理过程中的排队时延。
3、优点及功效
本发明一种基于动态插桩技术的数据包处理时延分析方法,它与现有技术相比,其主要的优点是:(1)本发明能够全程的跟踪数据包的处理过程,详细的分析数据包接收和发送过程中每个函数所消耗的时间,以及在队列中排队所消耗的时间。(2)由于数据包的发送速率是用户可控的,通过调节数据包的发送速率能够有效的控制插桩模块所带来的开销,因此总的***开销很小。(3)本发明具有很好的实时性和适应性,实时性是指数据包时延分析的结果反映了当前环境下的数据包处理时延的情况。然而随着网络负载的变化,数据包的时延也会发生很大的变化,由于本发明所带来的***开销小,因此即使在重网络负载的情况下也能够使用,所以具有很强的适应性。
(四)附图说明
图1本发明的数据包处理时延分析方法的总体框架示意图
图2本发明的数据包处理时延分析方法的流程示意图
图3本发明的数据包处理时延分析方法使用的数据包的结构示意图
图中符号说明如下:
201-205 步骤序号。
(五)具体实施方式
为使本发明的目的、技术方案和优点表达得更加清楚明白,下面结合附图及具体实施例对本发明再作进一步详细的说明。
本发明的主要思想是运用动态插桩技术收集并记录内核中与数据包处理相关的函数的地址及被调用的时间戳信息,再通过对这些信息的统计和分析得出内核各个函数在数据包发送和接收过程中所消耗的时间及在队列中排队所消耗的时间,从而为网络优化提供详细的分析数据。
本发明设置两台机器,即机器1和机器2,两台机器都是真实的计算机,具体型号是联想万全R510服务器,如图1所示,机器1和机器2主要是从功能的角度来划分的,它们可以同时部署在同一个物理机上。机器1的主要功能是提供控制界面,分析并输出结果,机器1上部署了发包模块和统计模块,机器2的主要功能是收集信息,并将收集到的信息反馈给机器1,机器2上部署了插桩模块和收包模块。
本发明在软件上要求各个机器采用Linux操作***,而且机器2上的Linux操作***的内核应该是2.6.18或其后的版本,以便支持kprobe技术。具体的实施大致分成三个阶段来完成,第一个阶段是初始化,主要的工作是获取内核符号表,确定需要插桩的函数;第二个阶段是在机器2上部署插桩模块,由于收集和记录函数地址和时间戳;第三个阶段是开始发送和接收数据包,并对结果进行统计和分析,得出结果。
下面以一实例进行说明,如图2所示,本发明一种基于动态插桩技术的数据包处理时延分析方法,该方法具体步骤如下:
步骤201:收集机器2的内核符号表,收集的方法是先查看/proc/ksyms是否存在,如果存在,则将其内容拷贝到一个文件,然后传递给机器1即可。如果不存在则查看/boot目录下是否存在与正在运行的内核匹配的System.map文件,如果有则将其传递给机器1,如果没有则需要分析内核文件或内核调试信息来获得的,如果还是没办法获得则收集内核符号信息失败。获取到内核符号表之后还需要过滤掉那些非函数的内核符号信息,从而得到可以插桩的函数列表。
步骤202:若步骤201成功的收集到了机器2的内核符号信息,则可以得到一个可以插桩的函数列表,然后通过手动或自动的方法确定需要插桩的函数列表。
步骤203:确定了需要插桩的函数之后,将那些需要插桩的函数传递给机器2,机器2获得需要插桩的函数列表之后,接下来的工作就是在那些需要插桩的函数的头部添加一段代码,用来记录函数的地址和函数被调用时的时间戳。这需要借助于Linux提供的kprobe机制,kprobe机制能够在内核的任何位置***一段代码用来收集内核相关的信息。为了部署的方便可以采用SystemTap,SystemTap是基于kprobe的一种脚本语言,它能够将脚本翻译成一个C文件,并编译成内核模块,动态的添加到内核中。使用时只需要给它提供函数名称和需要***的代码段即可。因此,获取到需要插桩的函数列表之后,通过SystemTap能够很容易的完成插桩的工作。
步骤204:启动收包模块和发包模块。完成插桩工作之后,就可以启动机器2的收包模块了,它会在某个端口上等待来自于机器1的数据包。启动收包模块之后,在机器1上启动发包模块,机器1会以一定的速率给机器2发送数据包,同时也接收机器2返回数据包,并将数据包以文件的形式存储起来,以便后面可以继续统计和分析。
步骤205:步骤204中将接收到机器2的数据包以文件的存储起来了,本步骤主要就是读取该文件,统计和分析出各个函数的所消耗的时间,并输出结果。
图3是本发明的数据包处理时延分析方法使用的数据包的结构示意图
最后所应说明的是:以上实施例仅用以说明而非限制本发明的技术方案,尽管参照上述实施例对本发明进行了详细说明,本领域的普通技术人员应当理解:依然可以对本发明进行修改或者等同替换,而不脱离本发明的精神和范围的任何修改或局部替换,其均应涵盖在本发明的权利要求范围当中。
Claims (1)
1.一种基于动态插桩技术的数据包处理时延分析方法,其特征在于:该方法具体步骤如下:
步骤一.在机器2上收集内核符号表,获取内核函数与地址的对应关系,输出能进行插桩的函数列表,并传递给机器1;
步骤二.在机器1上根据优化的目标,确定需要分析的函数,输出需要插桩的函数列表,并传递给机器2;
步骤三.将步骤二所确定的函数列表传递到机器2上,机器2运用动态插桩技术在需要监控的函数的头部***一段代码,该代码会将函数的地址和当前的时间戳写入数据包;
步骤四.启动收包模块和发包模块;机器1开始发送数据包,数据包传递到机器2的内核之后,若检测到数据包的目的地是机器2的收包模块的话,就将当前正在执行的函数的地址和时间戳写入数据包;当数据包到达机器2的收包模块时,收包模块将数据包返还给机器1,机器1的发包模块将来自机器2的数据包以文件的形式存储起来;
步骤五.机器1统计所有来自机器2接收模块的数据包,计算并输出统计结果;
其中,所述的机器1和机器2是真实的计算机,或是通过虚拟化软件虚拟出来的虚拟计算机,它们同时部署在同一个物理机上;机器1的功能是提供控制界面,分析并输出结果,机器1上部署了发包模块和统计模块,机器2的功能是收集信息,并将收集到的信息反馈给机器1,机器2上部署了插桩模块和收包模块;
其中,步骤一中所述的“在机器2上收集内核符号表”是指:收集正在运行的内核的符号表,内核符号表中记录了内核函数和变量在内存中的地址,在Linux***下,通过读取/boot目录下与内核版本相对应的System.map或直接读取/proc/ksyms就获取到内核符号表,此外,还能通过分析内核文件或内核调试信息来获得的内核符号表;由于内核符号表中不仅记录了内核函数的在内存中的地址,还记录了内核变量的地址,因此需要对读取到的内核符号表进行分析,过滤掉那些非函数的内核符号,输出所有内核函数的符号表,这些函数就是能进行插桩的函数列表,确定之后,将其传递给机器1;
其中,步骤二中所述的“在机器1上根据优化的目标,确定需要分析的函数,输出需要插桩的函数列表,并传递给机器2”是指:当机器1收到机器2的能插桩的函数列表之后,手动或自动确定需要插桩的函数列表;手动确定需要对于内核处理过程熟悉,知道内核会调用哪些函数来处理数据包,然后手动的将需要插桩的函数写入文件形成需要插桩的函数列表;除了手动确定外,也能写些脚步通过名字匹配的方法来自动确定;
其中,步骤三中所述的“将步骤二所确定的函数列表传递到机器2上,机器2运用动态插桩技术在需要监控的函数的头部***一段代码,该代码会将函数的地址和当前的时间戳写入数据包”是指:需要监控的函数的头部***一段代码完成之后,内核执行该函数时会首先执行***的代码,接着执行原函数;***的代码的功能是对当前正在处理的数据包进行检测,若满足条件则将当前正在执行的函数的地址和当前的时间戳添加数据包后面;
其中,步骤四中所述的“启动收包模块和发包模块”是指:机器1的发包模块和机器2的收包模块都是运行在用户态下的应用程序;机器1的发包模块被激活之后会根据用户的配置以一定的速率向机器2的收包模块发送数据包,数据包包含两部分信息,元信息部分记录了数据包总共的大小、数据信息的偏移量及目前需要***信息的偏移量;数据信息就是一个函数地址与时间戳的表格,插桩模块每次都将函数地址和时间戳写入到数据信息的末尾;机器1的发包模块发送的数据包的数据信息部分用零填充,数据包到达机器2之后,位于内核中的插桩模块会将需要监控的函数的地址及内核调用该函数时的时间戳写入数据包的数据信息部分,并修改数据包的元信息;当数据包传递到收包模块之后,收包模块不会修改数据包,而是直接将数据包返还给机器1的发包模块;
其中,步骤五中所述的“机器1统计所有来自机器2接收模块的数据包,计算并输出统计结果”是指:机器1的发包模块接收到机器2返还的数据包之后,先将数据包以文件的形式存储起来,结束后再结合步骤二收集到的内核符号表,通过分析数据包的数据信息,计算出内核在数据包处理过程中调用了哪些函数,以及各个函数所消耗的时间,若对内核的数据包处理过程熟悉的话,通过查看入队列和出队列的时间戳,还能够分析出数据包在处理过程中的排队时延。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110309258.6A CN102346710B (zh) | 2011-10-13 | 2011-10-13 | 一种基于动态插桩技术的数据包处理时延分析方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110309258.6A CN102346710B (zh) | 2011-10-13 | 2011-10-13 | 一种基于动态插桩技术的数据包处理时延分析方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102346710A CN102346710A (zh) | 2012-02-08 |
CN102346710B true CN102346710B (zh) | 2015-04-29 |
Family
ID=45545404
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110309258.6A Expired - Fee Related CN102346710B (zh) | 2011-10-13 | 2011-10-13 | 一种基于动态插桩技术的数据包处理时延分析方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102346710B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9063759B2 (en) | 2012-03-28 | 2015-06-23 | International Business Machines Corporation | Optimizing subroutine calls based on architecture level of called subroutine |
CN103049378A (zh) * | 2012-12-18 | 2013-04-17 | 惠州市亿能电子有限公司 | 一种无需仿真器的程序调试方法 |
CN103365775B (zh) * | 2013-06-21 | 2016-04-06 | 北京大学 | 基于内部状态检查的单元测试方法 |
CN109101416B (zh) * | 2014-09-28 | 2022-01-14 | 华为技术有限公司 | 一种内核故障注入方法及电子设备 |
CN104504333B (zh) * | 2014-11-25 | 2018-03-06 | 武汉安天信息技术有限责任公司 | Elf文件中的恶意代码检测方法及装置 |
CN104680042B (zh) * | 2015-03-10 | 2017-10-24 | 北京深思数盾科技股份有限公司 | 一种虚拟机性能分析的方法及*** |
CN106155897B (zh) * | 2015-04-16 | 2020-12-08 | 腾讯科技(深圳)有限公司 | 一种业务处理方法及装置 |
CN105577480B (zh) * | 2016-02-01 | 2019-04-12 | 新浪网技术(中国)有限公司 | 一种网络连接性能的监测方法及装置 |
CN106649063B (zh) * | 2016-11-22 | 2020-11-17 | 腾讯科技(深圳)有限公司 | 用于监测程序运行时耗时数据的方法及*** |
CN108664372A (zh) * | 2018-05-08 | 2018-10-16 | 平安科技(深圳)有限公司 | 测试过程的监控装置、方法及计算机可读存储介质 |
CN109558325A (zh) * | 2018-12-03 | 2019-04-02 | 浪潮电子信息产业股份有限公司 | 一种时延统计方法、装置和计算机可读存储介质 |
CN110109673B (zh) * | 2019-04-25 | 2020-10-30 | 武汉大学 | 一种基于北斗亚纳秒级高精度授时的编译器检测装置及方法 |
CN111813677B (zh) * | 2020-07-09 | 2024-06-25 | 杭州优万科技有限公司 | 一种嵌入式设备上的性能调试方法 |
CN112363900B (zh) * | 2020-11-16 | 2022-09-27 | 中国科学院计算技术研究所 | 一种基于插桩的主机内容器网络性能分析方法及*** |
CN112416794B (zh) * | 2020-12-03 | 2023-11-21 | 平安银行股份有限公司 | 代码覆盖率的处理方法、装置、设备及存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101465863A (zh) * | 2009-01-14 | 2009-06-24 | 北京航空航天大学 | 一种内核虚拟机环境下高效网络i/o的实现方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004295162A (ja) * | 2003-02-04 | 2004-10-21 | I-Net Device Co Ltd | 遠隔監視システム |
CN102460408B (zh) * | 2009-06-01 | 2014-08-06 | 惠普开发有限公司 | 用于收集应用性能数据的***和方法 |
-
2011
- 2011-10-13 CN CN201110309258.6A patent/CN102346710B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101465863A (zh) * | 2009-01-14 | 2009-06-24 | 北京航空航天大学 | 一种内核虚拟机环境下高效网络i/o的实现方法 |
Non-Patent Citations (1)
Title |
---|
动态跟踪***的性能模型研究及基于动态跟踪技术的机群监测软件的设计与实现;陶捷;《中国优秀博士学位论文全文数据库》;20090315;第46页第4.4.1节-第51页第4.5节、第115页第7.6.5节-第123页第7.7.4节 * |
Also Published As
Publication number | Publication date |
---|---|
CN102346710A (zh) | 2012-02-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102346710B (zh) | 一种基于动态插桩技术的数据包处理时延分析方法 | |
Argollo et al. | COTSon: infrastructure for full system simulation | |
CN101465863B (zh) | 一种内核虚拟机环境下高效网络i/o的实现方法 | |
CN100451989C (zh) | 软件测试***及测试方法 | |
DE112018004464T5 (de) | Technologien zur Programmierung flexibler, beschleunigter Netzwerk-Pipelines unter Verwendung von eBPF | |
CN104102543A (zh) | 一种云计算环境中负载调整的方法和装置 | |
García-Dorado et al. | High-performance network traffic processing systems using commodity hardware | |
Minkenberg et al. | Trace-driven co-simulation of high-performance computing systems using OMNeT++ | |
CN101630285A (zh) | 一种应用于嵌入式***的软件性能测试方法 | |
CN102567203A (zh) | 一种测试分布式文件***性能的方法及*** | |
CN102981944B (zh) | 一种基于文件***的日志存储方法 | |
CN104077328B (zh) | MapReduce分布式***的作业诊断方法及设备 | |
CN102929613A (zh) | 操作***的调优装置和方法 | |
CN102831046A (zh) | 通讯***中一种软件性能采集的方法及装置 | |
CN103856337A (zh) | 资源占用率获取方法、提供方法、***及服务器 | |
CN107817401A (zh) | 一种用电信息采集***的压力测试方法及装置 | |
CN106970841A (zh) | 一种基于云计算的资源限制及动态调整方法 | |
CN102916848A (zh) | 一种基于脚本技术的以太网接口设备的自动测试方法 | |
CN102571474B (zh) | 虚拟化的Radius测试***及方法 | |
CN103645935A (zh) | 一种国产环境下jvm参数调整装置和方法 | |
CN109213566B (zh) | 一种虚拟机迁移的方法、装置和设备 | |
CN103955394A (zh) | 一种基于推迟提交的gpu虚拟化优化方法 | |
CN106528411A (zh) | 覆盖率检测方法、装置和设备 | |
Ahn et al. | Overcoming scalability challenges for tool daemon launching | |
CN110891083A (zh) | 一种Gaia中支持多作业并行执行的代理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150429 Termination date: 20181013 |