CN111935032B - 一种数据包发送方法及*** - Google Patents
一种数据包发送方法及*** Download PDFInfo
- Publication number
- CN111935032B CN111935032B CN202010864941.5A CN202010864941A CN111935032B CN 111935032 B CN111935032 B CN 111935032B CN 202010864941 A CN202010864941 A CN 202010864941A CN 111935032 B CN111935032 B CN 111935032B
- Authority
- CN
- China
- Prior art keywords
- data packet
- sending
- data
- module
- sent
- 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/9057—Arrangements for supporting packet reassembly or resequencing
-
- 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/08—Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
- H04L43/0876—Network utilisation, e.g. volume of load or congestion level
- H04L43/0882—Utilisation of link capacity
-
- 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/08—Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
- H04L43/0876—Network utilisation, e.g. volume of load or congestion level
- H04L43/0888—Throughput
-
- 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/16—Threshold monitoring
-
- 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/9063—Intermediate storage in different physical parts of a node or terminal
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Environmental & Geological Engineering (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明涉及网络数据传输技术领域,尤其涉及一种数据包发送方法及***,以中央处理模块、网络监测模块、计时器为核心,对当前网络拥堵状态进行实时监察;以客户机的带宽负荷为参考值,引入自主的延时设定,确定最佳的数据传输时机;根据网络吞吐量与历史统计数据,对待发送数据包进行数据包重组,并将重组后的完整待发送数据包一次性地写入发送队列,将预设计时时间内接收到的待发送数据包分配到多个发送队列进行统一发送,客户机的虚拟网络驱动程序virto‑net通过内存映射方式将数据直接映射到宿主机的虚拟网络驱动程序vhost‑net,不仅充分地利用了队列传输带宽,还减少了对write接口的调用,进而提高了待发送数据包的传输效率。
Description
技术领域
本发明涉及网络数据传输技术领域,尤其涉及一种数据包发送方法及***。
背景技术
半虚拟化网卡通常有前端和后端两部分,前端是客户机中的驱动模块,后端是宿主机中I/O线程,两者通过发送队列、接收队列进行交互。其中,发送队列和接收队列可以是各包含一个或多个。
在现有技术中,每个半虚拟化网卡都对应一个I/O线程,该I/O线程同时负责发送队列和接收队列的处理,如果当前没有任务,则该I/O线程处于睡眠状态;当外界有数据包到达半虚拟化网卡时,宿主机的I/O线程被唤醒并处理接收队列:宿主机将数据写入接收队列后,通知客户机有数据到达,客户机接收到通知后从接收队列中获取数据。当客户机需要向外界发送数据包时,首先将数据写入发送队列,然后通知宿主机的I/O线程,I/O线程被唤醒并处理发送队列:I/O线程从发送队列中获取数据后将数据传输至外界,并在传输完成后告知客户机。
但是,由于客户机的应用层每打包一个数据就需要调用socket的write接口写入数据,使得上下文切换时间长,进而导致在带宽负荷比较高的时候,数据传输效率较低。
发明内容
本发明提供一种数据包发送方法,解决了现有的半虚拟化网络数据传输,上下文切换时间长、数据传输效率低的技术问题。
为解决以上技术问题,本发明提供一种数据包发送方法,包括步骤:
S1、获取当前的带宽负荷,当所述带宽负荷满足计时条件时,启动计时器计时,并启动对应的发送队列;
S2、根据历史统计数据计算预设计时时间并设置所述计时器;
S3、根据所述预设计时时间,对接收到的待发送数据包进行数据包重组;
S4、将重组后的所述待发送数据包写入所述发送队列,并发送到物理网络设备。
本基础方案以客户机的带宽负荷为参考值,引入自主的延时设定,确定最佳的数据传输时机;根据网络吞吐量与历史统计数据,对待发送数据包进行数据包重组,并将重组后的完整待发送数据包一次性地写入发送队列,将预设计时时间内接收到的待发送数据包分配到多个发送队列进行统一发送,不仅充分地利用了队列传输带宽,还减少了对write接口的调用,进而提高了待发送数据包的传输效率。
在进一步的实施方案中,在所述步骤S1中:所述计时条件为,所述带宽负荷满足预设带宽阈值;所述带宽阈值为当前网络最大带宽的80%。
在进一步的实施方案中,在所述步骤S1中,所述启动对应的发送队列包括:
获取当前CPU的内核数量;
根据所述内核数量计算对应的发送队列的启动数量,并启动所述发送队列;
其中,所述发送队列的启动数量为所述内核数量的预设整数倍。
本方案将客户机的CPU内核的数量作为当前设备的硬件条件,根据其内核数量规划出整数倍的发送队列进行数据包的传输,可最大程度的利用CPU处理器的处理能力,提高设备的数据传输效率。
在进一步的实施方案中,所述步骤S2包括步骤:
S21、从历史统计数据获取历史数据包的发出时间及数据包总数,根据所述数据包总数和所述发出时间,得到预设间隔时间;
S22、根据所述发送队列的启动数量和所述预设间隔时间得到预设计时时间;
S23、将所述预设计时时间设置为所述计时器的目标时间。
在进一步的实施方案中,所述发送间隔时间和所述预设计时时间的计算公式如下:
其中,T为m个数据包的总发送间隔时间,Ti为当前数据包的发出时间,Ti-1为前一个数据包的发出时间,ΔT为所述发送间隔时间,t为所述预设计时时间,m为发出的数据包的总数,n为所述发送队列的启动数量。
在进一步的实施方案中,在所述步骤S3中:
S31、当所述计时器达到所述预设计时时间时,获取在所述预设计时时间内接收到的待发送数据包;
S32、通过TCP协议将所述待发送数据包重组为一个完整的数据包。
本方案依照预设计时时间,可从缓存数据中分离出可充分利用网络带宽的数据量的待发送数据包,并将其重组为一个完整的待发出数据包进行统一发送,使得网络传输的带宽利用率大幅度提高。
在进一步的实施方案中,所述步骤S4包括步骤:
S41、调用write接口将重组后的所述待发送数据包写入发送队列;
S42、客户机从发送队列中读取所述待发送数据包,并通过内存映射方式将其发送给宿主机;
S43、宿主机将接收到的所述待发送数据包发送给物理网络设备。
本发明还提供一种数据包发送***,采用上述一种数据包发送方法,包括客户机和宿主机,所述客户机包括中央处理模块及与其连接的网络监测模块、接收模块、计时器、发送模块以及第一驱动模块;所述宿主机包括第二驱动模块;
所述网络监测模块用于获取当前的带宽负荷;
所述中央处理模块用于根据所述带宽负荷是否满足计时条件,控制所述计时器是否启动,并在计时器启动后,启动对应的发送队列;
所述接收模块用于接收待发送数据包;
所述计时器用于响应所述中央处理模块的控制进行计时操作;
所述中央处理模块用于从历史统计数据获取历史数据包的发出时间,计算预设计时时间并设置所述计时器;还用于对在所述预设计时时间内接收到的所述待发送数据包进行数据包重组;
所述发送模块将重组后的所述待发送数据包写入所述发送队列,并发送到第一驱动模块;
所述第一驱动模块用于将所述发送队列发送到所述第二驱动模块;
所述第二驱动模块用于将所述发送队列发送到物理网络设备。
本基础方案以中央处理模块、网络监测模块、计时器为核心,对当前网络拥堵状态进行实时监察,根据网络吞吐量,计算得到单个待发送数据包的预设计时时间,最大程度地利用中央处理模块的数据处理能力,提高数据传输效率。
在进一步的实施方案中,所述计时条件为,所述带宽负荷满足预设带宽阈值;所述带宽阈值为当前网络最大带宽的80%。
在进一步的实施方案中,所述第一驱动模块为virtio-net驱动模块;
所述第二驱动模块为vhost-net驱动模块;
所述中央处理模块为CPU,内置多个内核。
附图说明
图1是本发明实施例提供的一种数据包发送方法的部分工作流程图;
图2是本发明实施例提供的一种数据包发送***的***框架图。
具体实施方式
下面结合附图具体阐明本发明的实施方式,实施例的给出仅仅是为了说明目的,并不能理解为对本发明的限定,包括附图仅供参考和说明使用,不构成对本发明专利保护范围的限制,因为在不脱离本发明精神和范围基础上,可以对本发明进行许多改变。
实施例1
本发明实施例提供的一种数据包发送方法,如图1所示,在本实施例中,包括步骤S1~S4:
S1、获取当前的带宽负荷,当带宽负荷满足计时条件时,启动计时器计时,并启动对应的发送队列。
在本实施例中,启动对应数量的发送队列,包括:
获取当前CPU处理器的内核数量;
根据内核数量计算对应的发送队列的启动数量,并启动发送队列;
其中,发送队列的启动数量为内核数量的预设整数倍,预设整数倍包括但不限于2倍、3倍。
在本实施例中计时条件为,带宽负荷满足预设带宽阈值;带宽阈值可根据用户需求进行适应性设置,在本实施例中优选为当前网络最大带宽的80%。
本实施例将客户机的CPU内核的数量作为当前设备的硬件条件,根据其内核数量规划出整数倍的发送队列进行数据包的传输,可最大程度的利用CPU处理器的处理能力,提高设备的数据传输效率。
S2、根据历史统计数据计算预设计时时间并设置计时器,包括步骤S21~S23:
S21、从历史统计数据获取历史数据包的发出时间及数据包总数,根据数据包总数和发出时间,得到预设间隔时间;
S22、根据发送队列的启动数量和预设间隔时间得到预设计时时间;
S23、将所述预设计时时间设置为所述计时器的目标时间。
其中,发送间隔时间和预设计时时间的计算公式如下:
其中,T为m个数据包的总发送间隔时间,Ti为当前数据包的发出时间,Ti-1为前一个数据包的发出时间,ΔT为发送间隔时间,t为预设计时时间,m为数据包总数,n为发送队列的启动数量。
S3、根据所述预设计时时间,对在预设计时时间内接收到的待发送数据包进行数据包重组,包括步骤S31~S32:
S31、当所述计时器达到所述预设计时时间时,获取在所述预设计时时间内接收到的待发送数据包;
S32、通过TCP协议将待发送数据包重组为一个完整的数据包。
本实施例依照预设计时时间,可从缓存数据中分离出可充分利用网络带宽的数据量的待发送数据包,并将其重组为一个完整的待发出数据包进行统一发送,使得网络传输的带宽利用率大幅度提高。
S4、将重组后的待发送数据包写入发送队列,并发送到物理网络设备,包括步骤S41~S43:
S41、调用write接口将重组后的待发送数据包写入发送队列;
S42、客户机通过虚拟网络驱动程序virto-net从发送队列中读取待发送数据包,并通过内存映射方式将其发送给宿主机的虚拟网络驱动程序vhost-net;
S43、宿主机将接收到的待发送数据包发送给物理网络设备。
所述物理网络设备包括网卡(即网络适配器)。
本发明实施例以客户机的带宽负荷为参考值,引入自主的延时设定,确定最佳的数据传输时机;根据网络吞吐量与历史统计数据,对待发送数据包进行数据包重组,并将重组后的完整待发送数据包一次性地写入发送队列,将预设计时时间内接收到的待发送数据包分配到多个发送队列进行统一发送,客户机的虚拟网络驱动程序virto-net通过内存映射方式将数据直接映射到宿主机的虚拟网络驱动程序vhost-net,不仅充分地利用了队列传输带宽,还减少了对write接口的调用,进而提高了待发送数据包的传输效率。
实施例2
本发明实施例还提供一种数据包发送***,采用实施例1一种数据包发送方法,参见图2,包括客户机1和宿主机2,客户机1包括中央处理模块11及与其连接的网络监测模块12、接收模块13、计时器14、发送模块15以及第一驱动模块16;宿主机2包括第二驱动模块21;
网络监测模块12用于获取当前的带宽负荷;
中央处理模块11用于根据带宽负荷是否满足计时条件,控制计时器14是否启动,并在计时器启动后,启动对应的发送队列;
接收模块13用于接收待发送数据包;
计时器14用于响应所述中央处理模块11的控制进行计时操作;
中央处理模块11用于从历史统计数据获取历史数据包的发出时间,计算预设计时时间并设置计时器14;还用于对在预设计时时间内接收到的待发送数据包进行数据包重组;
发送模块15将重组后的待发送数据包写入发送队列,并发送到第一驱动模块16;
第一驱动模块16用于将发送队列发送到第二驱动模块21;
第二驱动模块21用于将发送队列发送到物理网络设备3。
本基础方案以中央处理模块11、网络监测模块12、计时器14为核心,对当前网络拥堵状态进行实时监察,根据网络吞吐量,计算得到单个待发送数据包的预设计时时间,最大程度地利用中央处理模块11的数据处理能力,提高数据传输效率。
在本实施例中,计时条件为,带宽负荷满足预设带宽阈值;带宽阈值可根据用户需求进行适应性设置,在本实施例中优选为当前网络最大带宽的80%。
在本实施例中,第一驱动模块16为virtio-net驱动模块;
第二驱动模块21为vhost-net驱动模块;
中央处理模块11包括但不限于CPU,CPU内置多个内核;
所述物理网络设备3包括网卡(即网络适配器)。
本实施例所提供的数据包***采用各个模块实现实施例1中的数据包发送方法中的各个步骤,为其提供硬件基础,便于方法实施,鉴于上述各个模块主要是用于执行实施例1中的各个步骤,而步骤S1-S5中更具体的内容实施例1已经说明,本实施例则不再赘述。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。
Claims (8)
1.一种数据包发送方法,其特征在于,包括步骤:
S1、获取当前的带宽负荷,当所述带宽负荷满足计时条件时,启动计时器计时,并启动对应的发送队列;
S2、根据历史统计数据计算预设计时时间并设置所述计时器;
S3、根据所述预设计时时间,对接收到的待发送数据包进行数据包重组;
S4、将重组后的所述待发送数据包写入所述发送队列,并发送到物理网络设备;
所述步骤S2包括步骤:
S21、从历史统计数据获取历史数据包的发出时间及数据包总数,根据所述数据包总数和所述发出时间,得到预设间隔时间;
S22、根据所述发送队列的启动数量和所述预设间隔时间得到预设计时时间;
S23、将所述预设计时时间设置为所述计时器的目标时间;
所述预设间隔时间和所述预设计时时间的计算公式如下:
其中,T为m个数据包的总发送间隔时间,Ti为当前数据包的发出时间,Ti-1为前一个数据包的发出时间,ΔT为所述预设间隔时间,t为所述预设计时时间,m为发出的数据包总数,n为所述发送队列的启动数量。
2.如权利要求1所述的一种数据包发送方法,其特征在于,在所述步骤S1中:所述计时条件为,所述带宽负荷达到预设带宽阈值;所述带宽阈值为当前网络最大带宽的80%。
3.如权利要求2所述的一种数据包发送方法,其特征在于,在所述步骤S1中,所述启动对应的发送队列包括:
获取当前CPU的内核数量;
根据所述内核数量计算对应的发送队列的启动数量,并启动所述发送队列;
其中,所述发送队列的启动数量为所述内核数量的预设整数倍。
4.如权利要求3所述的一种数据包发送方法,其特征在于,在所述步骤S3中:
S31、当所述计时器达到所述预设计时时间时,获取在所述预设计时时间内接收到的待发送数据包;
S32、通过TCP协议将所述待发送数据包重组为一个完整的数据包。
5.如权利要求1所述的一种数据包发送方法,其特征在于,所述步骤S4包括步骤:
S41、调用write接口将重组后的所述待发送数据包写入发送队列;
S42、客户机从发送队列中读取所述待发送数据包,并通过内存映射方式将其发送给宿主机;
S43、宿主机将接收到的所述待发送数据包发送给物理网络设备。
6.一种数据包发送***,应用于实现如权利要求1~5中任一项所述的一种数据包发送方法,包括客户机和宿主机,其特征在于:所述客户机包括中央处理模块及与其连接的网络监测模块、接收模块、计时器、发送模块以及第一驱动模块;所述宿主机包括第二驱动模块;
所述网络监测模块用于获取当前的带宽负荷;
所述中央处理模块用于根据所述带宽负荷是否满足计时条件,控制所述计时器是否启动,并在计时器启动后,启动对应的发送队列;
所述接收模块用于接收待发送数据包;
所述计时器用于响应所述中央处理模块的控制进行计时操作;
所述中央处理模块用于根据历史统计数据计算预设计时时间并设置所述计时器;还用于对在所述预设计时时间内接收到的所述待发送数据包进行数据包重组;
所述发送模块将重组后的所述待发送数据包写入所述发送队列,并发送到第一驱动模块;
所述第一驱动模块用于将所述发送队列发送到所述第二驱动模块;
所述第二驱动模块用于将所述发送队列发送到物理网络设备。
7.如权利要求6所述的一种数据包发送***,其特征在于:所述计时条件为,所述带宽负荷达到预设带宽阈值;所述带宽阈值为当前网络最大带宽的80%。
8.如权利要求7所述的一种数据包发送***,其特征在于:
所述第一驱动模块为virtio-net驱动模块;
所述第二驱动模块为vhost-net驱动模块;
所述中央处理模块为CPU,内置多个内核。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010864941.5A CN111935032B (zh) | 2020-08-25 | 2020-08-25 | 一种数据包发送方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010864941.5A CN111935032B (zh) | 2020-08-25 | 2020-08-25 | 一种数据包发送方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111935032A CN111935032A (zh) | 2020-11-13 |
CN111935032B true CN111935032B (zh) | 2023-09-01 |
Family
ID=73305131
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010864941.5A Active CN111935032B (zh) | 2020-08-25 | 2020-08-25 | 一种数据包发送方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111935032B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112954397B (zh) * | 2021-02-05 | 2023-03-24 | 广州市奥威亚电子科技有限公司 | 数据传输调整方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004320458A (ja) * | 2003-04-16 | 2004-11-11 | Nippon Telegr & Teleph Corp <Ntt> | パケット網出力帯域設計方法、装置、プログラム、媒体 |
CN104618158A (zh) * | 2015-01-28 | 2015-05-13 | 上海交通大学 | 嵌入式网络虚拟化环境中VirtIO网络虚拟化工作方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106250166B (zh) * | 2015-05-21 | 2019-09-20 | 阿里巴巴集团控股有限公司 | 一种半虚拟化网卡内核加速模块升级方法和装置 |
US10635474B2 (en) * | 2016-05-09 | 2020-04-28 | Marvell Asia Pte, Ltd. | Systems and methods for virtio based optimization of data packet paths between a virtual machine and a network device for live virtual machine migration |
-
2020
- 2020-08-25 CN CN202010864941.5A patent/CN111935032B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004320458A (ja) * | 2003-04-16 | 2004-11-11 | Nippon Telegr & Teleph Corp <Ntt> | パケット網出力帯域設計方法、装置、プログラム、媒体 |
CN104618158A (zh) * | 2015-01-28 | 2015-05-13 | 上海交通大学 | 嵌入式网络虚拟化环境中VirtIO网络虚拟化工作方法 |
Non-Patent Citations (1)
Title |
---|
程书欣.嵌入式虚拟化环境中I/O性能瓶颈分析与优化.中国优秀硕士学位论文全文数据库 信息科技辑.2016,第三至五章. * |
Also Published As
Publication number | Publication date |
---|---|
CN111935032A (zh) | 2020-11-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11606297B2 (en) | Congestion control method and network device | |
US10015104B2 (en) | Processing received data | |
US20080049617A1 (en) | System for fine grained flow-control concurrency to prevent excessive packet loss | |
US11489774B2 (en) | Method and system for counting quantity of active flows and network device | |
US11165705B2 (en) | Data transmission method, device, and computer storage medium | |
CN103997465A (zh) | 一种生成cnm的方法及设备 | |
CN111935032B (zh) | 一种数据包发送方法及*** | |
CN110312283A (zh) | 一种信息处理方法及装置 | |
US20220248259A1 (en) | Data processing method and apparatus | |
US8549193B2 (en) | Data transmission method, device and system | |
CN104301185A (zh) | 报文发送速率检测方法及装置 | |
CN116868553A (zh) | 用于管理端点资源和拥塞缓解的数据中心网络上的动态网络接收器驱动的数据调度 | |
US20100030930A1 (en) | Bandwidth conserving protocol for command-response bus system | |
US20220210069A1 (en) | Network Congestion Processing Method and Related Apparatus | |
US20220400074A1 (en) | System to transmit messages using multiple network paths | |
CN108111428B (zh) | 一种拥塞控制的方法和装置 | |
CN111198840B (zh) | 一种适用于双核***的goose和mms共网通信方法和*** | |
US7646724B2 (en) | Dynamic blocking in a shared host-network interface | |
CN117354254B (zh) | 一种基于lro超时和中断itr超时的联合中断控制方法和装置 | |
US20040257990A1 (en) | Interchassis switch controlled ingress transmission capacity | |
WO2023174081A1 (zh) | 一种队列调度的方法及装置 | |
CN114237546A (zh) | 缓存队列的管理方法、电子设备及存储介质 | |
CN118138530A (zh) | 网络主动拥塞控制方法、装置、电子设备及存储介质 | |
CN117997841A (zh) | 报文处理方法、装置、芯片、设备、存储介质及程序产品 | |
CN104079417B (zh) | 维持装置随时可唤醒状态的方法及服务器 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |