像GTP这样的隧道协议是限制吞吐量的瓶颈吗?

当使用IPSec(隧道模式)或GTP等隧道协议时,会将多个IPstream合并成一个stream。 由于只有一个stream量,我们如何扩大吞吐量? 分配更多的处理器内核将无济于事,因为来自一个stream的数据包只能传送到一个内核。 有没有办法解决这个问题? 就我而言,问题在于GTP。 eNodeB将来自UE的所有IPstream都放入一个GTP隧道,其五元组将全部相同。 由于我们只有5到10个eNodeB,因此会产生相同数量的IPstream量。 因此,核心利用率变得非常不均衡,核心利用率> 80%,有些利用率<10%。 每个stream程都由一个核心处理,这样就不会有数据包重新sorting。 由于成千上万的IP数据stream只能传输到5到10个IP数据stream,因此RSS哈希函数的随机性在某种程度上是不均衡的,导致一些内核变得超载,而less数内核仍处于空闲状态。

将它称为任何隧道协议的固有问题是否正确? 任何方法来解决这个问题? 另外,单stream量可达到的最大吞吐量是多less? 我只是在这里寻找任何硬件的基准数字。 您甚至可以在隧道模式下共享IPSec的结果。 单个IPSec隧道可以达到多less吞吐量?pipe理员通常做什么来扩大吞吐量?

您所描述的问题不是隧道协议的固有问题。 相反,它与encryption的存在有关,而不是隧道。

ECMP实现检查高层协议层的字段的优先级高于正在运行的ECMP实现。 例如,在IP层运行的ECMP通常会检查UDP和TCP端口号。 对于ECMP实施来说,检查隧道分组的内部IP报头中的IP地址是没有什么不同的。

然而,由于encryption,这个信息不解密的情况下不可用。 并且能够在不知道encryption密钥的情况下将stream程分开,通常被认为是encryptionalgorithm中的安全缺陷。 考虑到性能和安全性之间的折中,这一点很重要。

我能想到的可能解决scheme包括:

  • 在encryption时将内部IP标头的stream标签复制到外部IP标头。 这显然会泄漏有关stream标签内容的信息。
  • configuration多个隧道,并跨隧道执行ECMP。 连接发送端的ECMP实现将尝试在整个隧道间均匀分配stream量。 但是,根据stream量模式,可能无法将stream量均匀分配到隧道中。 隧道之间的这种不均匀分布是有问题的,这不仅因为它可能导致底层networking的次优利用,而且因为它泄露了关于未encryptionstream量特征的一些信息。 然而,这种情况下的泄漏将比暴露内部IP报头的部分less得多。
  • 允许并行解密任意数据包,但在解密之后将其以原始顺序放回。 一个非常简单的实现有一个线程负责将数据包以循环方式分配给多个解密线程。 解密之后,另一个线程将从解密线程以循环方式接收解密的数据包,并将其解密为原始顺序。

    只有将所有线程视为单个故障域,并且线程之间的通信不受数据包丢失的影响,这种方法才有可能。 用不同的networking设备在不同的networking设备之间循环分发数据包是不行的。

  • 解密为包含未encryption的有效负载和IPSec序列号的中间未encryption格式。 解密可以并行完成,然后将数据包传递给caching有限数量的数据包的组件,并尝试尽可能以原始顺序恢复数据包。

  • 重新devise更高层的协议,以便更容忍重新sorting。

networking可能是有或没有隧道协议的瓶颈。 在某些情况下,背板传输速率跟不上networking传输速率。 通常,所有stream量都通过单个networking接口进行路由,聚合了多个连接。

个别stream量的encryption/解密应该可以并行进行。 除了额外的背板stream量之外,使用encryption隧道不应该通过多个networkingstream量来显着限制networking吞吐量。

硬件encryption加速器可以帮助如果encryption开销是一个问题。 但是,看起来你有足够的CPU,这不应该是一个问题。

如果您的应用程序正在使networking链接饱和,则可以绑定多个接口来提高吞吐量。 您的服务器所连接的交换机将需要支持通道绑定。

使用更快的网卡可以提供帮助,但是最终会达到背板无法跟上的速度。

networking设备也有容量限制,并且您的要求超过了这个容量。 在这种情况下,您的networking基础设施将成为瓶颈。

由于内存caching,在多个CPU之间平衡负载可能没有意义。 如果应用程序继续在单个CPU上运行,则运行速度通常会比运行在不同CPU上的频繁运行速度快。