簇大小、缓冲区大小和数据包大小与性能有何关系?

簇大小、缓冲区大小和数据包大小与性能有何关系?

我正在嵌入式系统上创建服务器。我的 SD 卡上有一个 FAT 文件系统,其中包含一个文件,通过 HTTP 发送到 Wi-Fi 上的某个客户端连接至系统。

一开始我尝试逐字节读取文件,速度非常慢。为了改善文件读取,我引入了一个缓冲区。我从文件读取到缓冲区,然后将缓冲区内容写入发送到客户端的流:

file -> buffer -> network
  • 增加缓冲区大小可以提高数据传输率。我认为这是因为对文件系统的读取操作次数减少了。

  • 但是,任意大的缓冲区(例如 5000 字节)都会适得其反。我怀疑这是由于缓冲区膨胀造成的。服务器花费太多时间填充缓冲区,这会使网络混乱。

显然,存在一个最佳缓冲区大小,可以增加读取速度,而不会因缓冲区膨胀而导致速度减慢。

我想提高数据传输率方面的整体性能。目前我的数据传输率只有 3Mbi/s,太慢了。我可以控制缓冲区大小和集群大小。我可以通过选择这两个值来提高系统的性能吗?

  1. 缓冲区大小和群集大小理想情况下是否应该相同?缓冲区大小通常是否应该是群集大小的整数倍(可能 >1)?
  2. 我是否应该以某种方式选择这两者,使它们也与网络有效载荷大小一致?(我对网络没有太多经验,也不知道是否存在固定有效载荷大小这样的东西)

我该如何决定这些尺寸来增加数据传输速率?

相关内容