Intel AVX-512 - Ultra Parallelized Multi-hash Computation

1  介绍

基于Sketch的算法是新兴技术,广泛应用于网络测量和网络遥测工作负载中,生成网络流的近似估计。它用于防止分布式拒绝服务(DDoS)攻击,监视网络使用情况以及各种服务质量(QoS)目的。与哈希表或其他无损算法相比,基于Sketch的算法采用紧凑且优化的数据结构设计,以实现更高的内存效率和计算吞吐量。

其核心数据结构,即Sketch,由一个二维数组组成。数组的每一行对应于由独立计算的哈希函数索引的结果摘要空间。使用更多独立的哈希函数可以提供更准确的估计结果。然而,增加哈希计算的数量会增加CPU消耗的量,这可能会阻止应用程序处理高容量的网络流量。因此,在这个领域中需要一种高吞吐量的多哈希计算方法。

这个技术指南提出了一种新型模型,通过利用Intel® Advanced Vector Extensions 512 (Intel® AVX-512)指令来加速多哈希计算。与最先进算法的标准CRC-32指令方法相比,这种创新方法在关键的键添加和键查找操作方面的平均性能提高了2倍。此外,由于不同的工作负载对哈希算法(随机性、加密性、小数据速率等)有不同的要求,我们提出的模型支持不同目的的算法定制。该解决方案为开发人员提供了一个坚实、灵活的基础,用于构建高吞吐量的网络测量和监控应用程序。通过利用其优化的数据平面,具体实现可以在各种网络遥测工作负载中获得出色的性能。

这份文档是Network & Edge Platform Experience Kits的一部分。

2  概述

我们所知,目前没有高度并行的多哈希计算解决方案。我们提出了以下三种替代方案作为初始选项:

1. 使用特定的硬件(例如网络适配器、FPGA)进行哈希计算

2. 使用长输出的哈希函数(例如SHA3-512),然后将结果均匀分成多个部分,以获得多哈希结果

3. 使用不同种子的CRC-32指令加速哈希函数

不过上述提出的解决方案存在一些缺点:

1. 特定硬件(例如网络适配器):哈希算法在特定的硬件上运行,通常是固定和僵化的,因此无法满足各种数据流算法中所使用的哈希算法的多样化要求。此外,数据流分析应用程序通常在网络堆栈的顶层运行。例如,许多防火墙和网络遥测应用程序在网络数据包解密和解压缩后运行。将数据流发送回硬件设备受到长时间的设备通信延迟的限制。所以最好在运行在CPU上的工作负载附近生成哈希结果。

2. 长输出的哈希函数:像SHA3-512这样的哈希算法可以生成长的哈希值,可以用来替代多个较短的哈希计算。但是有几个注意事项。1)现有的长输出哈希算法不足够灵活,不能进行性能效率权衡的定制。2)算法必须具有良好的雪崩效应,即当输入略微改变时,输出应该显著改变。这需要更复杂的算术运算,导致性能降低。SHA3-512在Intel® Xeon® Processor E3-1220 v5上的性能为164 cpb(时钟周期每字节),输入大小为8字节。虽然性能基准平台不同,但与本文提出模型的4.5 cpb相比,现有的长输出哈希算法在吞吐性能方面明显落后。

3. CRC-32指令:Intel已经引入了硬件CRC-32指令来加速CRC哈希计算。但是与我们的方案相比,基于CRC-32的实现缺乏灵活性和并行性。性能数据显示,与基于CRC-32的算法相比,我们的方案通过使用定制的哈希算法和Intel AVX-512实现了2倍的吞吐量提升。

这个技术指南提出了一种新型模型,通过利用Intel AVX-512指令集并行处理多个哈希函数。各种数据流算法,如Sketch以及其他经典算法如Bloom过滤器,都可以从这个方案中受益。

该模型由三个关键思想组成:

· 利用Intel AVX-512指令将分割的输入和向量化种子进行并行哈希计算

· 在哈希计算中使用Intel AVX-512 IFMA指令加速乘法和加法算术运算

· 利用Intel AVX-512 gather和scatter指令加速Sketch计数器更新

3  技术描述

3.1 背景

多哈希计算(多个独立的哈希函数)已经广泛应用于数据流分析领域的许多算法中,如基于Sketch的算法、Bloom过滤器等。图1以Sketch的基本数据结构(d x m的2D数组)为例。基于Sketch的算法是网络测量和网络监控领域中常用的有效方法,用于估算网络流的大小。它用于预防DDoS攻击、监控网络使用情况以及各种QoS目的。

在通常的情况下,当数据流(例如网络数据包流)通过系统时,基于Sketch的算法将为每个数据包处理d次独立的哈希计算。相应的哈希摘要,即每个哈希函数生成的结果,将用于在每行的m个计数器(桶)中索引计数器。对于遇到的每个数据包(键),相应的计数器将被增加或减少。最终的计数器值从所有d个数组中汇总,这些值可以用于估算键的频率(即网络流的大小)。多哈希计算将有助于提高频率估算结果的准确性,特别是对于大流量数据流。换句话说,更多的哈希计算往往会取得更高的准确性。

bc1055eabf1ebcf26c1d173be721fa41.png

图 1 Example Sketch data structure

除了Sketch之外,基于Bloom过滤器的算法也利用多个独立的哈希函数在查询数据集中的某些项时减少误判。如图2所示,示例的Bloom过滤器数组由12个元素组成,使用一组四个独立的哈希函数为每个键更新数组。

bb227b59cf78fad3f7dec974d79f4f93.png

图 2 Example Bloom filter algorithm

3.2 动机

根据我们对最先进的基于Sketch的算法进行的性能分析,哈希计算是总CPU消耗中性能热点之一。随着高吞吐量的网络应用(100Gb - 1Tb)在数据中心使用情况中变得越来越普遍,开发具有最小CPU消耗的高性能多哈希算法至关重要。

我们的研究显示,现有的基于CPU的算法不够灵活,也无法满足高吞吐量的要求。有人可能会认为可以使用专用硬件(例如网络适配器、FPGA)来计算哈希,而不是使用CPU。然而,我们的调查发现,网络分析任务往往需要最大的灵活性,并且可能在网络堆栈中产生高负载。换句话说,在许多用例中,网络适配器提供的计算要么过于死板,要么无法使用。防火墙和网络遥测等软件主要在CPU中运行,并处理数据流。CPU核心仍然是许多客户软件应用程序使用的主要计算资源。更多讨论可以在第2节中找到。

3.3 新模型

多个独立的哈希计算需要不同的种子作为每个计算的输入。具有不同种子的相同哈希函数可以生成独立(随机化)的结果。种子可以是随机数,以获得良好的混合效果,从而产生具有良好随机性的哈希摘要。图3显示了使用不同种子但相同的哈希函数生成独立哈希值的Sketch。

81fa91c28e194b5e1cefb7ab7cda5f17.png

图3 Example Sketch algorithm with different seeds for hash functions

3.3.1 利用Intel AVX-512指令将分割的输入和向量化种子进行并行哈希计算

为了计算八个独立的哈希值,我们使用了八个随机种子,然后将输入数据流(例如,输入键)连续分成64位宽度的数据块,然后逐个消耗。为了充分利用Intel AVX-512指令,数据块大小乘以种子数应该等于512。例如,如果种子数为4,则数据流应该被分成128位的块。该过程在图4中大致说明。

8e914d226af424607fd7f833418e765e.png

图4 Ultra parallelized multi-hash computation workflow

我们预定义了五个不同的质数(P1到P5)和八个不同的种子用于计算。这五个质数稍后将参与哈希计算,用以产生良好混合的哈希结果。每个质数都被广播到对应的向量寄存器中。八个不同的种子也被放入一个512位宽的向量寄存器中。

该算法还将截断的64位宽度输入数据广播到具有八个副本的512位宽的向量中。然后,它通过使用加法、乘法、旋转、移位和异或算术运算以向量化的方式混合种子向量和预定义的五个质数。

整个过程可以分为以下步骤:

1. 首先将种子向量和P5向量相加,然后将向量化的流长度按字节计数相加。然后将结果暂时存储在向量m中,如图5所示。

52b98cb580d242c3b00b9590a672c5f1.png

图 5  Parallelized initializing the multi-hash computation

2. 迭代地按8字节步进读取输入数据流(例如,输入键),然后广播到Intel AVX-512向量寄存器,并使用输入数据向量和P2执行向量化的乘法和旋转操作;然后对步骤1的结果向量m执行XOR运算,生成中间结果向量m';然后执行向量化的左旋转。之后,将其与向量P1相乘;然后取向量P4的加法生成向量m"。如果输入数据流长度大于8字节(64位),则生成的向量m"将参与下一个64位长度的输入数据的新一轮计算。直到没有更多的8字节块输入数据块剩余,向量化的8字节块数据输入算术将完成。这一步骤如图6所示。

81e7cad304aed046922c0c6e8dc7d0eb.png

图 6 Continuously processing the input data as 8-byte-block

3. 在前面的8字节步进计算之后,可能还有少于8个字节的输入数据需要处理,因此可能需要处理剩余的输入数据。该过程类似于前面的第2步,通过利用加/乘/旋转/移位/异或算术运算对剩余输入数据进行向量化处理。最后,在消耗所有输入数据后,对前面的中间结果采用最后的avalanche操作,以获得所有八个种子的最终向量摘要d。完整的过程如图7所示。

969e2a002da82d7ca6acdd1028fc4761.png

图 7 Processing the remaining input data less than 8 Bytes

3.3.2 在哈希计算中使用Intel AVX-512 IFMA指令加速乘法和加法算术运算

Intel AVX-512 IFMA指令引入自第8代Intel® Core™ i3处理器和第3代Intel® Xeon®可扩展处理器,可以支持属于Intel AVX-512指令集的整数的融合乘加运算。由于MAD(乘加除)操作在许多哈希函数中是必不可少的,以将键值分散到哈希桶中,因此向量化的Intel AVX-512 IFMA指令将加速乘法和加法操作的过程。将上述部分描述的向量化乘法和加法替换为Intel AVX-512 IFMA指令可以加速该计算。

3.3.3 利用Intel AVX-512 gather和scatter指令加速Sketch计数器更新

基于Sketch的算法在之前的哈希计算之后需要进行计数器更新。使用Intel AVX-512 gather和scatter指令,可以用在之前的向量化哈希计算中已经生成了多个哈希摘要的情况下,而不是逐个顺序更新Sketch计数器数组。通过使用Intel AVX-512 gather和scatter指令,可以并行更新Sketch计数器数组。

4  性能基准测试

4.1 基准测试平台

由于Intel AVX-512指令的每条指令消耗更宽的数据并使用更多的功率,在某些Intel处理器中,当执行Intel AVX-512指令时,CPU频率可能会降低。随着在更近期的Intel Xeon Scalable处理器系列中使用Intel AVX-512时潜在频率降低的减少,我们使用第4代Intel® Xeon® Scalable处理器作为性能基准测试平台。表1描述了性能基准测试平台的详细信息。

06be2e6786ccdb44865dd7275d3cc763.jpeg

表1 Performance Benchmark Platform Configuration

4.2 基准测试结果

基于Count-Min Sketch算法的优化实现方案已合并入DPDK 22.11版本中。性能基准测试的键值大小在4、8、9、13、16、32、37、40、48和64字节范围内,这些是使用基于Sketch的算法时数据流代表值的典型键值大小。作为性能基准测试比较参考,选择了由CRC-32指令加速的CRC哈希实现。由于CRC指令哈希实现被证明是一种高性能哈希函数,种子数为8,换句话说,它可以被认为是8个哈希函数。测试数据集包括上述键值大小范围内每个键值大小的1000万个数据包。由于Add和Lookup操作是这种基于Sketch的算法中最常见的操作,因此这两个操作都将调用多个哈希计算作为基本步骤。这里,Add和Lookup操作的性能基准测试比较如图8和图9所示。它显示了优化后的解决方案在Add操作上实现了平均2.7倍的性能提升,在Lookup操作上实现了2.4倍的性能提升。关于哈希冲突比率,它取决于底层哈希算法。以我们的实现底层哈希算法xxHash64为例,冲突测试结果看起来很好。

00865fda62a78cf23f7124401598abb3.png

图8 Performance benchmarking on Sketch Add compared with CRC-32 instruction

8c8386adc924dbbc703a6bb60780798a.png

图9 Performance benchmarking on Sketch Lookup compared with CRC-32 instruction

5  总结

本技术指南展示了一种全新的用于数据流工作负载的超并行多哈希计算模型。该模型提供了多个优势,这些优势已通过本文上述的技术详细说明:

1. 高性能:本技术指南提出了一种新颖的模型,利用Intel AVX-512指令集在处理多哈希计算时获得数据级并行性。基于xxHash,与标准CRC-32指令相比,在键添加和键查找操作上实现了高达2倍的性能提升。

2. 灵活性:尽管算法实现是基于xxHash进行评估的,但鉴于该模型的灵活性,其他更简单的哈希算法也可以适用于该模型,以获得更高的性能。

3. 可扩展性:该模型可以根据AVX-512 指令支持的并行级别,根据需要扩展以支持各种长度的键值和各种数量的哈希。

作者:Rong Leyi, Wang Yipeng, Li Weigang, Ni Hongjun

a054a060fad9d731e3d11593726a1aea.jpeg

转载须知

DPDK与SPDK开源社区公众号文章转载声明

推荐阅读

DPDK性能/效率核心探讨

Intel Gen4 Xeon助力IETF QUIC

9be4ad58d210a5acd444702372cf9f1f.jpeg

faa81a474702122b0549fa1e7277d6f5.gif

点点“赞”“在看”,给我充点儿电吧~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值