CN105207953B - 一种用户流量的生成方法及装置 - Google Patents
一种用户流量的生成方法及装置 Download PDFInfo
- Publication number
- CN105207953B CN105207953B CN201510644528.7A CN201510644528A CN105207953B CN 105207953 B CN105207953 B CN 105207953B CN 201510644528 A CN201510644528 A CN 201510644528A CN 105207953 B CN105207953 B CN 105207953B
- Authority
- CN
- China
- Prior art keywords
- user
- message
- caching
- index information
- customer flow
- 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.)
- Active
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9005—Buffering arrangements using dynamic buffer space allocation
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/21—Flow control; Congestion control using leaky-bucket
-
- 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/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L43/00—Arrangements for monitoring or testing data switching networks
- H04L43/50—Testing arrangements
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/901—Buffering arrangements using storage descriptor, e.g. read or write pointers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
- G06F2212/1021—Hit rate improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/6026—Prefetching based on access pattern detection, e.g. stride based prefetch
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9042—Separate storage for different parts of the packet, e.g. header and payload
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明实施例公开了一种用户流量的生成方法及装置,该方法包括接收用户流量生成指令,根据该用户流量生成指令以及现场可编程门阵列FPGA的第一片内静态随机存取存储器SRAM中预先存储的索引信息,对动态随机存取存储器DRAM中存储的且该索引信息所指示的用户报文执行预读取操作与缓存操作,并根据该缓存操作缓存的用户报文生成用户流量,其中,第一片内SRAM用于存储需要用到的所有用户报文的索引信息,DRAM用于存储所有用户报文。实施本发明实施例能够实现海量用户报文的存储以及线速生成用户流量。
Description
技术领域
本发明涉及网络测试技术领域,具体涉及一种用户流量的生成方法及装置。
背景技术
当前,网络设备的转发性能可以通过如图1所示的测试装置来完成,其中,图1所示的测试装置由中央处理器(CPU,Central Processing Unit)、流量模拟装置、待检测网络设备以及流量校验装置组成,且该流量模拟装置包括用于控制流量发包参数(如发包时间、发包数量以及发包间隔等)的流量控制模块、用于存储用户报文的静态随机存取存储器(SRAM,Static Random Access Memory)以及用于发起流量的流量发起模块。其基本原理为流量模拟装置在CPU的控制下发出用户流量,待检测网络设备将流量模拟装置发出的用户流量转发至流量校验装置,流量校验装置对待检测网络设备转发的用户流量进行分析、校验与统计,进而分析待检测网络设备的转发性能。可见,流量模拟装置发出的用户流量在网络设备的转发性能测试中显得尤为重要。
在以太网二三层测试中,图1所示的测试装置中的流量模拟装置在CPU的控制下通常通过基于现场可编程门阵列(FPGA,Field Programmable Gate Array)的专有硬件的生成方式发出用户流量,且其原理示意图如图2所示,在用户流量生成前,CPU将用户报文配置信息存储于片内SRAM中并将用户报文头部信息存储到SRAM(片内SRAM或片外SRAM)中,且在用户流量生成阶段循环的读取SRAM内存储的头部信息生成用户流量。该基于FPGA的专有硬件的生成方式能够实现超高速带宽流量生成与用户流量的精准控制,但是,由于用户报文的数量受限于SRAM空间的大小,这使得基于FPGA的专有硬件的生成方式无法实现海量用户报文的存储且无法线速生成用户流量。
发明内容
本发明实施例公开了一种用户流量的生成方法及装置,能够实现海量用户报文的存储以及线速生成用户流量。
本发明实施例第一方面公开了一种用户流量的生成方法,所述方法包括:
接收用户流量生成指令;
根据所述用户流量生成指令以及现场可编程门阵列FPGA的第一片内静态随机存取存储器SRAM中预先存储的索引信息,对动态随机存取存储器DRAM中存储的且所述索引信息所指示的用户报文执行预读取操作与缓存操作,所述第一片内SRAM用于存储需要用到的所有用户报文的索引信息,所述DRAM用于存储所述所有用户报文;
根据所述缓存操作缓存的用户报文生成用户流量。
在本发明实施例第一方面的第一种可能的实现方式中,所述方法还包括:
根据业务类型对所述所有用户报文进行分组,以获得多个用户报文组;
根据访问路径对每个所述用户报文组进行分组,以获得该用户报文组的多个子用户报文组;
将每个所述用户报文组的每个所述子用户报文组中的每个用户报文依次存储在所述DRAM中,并根据所述所有用户报文在所述DRAM中的存储位置生成所述所有用户报文的索引信息;
将所述所有用户报文的索引信息存储在所述第一片内SRAM中。
结合本发明实施例第一方面或本发明实施例第一方面的第一种可能的实现方式,在本发明实施例第一方面的第二种可能的实现反式中,所述根据所述缓存操作缓存的用户报文生成用户流量之前,所述方法还包括:
判断所述缓存操作缓存的用户报文的数量是否达到预设数量阈值;
当达到所述预设数量阈值时,执行所述根据所述缓存操作缓存的用户报文生成用户流量的操作;
当未达到所述预设数量阈值时,执行所述根据所述用户流量生成指令以及现场可编程门阵列FPGA的第一片内静态随机存取存储器SRAM中预先存储的索引信息,对动态随机存取存储器DRAM中存储的且所述索引信息所指示的用户报文执行预读取操作与缓存操作,直至所述缓存操作缓存的用户报文的数量达到所述预设数量阈值。
结合本发明实施例第一方面、本发明实施例第一方面的第一种可能的实现方式或本发明实施例第一方面的第二种可能的实现方式,在本发明实施例第一方面的第三种可能的实现方式中,所述根据所述用户流量生成指令以及现场可编程门阵列FPGA的第一片内静态随机存取存储器SRAM中预先存储的索引信息,对动态随机存取存储器DRAM中存储的且所述索引信息所指示的用户报文执行预读取操作与缓存操作,包括:
根据所述用户流量生成指令以及FPGA的第一片内SRAM中预先存储的索引信息,读取DRAM中存储的且所述索引信息所指示的用户报文,并将读取到的所述用户报文缓存到所述FPGA的第二片内SRAM中。
结合本发明实施例第一方面的第三种可能的实现方式,在本发明实施例第一方面的第四种可能的实现方式中,所述将所述所有用户报文的索引信息存储在所述第一片内SRAM中之前,所述方法还包括:
对所述第一片内SRAM以及所述第二片内SRAM执行清零操作。
本发明实施例第二方面公开了一种用户流量的生成装置,所述装置包括通信模块、处理模块以及第一生成模块,其中:
所述通信模块,用于接收用户流量生成指令;
所述处理模块,用于根据所述用户流量生成指令以及FPGA的第一片内SRAM中预先存储的索引信息,对DRAM中存储的且所述索引信息所指示的用户报文执行预读取操作与缓存操作,所述第一片内SRAM用于存储需要用到的所有用户报文的索引信息,所述DRAM用于存储所述所有用户报文;
所述第一生成模块,用于根据所述缓存操作缓存的用户报文生成用户流量。
在本发明实施例第二方面的第一种可能的实现方式中,所述装置还包括分组模块、存储模块以及第二生成模块,其中:
所述分组模块,用于根据业务类型对所述所有用户报文进行分组以获得多个用户报文组,并根据访问路径对每个所述用户报文组进行分组以获得该用户报文组的多个子用户报文组;
所述存储模块,用于将每个所述用户报文组的每个所述子用户报文组中的每个用户报文依次存储在所述DRAM中;
所述第二生成模块,还用于根据所述所有用户报文在所述DRAM中的存储位置生成所述所有用户报文的索引信息;
所述存储模块,还用于将所述所有用户报文的索引信息存储在所述第一片内SRAM中。
结合本发明实施例第二方面或本发明实施例第二方面的第一种可能的实现方式,在本发明实施例第二方面的第二种可能的实现反式中,所述装置还包括判断模块,其中:
所述判断模块,用于在所述第一生成模块根据所述缓存操作缓存的用户报文生成用户流量之前,判断所述缓存操作缓存的用户报文的数量是否达到预设数量阈值,当达到所述预设数量阈值时,触发所述第一生成模块执行所述根据所述缓存操作缓存的用户报文生成用户流量的操作,当未达到所述预设数量阈值时,触发所述处理模块执行所述根据所述用户流量生成指令以及FPGA的第一片内SRAM中预先存储的索引信息,对DRAM中存储的且所述索引信息所指示的用户报文执行预读取操作与缓存操作。
结合本发明实施例第二方面、本发明实施例第二方面的第一种可能的实现方式或本发明实施例第二方面的第二种可能的实现方式,在本发明实施例第二方面的第三种可能的实现方式中,所述处理模块包括读取子模块以及缓存子模块,其中:
所述读取子模块,用于根据所述用户流量生成指令以及所述第一片内SRAM中预先存储的索引信息,读取所述DRAM中存储的且所述索引信息所指示的用户报文;
所述缓存子模块,用于将所述读取子模块读取到的所述用户报文缓存到所述第二片内SRAM中。
结合本发明实施例第二方面的第三种可能的实现方式,在本发明实施例第二方面的第四种可能的实现方式中,所述装置还包括清零模块,其中:
所述清零模块,用于在所述缓存子模块将所述读取子模块读取到的所述用户报文缓存到所述第二片内SRAM中之前,对所述第一片内SRAM以及所述第二片内SRAM执行清零操作。
本发明实施例中,接收用户流量生成指令,根据该用户流量生成指令以及现场可编程门阵列FPGA的第一片内静态随机存取存储器SRAM中预先存储的索引信息,对动态随机存取存储器DRAM中存储的且该索引信息所指示的用户报文执行预读取操作与缓存操作,并根据该缓存操作缓存的用户报文生成用户流量,其中,第一片内SRAM用于存储需要用到的所有用户报文的索引信息,DRAM用于存储所有用户报文。可见,实施本发明实施例能够通过DRAM实现海量用户报文的存储,且通过对存储的用户报文的预读取操作与缓存操作实现了线速生成用户流量。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是现有技术公开的一种网络设备的转发性能的测试装置的结构示意图;
图2是现有技术公开的一种用户流量生成的原理示意图;
图3是本发明实施例公开的一种用户流量的生成方法的流程示意图;
图4是本发明实施例公开的另一种用户流量的生成方法的流程示意图;
图5是本发明实施例公开的又一种用户流量的生成方法的流程示意图;
图6是本发明实施例公开的一种用户报文的分组示意图;
图7是本发明实施例公开的一种用户报文缓存中缓存的用户报文数量与时间的对应关系图;
图8是本发明实施例公开的一种用户流量的生成装置的结构示意图;
图9是本发明实施例公开的另一种用户流量的生成装置的结构示意图;
图10是本发明实施例公开的又一种用户流量的生成装置的结构示意图;
图11是本发明实施例公开的又一种用户流量的生成装置的结构示意图;
图12是本发明实施例公开的又一种用户流量的生成装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例公开了一种用户流量的生成方法及装置,能够通过动态随机存取存储器(DRAM,Dynamic Random Access Memory)实现海量用户报文的存储,且通过对存储的用户报文的预读取操作与缓存操作实现了线速生成用户流量。以下分别进行详细说明。
请参阅图3,图3是本发明实施例公开的一种用户流量的生成方法的流程示意图。如图3所示,该用户流量的生成方法可以包括以下步骤:
S301、接收用户流量生成指令。
本发明实施例中,该用户流量生成指令用于使能用户流量生成,且该用户流量生成指令可以是测试人员手动输入的,也可以是由CPU产生的,本发明实施例不做限定。
S302、根据上述用户流量生成指令以及现场可编程门阵列FPGA的第一片内静态随机存取存储器SRAM中预先存储的索引信息,对动态随机存取存储器DRAM中存储的且该索引信息所指示的用户报文执行预读取操作与缓存操作。
本发明实施例中,FPGA的第一片内SRAM用于存储需要用到的所有用户报文的索引信息,且DRAM用于存储该需要用到的所有用户报文,可选的,DRAM可以具体用于以分组存储的形式存储该所有用户报文,即将该所有用户报文按照预设条件进行分组,并将分组后的用户报文按顺序存储在DRAM中。由于DRAM具有存储空间大且能够存储千万级用户的用户报文的优点,使用DRAM存储需要使用到的所有用户报文能够实现海量用户报文的存储,保证了模拟用户的规模,且节省了硬件成本。
本发明实施例中,对DRAM中存储的分组用户报文中上述第一片内SRAM中预先存储的索引信息所指示的用户报文执行预读取操作以及缓存操作,这样克服了DRAM访问带宽不确定的困难,能够高效的在固定的周期内从DRAM中读取用户报文,进而保证了用户流量的线速生成。
S303、根据上述缓存操作缓存的用户报文生成用户流量。
本发明实施例中,根据上述缓存操作缓存的用户报文生成用户流量可以包括:
根据上述缓存操作缓存的用户报文以及用户流量生成参数生成用户流量,其中,用户流量生成参数可以包括发包模式、发包个数以及用户带宽等,本发明实施例不做限定。
作为一种可选的实施方式,在执行步骤S301之前,还可以执行以下操作:
根据业务类型对上述所有用户报文进行分组,以获得多个用户报文组;
根据访问路径对每个用户报文组进行分组,以获得该用户报文组的多个子用户报文组;
将每个用户报文组的每个子用户报文组中的每个用户报文依次存储在上述DRAM中,并根据所有用户报文中每个用户报文在上述DRAM中的存储位置生成所有用户报文中每个用户报文的索引信息;
将所有用户报文的索引信息存储在上述第一片内SRAM中。
在该可选的实施方式中,对用户报文进行分组并按照分组顺序连续配置到DRAM中,将用户报文在DRAM中的索引信息(即存储位置信息)配置到第一片内SRAM中,以便调度用户报文。且可以具体由CPU执行对用户报文组的分组操作、对子用户报文组的分组操作、每个用户报文的存储操作、每个用户报文的索引信息的生成操作以及存储操作等,本发明实施例不作限定。举例来说,假设业务类型有ipv4业务类型以及ipv6业务类型,则可以根据业务类型获得两个用户报文组:User_ipv4以及User_ipv6,且访问路径有p01以及p02,则根据访问路径将用户报文组User_ipv4分为两个子用户报文组:User_ipv4_p01以及User_ipv4_p02,将用户报文组User_ipv6分为两个子用户报文组:User_ipv6_p01以及User_ipv6_p02,由于每个用户报文携带有标签等相关属性,则用户报文组User_ipv4的子用户报文组User_ipv4_p01中的用户报文有User_ipv4_p01_label0、User_ipv4_p01_label1、……、User_ipv4_p01_labeln-1以及User_ipv4_p01_labeln,用户报文组User_ipv4的子用户报文组User_ipv4_p02中的用户报文有User_ipv4_p02_label0、User_ipv4_p02_label1、……、User_ipv4_p02_labeln-1以及User_ipv4_p02_labeln,用户报文组User_ipv6的子用户报文组User_ipv6_p01中的用户报文有User_ipv6_p01_label0、User_ipv6_p01_label1、……、User_ipv6_p01_labeln-1以及User_ipv6_p01_labeln,用户报文组User_ipv6的子用户报文组User_ipv6_p02中的用户报文有User_ipv6_p02_label0、User_ipv6_p02_label1、……、User_ipv6_p02_labeln-1以及User_ipv6_p02_labeln,具体请参见图6,图6是本发明实施例公开的一种用户报文的分组示意图。
作为另一种可选的实施方式,在执行步骤S302之后,且在执行步骤S303之前,还可以执行以下操作:
判断上述缓存操作缓存的用户报文的数量是否达到预设数量阈值(或一定水线),当上述缓存操作缓存的用户报文的数量达到预设数量阈值时,触发执行步骤S303,当上述缓存操作缓存的用户报文的数量未达到预设数量阈值时,继续执行步骤S302,直到缓存操作缓存的用户报文的数量达到预设数量阈值,其中,每次执行步骤S302时,缓存操作缓存的用户报文与上一次缓存的用户报文不同,且步骤S303中缓存操作缓存的用户报文为步骤S303之前的所有步骤S302中缓存操作缓存的用户报文的总和。
在该另一种可选的实施方式中,当缓存操作缓存的用户报文的数量达到一定水线时,生成反馈信号,根据该反馈信号以及上述缓存操作缓存的用户报文生成用户流量,这样能够保证用户流量生成的稳定性。
作为又一种可选的实施方式,根据上述用户流量生成指令以及现场可编程门阵列FPGA的第一片内静态随机存取存储器SRAM中预先存储的索引信息,对动态随机存取存储器DRAM中存储的且该索引信息所指示的用户报文执行预读取操作与缓存操作可以包括:
根据上述用户流量生成指令以及FPGA的第一片内SRAM中预先存储的索引信息,读取DRAM中存储的且该索引信息所指示的用户报文,并将读取到的用户报文缓存到第二片内SRAM中。
作为又一种可选的实施方式,在执行步骤S301之前,还可以执行以下操作:
执行初始化操作。
具体的,在该又一种可选的实施方式中,可以由CPU对本发明实施例用到的用户流量的生成机制(如预读取操作以及缓存操作等)进行初始化操作,并对第一片内SRAM以及第二片内SRAM执行清零操作,这样能够保证用户流量生成的准确性。
本发明实施例中,接收用户流量生成指令,根据该用户流量生成指令以及现场可编程门阵列FPGA的第一片内静态随机存取存储器SRAM中预先存储的索引信息,对动态随机存取存储器DRAM中存储的且该索引信息所指示的用户报文执行预读取操作与缓存操作,并根据该缓存操作缓存的用户报文生成用户流量,其中,第一片内SRAM用于存储需要用到的所有用户报文的索引信息,DRAM用于存储所有用户报文。可见,实施本发明实施例能够通过DRAM实现海量用户报文的存储,且通过对存储的用户报文的预读取操作与缓存操作实现了线速生成用户流量。
请参阅图4,图4是本发明实施例公开的另一种用户流量的生成方法的流程示意图。其中,图4中的用户流量的生成方法适用于由CPU、FPGA以及DRAM组成的架构中,其中,FPGA包括第一片内SRAM以及第二片内SRAM。如图4所示,该用户流量的生成方法可以包括以下步骤:
S401、通过CPU执行初始化操作。
本发明实施例中,具体的,通过CPU执行初始化操作可以包括:
通过CPU对本发明实施例中的用户流量生成机制(如用户报文的读取操作与缓存操作等)进行初始化操作,并对FPGA中的第一片内SRAM以及第二片内SRAM执行清零操作。
S402、通过CPU对需要用到的所有用户报文执行分组操作与配置操作。
本发明实施例中,具体的,通过CPU对需要用到的所有用户报文执行分组操作与配置操作可以包括:
通过CPU根据业务类型将所有用户报文进行分组,以获得多个用户报文组;
通过CPU根据访问路径对每个用户报文组进行分组,以获得每个用户报文组的子用户报文组;
通过CPU依次将每个用户报文组的每个子用户报文组中的用户报文存储到DRAM中;
通过CPU获取每个用户报文组的每个子用户报文组中的每个用户报文的位置信息并生成索引信息;
通过CPU将每个用户报文的索引信息配置到FPGA的第一片内SRAM中。
S403、通过CPU触发生成用户流量。
本发明实施例中,通过CPU触发生成用户流量可以包括:
通过CPU生成用户流量生成指令。
S404、对用户报文执行预读取操作。
本发明实施例中,对用户报文执行预读取操作可以包括:
根据上述第一片内SRAM中存储的索引信息,从上述DRAM中依次读取用户报文。
S405、缓存读取到的用户报文。
本发明实施例中,缓存读取到的用户报文可以包括:
将步骤S404中读取到的用户报文缓存到FPGA的第二片内SRAM中,其中,当步骤S405中缓存的用户报文的数量达到预设数量阈值(一定水线)时,生成第一反馈信号以触发执行步骤S406,生成第二反馈信号以触发暂停执行步骤S404,当步骤S405中缓存的用户报文的数量未达到预设数量阈值时,继续执行步骤S404。这样既能够防止第二片内SRAM中缓存的用户报文的溢出,又能够保证用户流量生成的稳定性。
S406、生成用户流量。
本发明实施例中,生成用户流量可以包括:
根据上述用户流量生成指令以及上述第一反馈信号,读取步骤S405中缓存的用户报文,并根据读取到的用户报文生成用户流量。
可见,实施本发明实施例能够实现海量用户报文的存储以及线速生成用户流量,且保证了用户流量生成的稳定性。
请参阅图5,图5是本发明实施例公开的又一种用户流量的生成方法的流程示意图。如图5所示,该用户流量的生成方法可以包括以下步骤:
S501、CPU使能用户流量生成。
S502、判断缓存的用户报文的索引信息的数量(或反馈0)是否超过第一预设数量阈值,若否,则使能一次用户报文的连续调度,其中,缓存的用户报文的索引信息是从存储有所有用户报文的索引信息的第一片内SRAM中连续读取的用户报文的索引信息。
S503、用户报文的连续调度使能后,连续解析N个用户报文的索引信息,输出并缓存在地址缓存中,其中,每次完成N个用户报文的连续调度后,均需判断步骤S507中缓存的用户报文的数量(或反馈2),若缓存空间允许,则进行下一轮用户报文的连续调度,若缓存空间不允许,则暂停用户报文的连续调度。
S504、根据反馈1判断DRAM是否能够被访问,若是,则输出地址缓存中缓存的索引信息访问DRAM。
S505、将从DRAM中读取到的用户报文缓存在数据缓存中。
S506、判断数据缓存的状态,若数据缓存中缓存有用户报文,则立即读取并缓存到用户报文缓存中。
S507、判断用户报文缓存中缓存的用户报文的数量是否达到预设第二预设数量阈值,若是,则输出用于暂停用户报文的连续调度的反馈2,并判断用户报文缓存中缓存的用户报文的数量是否达到预设第三数量阈值,若是,则输出用于使能生成用户流量的反馈3,其中,输出反馈2能够避免用户报文缓存空间溢出。
需要说明的是,在CPU关闭用户流量生成之前,上述反馈2是持续输出的,上述反馈3只在CPU使能用户流量生成之后且用户报文缓存中缓存的用户报文的数量达到第三预设数量阈值时输出一次。
S508、读取用户报文缓存中的用户报文,生成用户流量。
S509、CPU关闭用户流量生成
本发明实施例中,用户报文缓存中缓存的用户报文的数量与时间的对应关系可以如图7所示,图7是本发明实施例公开的一种用户报文缓存中缓存的用户报文数量与时间的对应关系图。如图7所示,在CPU使能用户流量生成之前,用户报文缓存中缓存的用户报文的数量为0,在CPU使能流量生成之后,用户报文缓存中缓存的用户报文的数量逐渐增加直至达到第三预设数量阈值(即反馈3水线),且在数量逐渐增加直至达到第三预设数量阈值(即反馈3水线)时开始生成用户流量,在达到需要暂停用户报文的连续调度的反馈2水线之前,用户报文缓存中缓存的用户报文的数量在稳定状态水线以及反馈2水线附近上下浮动,当用户流量生成关闭时,用户报文缓存中缓存的用户报文的数量固定在反馈2水线与最大缓存水线之间。
可见,实施本发明实施例能够实现海量用户报文的存储以及线速生成用户流量,且保证了用户流量生成的稳定性。
请参阅图8,图8是本发明实施例公开的一种用户流量的生成装置的结构示意图。如图8所示,该用户流量的生成装置可以包括通信模块801、处理模块802以及第一生成模块803,其中:
通信模块801用于接收用户流量生成指令。
本发明实施例中,该用户流量生成指令用于使能用户流量生成,且该用户流量生成指令可以是测试人员手动输入的,也可以是由CPU产生的,本发明实施例不做限定。
处理模块802用于根据通信模块801接收到的用户流量生成指令以及FPGA的第一片内SRAM中预先存储的索引信息,对DRAM中存储的且该索引信息所指示的用户报文执行预读取操作与缓存操作。
本发明实施例中,FPGA的第一片内SRAM用于存储需要用到的所有用户报文的索引信息,且DRAM用于存储该需要用到的所有用户报文,可选的,DRAM可以具体用于以分组存储的形式存储该所有用户报文,即将该所有用户报文按照预设条件进行分组,并将分组后的用户报文按顺序存储在DRAM中。由于DRAM具有存储空间大且能够存储千万级用户的用户报文的优点,使用DRAM存储需要使用到的所有用户报文能够实现海量用户报文的存储,保证了模拟用户的规模,且节省了硬件成本。
第一生成模块803用于根据上述用户流量生成指令以及处理模块802执行上述缓存操作缓存的用户报文生成用户流量。
作为一种可选的实施方式,在图8所示的装置结构基础上,该用户流量的生成装置还可以包括分组模块804、存储模块805以及第二生成模块806,此时,该用户流量的生成装置的结构可以如图9所示,图9是本发明实施例公开的另一种用户流量的生成装置的结构示意图。其中:
分组模块804用于根据业务类型对所有用户报文进行分组以获得多个用户报文组,并根据访问路径对每个用户报文组进行分组以获得该用户报文组的多个子用户报文组。
存储模块805用于将每个用户报文组的每个子用户报文组中的每个用户报文依次存储在DRAM中。
第二生成模块806用于根据所有用户报文在DRAM中的存储位置生成所有用户报文中每个用户报文的索引信息;
存储模块805还可以用于将所有用户报文的索引信息存储在上述第一片内SRAM中。
作为另一种可选的实施方式,在图9所示的装置结构基础上,该用户流量的生成装置还可以包括判断模块807,此时,该用户流量的生成装置的结构可以如图10所示,图10是本发明实施例公开的又一种用户流量的生成装置的结构示意图。其中:
判断模块807用于在第一生成模块803根据处理模块802执行缓存操作缓存的用户报文生成用户流量之前,判断处理模块802执行缓存操作缓存的用户报文的数量是否达到预设数量阈值,当达到该预设数量阈值时,触发第一生成模块803执行上述根据处理模块802执行缓存操作缓存的用户报文生成用户流量的操作,当未达到该预设数量阈值时,触发处理模块802继续执行上述根据通信模块801接收到的用户流量生成指令以及FPGA的第一片内SRAM中预先存储的索引信息,对DRAM中存储的且该索引信息所指示的用户报文执行预读取操作与缓存操作。
具体的,当判断模块807判断出处理模块802执行缓存操作缓存的用户报文的数量达到上述预设数量阈值时,生成反馈信号并将该反馈信号发送至第一生成模块803,以触发第一生成模块803根据缓存操作缓存的用户报文生成用户流量。
进一步可选的,如图10所示,处理模块802可以包括读取子模块8021以及缓存子模块8022,其中:
读取子模块8021用于根据通信模块801接收到的用户流量生成指令以及第一片内SRAM中预先存储的索引信息,读取DRAM中存储的且该索引信息所指示的用户报文。
缓存子模块8022用于将读取子模块8021读取到的用户报文缓存到第二片内SRAM中。
作为另一种可选的实施方式,在图10所示的装置结构基础上,该用户流量的生成装置还可以包括清零模块808,此时,该用户流量的生成装置的结构可以图11所示,图11是本发明实施例公开的又一种用户流量的生成装置的结构示意图。其中:
清零模块808用于对本发明实施例用到的用户流量的生成机制(如预读取操作以及缓存操作等)进行初始化操作,并对上述第一片内SRAM以及上述第二片内SRAM执行清零操作,这样能够保证用户流量生成的准确性。
可见,实施本发明实施例能够实现海量用户报文的存储以及线速生成用户流量,且保证了用户流量生成的稳定性以及准确性。
请参阅图12,图12是本发明实施例公开的又一种用户流量的生成装置的结构示意图。如图12所示,该用户流量的生成装置可以包括CPU1201、FPGA1202以及DRAM1203,其中,FPGA1202可以包括用户报文索引信息存储模块12021、用户报文存储模块12022、读写调度模块12023、用户报文缓存模块12024、用户报文调度模块12025、用户流量生成模块12026以及用户流量生成控制模块12027,且图12所示的用户流量的生成装置的工作原理为:
CPU1201在使能用户流量生成前对FPGA1202执行初始化操作,并将海量用户报文进行分组,用户报文存储模块12022通过读写调度模块12023将分组后的用户报文依次写入DRAM1203中,用户报文索引信息存储模块12021存储用户报文在DRAM1203中的索引信息;CPU1201使能用户流量生成,用户报文调度模块12025从用户报文索引信息存储模块12021中读取一定数量的连续的索引信息,读写调度模块12023根据该一定数量的连续的索引信息访问DRAM1203,DRAM1203输出该一定数量的连续的索引信息所指示的用户报文,用户报文缓存模块12024用于缓存DRAM1203输出的用户报文,并根据缓存的用户报文的数量输出第一状态反馈信息以及第二状态反馈信息,其中,当缓存的用户报文的数量达到一定水线时,第一状态反馈信息用于指示用户报文调度模块12025暂停工作,且第二状态反馈信息用于指示用户流量生成控制模块12027根据控制参数(如发包模式、发包个数以及用户带宽等)控制用户流量生成模块12026从用户报文缓存模块12024中读取缓存的用户报文生成用户流量。
需要说明的是,上述用户报文索引信息存储模块12021可以为FPGA1202中的一个SRAM,上述用户报文缓存模块12024可以为FPGA1202中的另一个SRAM,且FPGA1202中的模块可以根据实际的需求进行合并、删除或拆分,本发明实施例不做限定。
可见,实施本发明实施例能够实现海量用户报文的存储以及线速生成用户流量,且保证了用户流量生成的稳定性以及准确定。
需要说明的是,在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详细描述的部分,可以参见其他实施例的相关描述。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作、模块以及子模块并不一定是本发明所必须的。
本发明实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。
本发明实施例装置中的模块以及子模块可以根据实际需要进行合并、划分和删减。
本发明实施例中所述模块可以通过通用集成电路,例如CPU(Central ProcessingUnit,中央处理器),或通过ASIC(Application Specific Integrated Circuit,专用集成电路)来实现。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上对本发明实施例所提供的一种用户流量的生成方法及装置进行了详细介绍,本文中应用了具体实例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (11)
1.一种用户流量的生成方法,其特征在于,所述方法包括:
接收用户流量生成指令;
根据所述用户流量生成指令以及现场可编程门阵列FPGA的第一片内静态随机存取存储器SRAM中预先存储的索引信息,对动态随机存取存储器DRAM中存储的且所述索引信息所指示的用户报文执行预读取操作与缓存操作,所述第一片内SRAM用于存储需要用到的所有用户报文的索引信息,所述DRAM用于存储所述所有用户报文;
根据所述缓存操作缓存的用户报文生成用户流量;
其中,所述根据所述缓存操作缓存的用户报文生成用户流量之前,所述方法还包括:
判断所述缓存操作缓存的用户报文的数量是否达到预设数量阈值;
当达到所述预设数量阈值时,执行所述根据所述缓存操作缓存的用户报文生成用户流量的操作;
当未达到所述预设数量阈值时,执行所述根据所述用户流量生成指令以及现场可编程门阵列FPGA的第一片内静态随机存取存储器SRAM中预先存储的索引信息,对动态随机存取存储器DRAM中存储的且所述索引信息所指示的用户报文执行预读取操作与缓存操作,直至所述缓存操作缓存的用户报文的数量达到所述预设数量阈值。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
根据业务类型对所述所有用户报文进行分组,以获得多个用户报文组;
根据访问路径对每个所述用户报文组进行分组,以获得该用户报文组的多个子用户报文组;
将每个所述用户报文组的每个所述子用户报文组中的每个用户报文依次存储在所述DRAM中,并根据所述所有用户报文在所述DRAM中的存储位置生成所述所有用户报文的索引信息;
将所述所有用户报文的索引信息存储在所述第一片内SRAM中。
3.根据权利要求1所述的方法,其特征在于,所述根据所述用户流量生成指令以及现场可编程门阵列FPGA的第一片内静态随机存取存储器SRAM中预先存储的索引信息,对动态随机存取存储器DRAM中存储的且所述索引信息所指示的用户报文执行预读取操作与缓存操作,包括:
根据所述用户流量生成指令以及FPGA的第一片内SRAM中预先存储的索引信息,读取DRAM中存储的且所述索引信息所指示的用户报文,并将读取到的所述用户报文缓存到所述FPGA的第二片内SRAM中。
4.根据权利要求2所述的方法,其特征在于,所述根据所述用户流量生成指令以及现场可编程门阵列FPGA的第一片内静态随机存取存储器SRAM中预先存储的索引信息,对动态随机存取存储器DRAM中存储的且所述索引信息所指示的用户报文执行预读取操作与缓存操作,包括:
根据所述用户流量生成指令以及FPGA的第一片内SRAM中预先存储的索引信息,读取DRAM中存储的且所述索引信息所指示的用户报文,并将读取到的所述用户报文缓存到所述FPGA的第二片内SRAM中。
5.根据权利要求4所述的方法,其特征在于,所述将所述所有用户报文的索引信息存储在所述第一片内SRAM中之前,所述方法还包括:
对所述第一片内SRAM以及所述第二片内SRAM执行清零操作。
6.一种用户流量的生成装置,其特征在于,所述装置包括通信模块、处理模块以及第一生成模块,其中:
所述通信模块,用于接收用户流量生成指令;
所述处理模块,用于根据所述用户流量生成指令以及FPGA的第一片内SRAM中预先存储的索引信息,对DRAM中存储的且所述索引信息所指示的用户报文执行预读取操作与缓存操作,所述第一片内SRAM用于存储需要用到的所有用户报文的索引信息,所述DRAM用于存储所述所有用户报文;
所述第一生成模块,用于根据所述缓存操作缓存的用户报文生成用户流量;
其中,所述装置还包括判断模块,其中:
所述判断模块,用于在所述第一生成模块根据所述缓存操作缓存的用户报文生成用户流量之前,判断所述缓存操作缓存的用户报文的数量是否达到预设数量阈值,当达到所述预设数量阈值时,触发所述第一生成模块执行所述根据所述缓存操作缓存的用户报文生成用户流量的操作,当未达到所述预设数量阈值时,触发所述处理模块执行所述根据所述用户流量生成指令以及FPGA的第一片内SRAM中预先存储的索引信息,对DRAM中存储的且所述索引信息所指示的用户报文执行预读取操作与缓存操作。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括分组模块、存储模块以及第二生成模块,其中:
所述分组模块,用于根据业务类型对所述所有用户报文进行分组以获得多个用户报文组,并根据访问路径对每个所述用户报文组进行分组以获得该用户报文组的多个子用户报文组;
所述存储模块,用于将每个所述用户报文组的每个所述子用户报文组中的每个用户报文依次存储在所述DRAM中;
所述第二生成模块,还用于根据所述所有用户报文在所述DRAM中的存储位置生成所述所有用户报文的索引信息;
所述存储模块,还用于将所述所有用户报文的索引信息存储在所述第一片内SRAM中。
8.根据权利要求6所述的装置,其特征在于,所述处理模块包括读取子模块以及缓存子模块,其中:
所述读取子模块,用于根据所述用户流量生成指令以及所述第一片内SRAM中预先存储的索引信息,读取所述DRAM中存储的且所述索引信息所指示的用户报文;
所述缓存子模块,用于将所述读取子模块读取到的所述用户报文缓存到第二片内SRAM中。
9.根据权利要求7所述的装置,其特征在于,所述处理模块包括读取子模块以及缓存子模块,其中:
所述读取子模块,用于根据所述用户流量生成指令以及所述第一片内SRAM中预先存储的索引信息,读取所述DRAM中存储的且所述索引信息所指示的用户报文;
所述缓存子模块,用于将所述读取子模块读取到的所述用户报文缓存到第二片内SRAM中。
10.根据权利要求8或9所述的装置,其特征在于,所述装置还包括清零模块,其中,所述清零模块,用于在所述缓存子模块将所述读取子模块读取到的所述用户报文缓存到所述第二片内SRAM中之前,对所述第一片内SRAM以及所述第二片内SRAM执行清零操作。
11.一种计算机可读取存储介质,其特征在于,所述计算机可读取存储介质存储有计算机程序,所述计算机程序用于指令相关硬件,来完成权利要求1至5任意一项所述的方法。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510644528.7A CN105207953B (zh) | 2015-09-30 | 2015-09-30 | 一种用户流量的生成方法及装置 |
EP16850227.6A EP3349405B1 (en) | 2015-09-30 | 2016-08-29 | Method and apparatus for generating user traffic |
PCT/CN2016/097245 WO2017054603A1 (zh) | 2015-09-30 | 2016-08-29 | 一种用户流量的生成方法及装置 |
US15/940,993 US10700980B2 (en) | 2015-09-30 | 2018-03-30 | User traffic generation method and apparatus |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510644528.7A CN105207953B (zh) | 2015-09-30 | 2015-09-30 | 一种用户流量的生成方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105207953A CN105207953A (zh) | 2015-12-30 |
CN105207953B true CN105207953B (zh) | 2019-02-05 |
Family
ID=54955394
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510644528.7A Active CN105207953B (zh) | 2015-09-30 | 2015-09-30 | 一种用户流量的生成方法及装置 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10700980B2 (zh) |
EP (1) | EP3349405B1 (zh) |
CN (1) | CN105207953B (zh) |
WO (1) | WO2017054603A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105207953B (zh) * | 2015-09-30 | 2019-02-05 | 华为技术有限公司 | 一种用户流量的生成方法及装置 |
CN114500385A (zh) * | 2021-12-23 | 2022-05-13 | 武汉微创光电股份有限公司 | 一种通过fpga实现千兆以太网数据流量整形的方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103248540A (zh) * | 2013-05-27 | 2013-08-14 | 济南大学 | 基于多分形小波模型的fpga网络流量发生系统及方法 |
CN103501209A (zh) * | 2013-09-25 | 2014-01-08 | 中国科学院声学研究所 | 一种异构多网协同传输的单业务分流方法和设备 |
CN104168162A (zh) * | 2014-08-20 | 2014-11-26 | 电子科技大学 | 一种软硬件协同实现用于交换机验证测试的流量生成器 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1487699A (zh) * | 2002-09-30 | 2004-04-07 | 华为技术有限公司 | 一种用于交换网测试的流量模拟方法及装置 |
US7174427B2 (en) * | 2003-12-05 | 2007-02-06 | Intel Corporation | Device and method for handling MPLS labels |
US8190731B2 (en) * | 2004-06-15 | 2012-05-29 | Alcatel Lucent | Network statistics processing device |
CN100372316C (zh) | 2005-05-13 | 2008-02-27 | 清华大学 | 10g网络性能测试仪流量生成与发送电路组件 |
US20080052270A1 (en) * | 2006-08-23 | 2008-02-28 | Telefonaktiebolaget Lm Ericsson (Publ) | Hash table structure and search method |
US7890702B2 (en) * | 2007-11-26 | 2011-02-15 | Advanced Micro Devices, Inc. | Prefetch instruction extensions |
US9172647B2 (en) * | 2013-04-25 | 2015-10-27 | Ixia | Distributed network test system |
CN104518899B (zh) * | 2013-09-30 | 2018-06-26 | 中国电信股份有限公司 | 网络路由流量仿真方法和装置 |
CN105207953B (zh) * | 2015-09-30 | 2019-02-05 | 华为技术有限公司 | 一种用户流量的生成方法及装置 |
-
2015
- 2015-09-30 CN CN201510644528.7A patent/CN105207953B/zh active Active
-
2016
- 2016-08-29 WO PCT/CN2016/097245 patent/WO2017054603A1/zh active Application Filing
- 2016-08-29 EP EP16850227.6A patent/EP3349405B1/en active Active
-
2018
- 2018-03-30 US US15/940,993 patent/US10700980B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103248540A (zh) * | 2013-05-27 | 2013-08-14 | 济南大学 | 基于多分形小波模型的fpga网络流量发生系统及方法 |
CN103501209A (zh) * | 2013-09-25 | 2014-01-08 | 中国科学院声学研究所 | 一种异构多网协同传输的单业务分流方法和设备 |
CN104168162A (zh) * | 2014-08-20 | 2014-11-26 | 电子科技大学 | 一种软硬件协同实现用于交换机验证测试的流量生成器 |
Non-Patent Citations (1)
Title |
---|
《基于网络处理器的网络管理探针的设计与研究》;张轲;《基于网络处理器的网络管理探针的设计与研究》;20061231;论文正文部分第51页 |
Also Published As
Publication number | Publication date |
---|---|
EP3349405B1 (en) | 2020-07-15 |
EP3349405A4 (en) | 2018-09-26 |
US10700980B2 (en) | 2020-06-30 |
CN105207953A (zh) | 2015-12-30 |
US20180227233A1 (en) | 2018-08-09 |
EP3349405A1 (en) | 2018-07-18 |
WO2017054603A1 (zh) | 2017-04-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103560862A (zh) | 移动终端及其编码速率控制方法 | |
Beshley et al. | Investigation the modified priority queuing method based on virtualized network test bed | |
CN105207953B (zh) | 一种用户流量的生成方法及装置 | |
WO2015044822A1 (en) | Systems and methods for high throughput traffic pattern generation | |
CN103297282A (zh) | 网络时延测量装置及方法 | |
CN108092856A (zh) | 基于sdn的网络质量优化方法、系统及电子设备 | |
CN106911588A (zh) | 用于实现深度包检测优化的方法、装置和系统 | |
CN103312566A (zh) | 检测报文端口拥塞的方法及装置 | |
CN102882809B (zh) | 一种基于报文缓存的网络限速方法及装置 | |
CN110417609A (zh) | 一种网络流量的统计方法、装置、电子设备及存储介质 | |
Ousterhout et al. | Flexplane: An experimentation platform for resource management in datacenters | |
CN110098976A (zh) | 网络参数的测量方法、装置、计算机设备和存储介质 | |
CN105335323A (zh) | 一种数据突发的缓存装置和方法 | |
CN110169134A (zh) | 无线质量支持视频体验的检测方法及装置 | |
Bredel et al. | Analyzing router performance using network calculus with external measurements | |
Suen et al. | Affordable avionic networks with Gigabit Ethernet assessing the suitability of commercial components for airborne use | |
CN108848040B (zh) | 报文发送方法、设备及计算机可读存储介质 | |
CN105871656A (zh) | 一种测试装置 | |
US20130318291A1 (en) | Methods, systems, and computer readable media for generating test packets in a network test device using value list caching | |
CN109587075A (zh) | 一种业务处理方法、装置、设备及存储介质 | |
Ciobotaru et al. | GETB-A gigabit ethernet application platform: Its use in the ATLAS TDAQ network | |
Vondrous et al. | Flowping-the new tool for throughput and stress testing | |
CN109474496A (zh) | 网络测试方法及装置、存储介质及网元 | |
CN101740138B (zh) | 一种测试存储器访问时延的方法及系统 | |
CN111988158B (zh) | 芯片级实现oam报文发送方法、装置、系统及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |