在 Hacker News 上看到 Netflix 的人丟出來的投影片,試著了解 Netflix 的 Open Connect Appliances 裡與 FreeBSD 相關的最佳化技巧對於效能的影響:「The “other” FreeBSD optimizations used by Netflix to serve video at 800Gb/s from a single server」。
看起來這邊的分析是先基於 400Gbps 的版本,可以跑到 375Gbps (53% CPU),接著在上面拔掉各種最佳化的設定,看看會掉多少流量。這邊可以參考先前在「Netflix 在單機服務 400Gbps 的影音流量」提到的資料。
投影片上的第一章是 sendfile 與 kTLS 相關的最佳化,這邊可以看出來都是重要的項目,隨便關掉一個就會掉很多 capacity:
- Disable kTLS (and async sendfile) + nginx aio:40Gbps (100% CPU)
- Disable kTLS (and async sendfile) + nginx thread pools:90Gbps (90% CPU)
- Disable sendfile (but use kTLS):75Gbps (80% CPU)
- Disable sendfile (but use NIC kTLS):95Gbps (80% CPU)
- Enable Sendfile & kTLS, but disable ISA-L crypto:180Gbps (80% CPU)
- Enable Sendfile & kTLS:240Gbps (80% CPU)
第二章是 virtual memory,UMA VM Page Cache 這邊看起來最明顯,SF_NOCACHE 也是個重要的項目:
- Disable UMA VM Page Cache:60Gbps (95% CPU)
- Disable VM Batch Queues:280Gbps (95% CPU)
- Disable SF_NOCACHE:120Gbps (55% CPU)
另外第二章特別提到了一個之前沒有用到的 optimization,是把 arm64 上面的 4KB Pages 變成 16KB Pages,這帶動了些許的效能提昇,並且降低了 CPU 使用率:
345Gb/s @ 80% CPU -> 368Gb/s @ 66% CPU
第三章是 network stack,看起來 TSO 帶來的效益也是很高:
- Disable TCP Large Receive Offload:330Gbps (65% CPU)
- Disable RSS accelerated LRO:365Gbps (70% CPU)
- TSO Disabled:180Gbps (85% CPU)
- Disable TSO and LRO:170Gbps (85% CPU)
最後面則是有提到從 400Gbps 到 800Gbps 還多做了那些事情,最後是達到 731Gbps。
用的機器是 Dell PowerEdge R7525,這是一台 2U 的機器啊...