我有一个问题,为什么我的机器的吞吐量与SMALL大小的数据包(即64字节)相比非常糟糕?与数据包大小为1500字节相比?
我有一个GIGABIT网卡,能够以80MB / s的速度传输1500字节大小的数据包,但在64字节大小的数据包中,我很难达到25MB / s左右。
我知道在1500字节数据包的情况下,我需要发送大约80k PPS来达到线路速率,64字节需要发送大约140万PPS。
但为什么小型数据包的吞吐量存在巨大差异?
编辑:我正在使用内存映射将数据包从用户空间传输到linux中的内核空间,然后直接写入网络驱动程序进行传输。在64字节和1500字节的数据包之间进行比较时,我发现我的CPU利用率非常低且相同。
答案 0 :(得分:2)
但为什么小尺寸的吞吐量存在巨大差异 包??
CPU压力。与其大小无关,每个发出的数据包在到达接口之前都会经过大量处理。换句话说,传输小数据包和大数据包的“成本”是可比较的。
如果您对此感兴趣,可能需要在Linux内核中查看“GSO”和“UFO” - 它是专门为此开发的。
答案 1 :(得分:1)
发送数据包标头需要时间。设置DMA缓冲区,处理数据包报头等需要时间。所有额外的工作都会减少可以发送的实际有效负载量。
答案 2 :(得分:0)
想一想:每个数据包的头部都包含有效载荷(数据)和一些通用数据的大小。让我们说标题是16个字节。
如果发送1000个64字节的数据包,则发送1000 * (64 + 16) = 64000 + 16000 bytes
。
如果您一次性发送,则只有64000+16 bytes
。