我应该选择更高的 CPU/低带宽还是稍慢的 CPU/更高的带宽?

我应该选择更高的 CPU/低带宽还是稍慢的 CPU/更高的带宽?

我有一些服务器需要执行大量文件压缩操作。这也意味着必须先远程下载所有文件,然后才能压缩并远程上传,或远程流式传输到客户端。
我可以选择升级旧服务器或购买新服务器。

旧服务器规格约为3.1 GHz,平均带宽约为100 Mbps。新服务器规格约为2.4 GHz,保证带宽为1000 Mbps up to 2000 Mbps。新迭代中的内存使用量应保持不变或减少。

此时,我已经弄清楚了我的 RAM 和磁盘使用情况。这不是问题。问题在于 CPU 速度和带宽如何影响流式下载。

这些是我的选择。
哪个选项更适合我的用例?

答案1

当您的当前服务器执行那些“压缩操作”时,您应该跟踪其 CPU 和带宽使用情况。

如果他们使用了 100% 的 CPU,那么就选择更快的 CPU;如果他们使用了 100% 的带宽,那么就选择更高的带宽。


另外,请注意,无论标称 GHz 值如何,较新的 CPU 都比较旧的 CPU 快很多;CPU 核心的数量也相关(假设这些“压缩操作”是多线程的和/或并行运行)。

答案2

如果你要找到一些“最佳”解决方案,你必须找出有多少数据可以通过你的数据总线,最佳方案是数据到达某个网卡,从 CPU 读取并直接压缩到网卡内存中。

假设你得到了

  • 2(这样它们就不会因发送和接收而混淆)10GB 以太网卡,每张卡有 8 个 PCI Express 4 通道(每条 15GB/s),假设您可以获得支持此功能的 MB。
  • 你投资一些可以真正支持这一点的 CPU+MB,RyZen 5950X+x570

然后是内存吞吐量

  • 多于系统提供约 54GB/s 的读/写速度或 48GB/s 的复制速度
  • 以太网驱动器可能会将接收到的数据复制到 RAM(通过缓存或不通过)
  • 很可能你还没有享受到零拷贝发送更倾向于发送将产生3至6份副本。
  • 接收可能也是一样,但是 CPU 必须至少读取一次才能压缩它,如果幸运的话直接在缓存中,如果不是从内存中,当它被压缩到缓存时也是一样,NIC 可以直接将其复制到其内部发送缓冲区。

因此,最好的情况是,使用最好的 NIC,用户级驱动程序,始终命中缓存

  • 从 NIC 复制到缓存,无需写回到 RAM
  • 从缓存到缓存进行压缩
  • 从缓存复制到 NIC
  • 假设有 32 个线程可以满足需求,那么吞吐量可以达到 10 GB/s

如果你没有遇到这种幸运的情况,那么你很可能受到内存带宽限制,因为

  • 假设有 3 个副本将数据移动到应用程序
  • 2 份副本加载到 zip 并保存结果
  • 发送 3 份
  • 以及大量的缓存写回,将其全部束缚在黑暗中

假设读取 7 次、写入 7 次,则在最佳情况下,限制应为 54GB/s / 14 = 3.85 GB/s。如果读取/写入次数较少,则很快就会达到 NIC 最大速度。

因此从这里开始您可以减少规格直到满足您的预算或需求。

我无法找到内存多线程压缩的任何数据。

相关内容