![Windows 文件服务器 CPU 使用率高 - 渲染农场有许多客户端同时读取数据](https://linux22.com/image/784873/Windows%20%E6%96%87%E4%BB%B6%E6%9C%8D%E5%8A%A1%E5%99%A8%20CPU%20%E4%BD%BF%E7%94%A8%E7%8E%87%E9%AB%98%20-%20%E6%B8%B2%E6%9F%93%E5%86%9C%E5%9C%BA%E6%9C%89%E8%AE%B8%E5%A4%9A%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%90%8C%E6%97%B6%E8%AF%BB%E5%8F%96%E6%95%B0%E6%8D%AE.png)
我有一台配备双 Xeon E5-2650v4 CPU 的 Windows 文件服务器。每个 CPU 有 14 个核心,所以总共有 28 个核心。
网络接口是 Mellanox Connectx3 40gbs。
服务器中的磁盘驱动器为 7.68TB Sata 6gbps ssds x8,位于 Raid 0 中(软件 Windows 条带)
有 200 个渲染节点从上述服务器读取数据以渲染 3D 帧。
文件服务器有一个 numa 节点或 cpu 使用率 100%,而第二个 cpu 的利用率并不高。
问题是,有些用户在使用 3D 应用程序时,在渲染过程中会遇到速度变慢的情况。当没有渲染时,从事其项目的艺术家不会遇到速度变慢的情况。网络并未饱和,因为往返服务器的网络流量只有 5gbps。容量为 40gbps。
那么导致速度变慢的原因可能是什么呢?我怀疑 Mellanox 网卡位于连接到 cpu2 的 pci express 插槽上,这也许是 CPU 2 被 100% 利用的原因。每个渲染节点都在读取数千个小文件以进行渲染。因此,也许大量的文件可能导致 CPU 利用率过高。
有任何想法吗?
答案1
需要注意的是,40Gbps NIC 仅连接到一个插槽/NUMA 节点 - 因此如果它与第二个插槽相关联,则第一个插槽处理的任何文件共享工作负载都必须穿过 QPI 总线才能到达 NIC,从而将第二个插槽变成第一个插槽的兼职 IO 控制器。如果第二个插槽实际上没有被使用,请考虑将其完全移除,将其内存移至第一个插槽,并将 NIC 移动到与第一个插槽相关联的位置。有时少即是多 :)
其次,40Gbps 接口通常仅采用 LACP/Etherchannel 方式预先捆绑 4 x 10Gbps 连接,如果您的服务器与许多不同的 MAC 地址通信,这很好,但如果您始终与同一个 MAC(例如一个客户端或另一个交换机)通信,则可能会将带宽限制在 10Gbps 左右。这就是我们从 40Gbps NIC 转移到 25Gbps 的原因之一。
最重要的是,您有一个软件驱动的 R0 设置,它不仅会占用 CPU 资源,还会占用内核使用的资源 - 现在很多人没有意识到这一点,但无论您有多少个内核,大多数内核只会使用一定数量(通常是数量较少)的内核来完成内核工作 - 进程调度、malloc、IO 等。软件 RAID 有几个好处,但显然硬件 RAID 也有自己的好处 - 其中之一就是它们通常具有相对较低的 CPU 开销。
文件问题确实很麻烦,几乎所有文件系统在处理小文件时都比处理大文件慢 - 事实上,我很难想到任何没有这种情况的文件系统,当然 NTFS 不是很好。讽刺的是移除到处都支持巨型框架实际上可以帮助处理大量小文件,无论如何。
最后,这种系统让我担心的一件事是单个服务器的单点故障。如果您有预算,请考虑将所有这些文件服务移动到中央多“头”存储阵列,它应该更快、更可靠/更具弹性 - 也更容易支持。另一种选择可能是某种集中式或分散式分布式文件系统,例如 Ceph,甚至可能是 Window 自己的 DFS-R。我有一个朋友为电影/电影行业经营着一个非常大的渲染农场,他们使用那种东西,但说实话并不便宜。
答案2
系统进程如此繁忙意味着操作系统必须处理大量开销,无论是来自其内部工作还是来自设备驱动程序。一些可能的罪魁祸首:
- NIC 固件/驱动程序(它们是最新的吗?)
- 软件 RAID(硬件 RAID 控制器在这里是更好的选择)
- 文件系统问题(众所周知,大量小文件比少量大文件更难处理)
- SMB(参见“文件系统”,但更糟糕)
我当然假设你的 NIC 支持 RDMA;如果不支持,你应该立即切换到支持的。
我的建议是检查性能计数器以找出系统实际上在哪里花费了如此多的 CPU 时间。