我有一些服务器需要执行大量文件压缩操作。这也意味着必须先远程下载所有文件,然后才能压缩并远程上传,或远程流式传输到客户端。
我可以选择升级旧服务器或购买新服务器。
旧服务器规格约为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 最大速度。
因此从这里开始您可以减少规格直到满足您的预算或需求。
我无法找到内存多线程压缩的任何数据。