はじめに
7月18日にLKML, net-dev MLで提案された(Kernel) NET policy 1 について調べてみました。
NET policyとは?
Linuxの通信性能は初期設定でもそれなりに高いですが、より高い性能を出すためには様々な設定を最適化しなければいけません。NET policyは、指定したポリシ(スループット重視や遅延重視等)に従ってカーネルが設定の最適化を自動的に行なう機能です。
ポリシはソケット単位、タスク(プロセス)単位、デバイス単位で指定できます。(本稿では便宜的にターゲットと呼ぶ。)
NET policyはマルチキューNIC向けに設計されていて、現在の対応NICはIntelの40 GbE (i40e)のみですが、マルチキューNICであれば、他のNICにも実装可能のようです。
API
- デバイス
- /proc/net/netpolicy/$DEV/policy
- タスク
- /proc/$PID/net_policy
- prctl(PR_SET_NETPOLICY, POLICY_NAME, NULL, NULL, NULL)
- ソケット
- setsockopt(sockfd,SOL_SOCKET,SO_NETPOLICY,&policy,sizeof(int))
ポリシ
- BULKポリシ
- 高スループット重視のポリシ
- すべてのターゲットに適用できる
- CPUポリシ
- 高スループット重視だが、CPU使用量がより低いポリシ
- すべてのターゲットに適用できる
- LATENCYポリシ
- 低遅延重視のポリシ
- すべてのターゲットに適用できる
- MIXポリシ
- スループットと遅延の両方が良くなるように調整するポリシ
- デバイスターゲットのみ適用可能
性能向上
RFCメールには、初期設定と比べてどの程度性能が良くなるのかが示されていました。性能測定にはnetperf
のTCP_RR
テストを用いています。
- BULKポリシ
- スループットが平均で1.26倍
- CPUポリシ
- スループットが平均で1.20倍
- CPU使用量がBULKポリシより平均で5%低い
- LATENCYポリシ
- 遅延が平均で53.5%低い
- MIXポリシ
- スループット重視のワークロードと遅延重視のワークロードを何種類かの割合で混ぜたテストを実施しているようです。詳しくはRFCメールを参照してください。
おわりに
とりあえず概要だけまとめてみました。次回は個々の最適化について調べてみたいです。