N:Nリアルタイム通信 扇問題ボトルネックマップ

かんたん三行説明（時間がない場合は以下の三行だけ読めば大体OKです）

__* 2020/4/14時点 N:Nリアルタイム通信最大接続数の観測値は最大504人、理論値は最大2500人くらい。__
__* 2020年からこの先数年は10Gbps周辺技術の課題解決がテーマになりそう。__
__* 状況に応じカリング、Nagleアルゴリズム、N:1通信を組合わせれば体感同時接続はさらに増える。__

* N:1通信 ... 一人が多数に一方的に通信
* N:N通信 ... 多数が多数に対し相互通信

# 1. この投稿について
多人数リアルタイム通信を行う場合特有のボトルネック問題が出現します。
この問題のことを私は電子回路の配信出力比、Fan-out比の"Fan=扇"になぞらえ”扇問題”と呼んでいます。
[扇問題](https://qiita.com/kyadet/items/1b45e4cb33adb38dc04b)については前回の投稿をご参照ください。

この問題はボトルネックとなる壁が何段階か存在することが分かっています。
今回はその概要を説明しようと思います。


# 2. N:N通信 扇問題ボトルネックマップ
まず全容を示すマップを載せておきます。私の裁量で勝手に配置したものですが概ね5つの壁があります。以降、この中でも主要な3つの壁について解説します。*1
![bottleneckmap.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64714/fd4d9204-cb8e-c764-a07f-d642219e09cf.jpeg "N:N通信 扇問題ボトルネックマップ")

# 3. アプリケーションの壁
アプリケーションの実装で改善できる部分です。
ゼロコピーなどのアプリケーション実装の工夫で、ある程度改善できることが分かっています。
サーバ側の回線が10Gbpsであることを前提とし各所のボトルネックをある程度観測した状態において、観測値としてはN:Nリアルタイム通信で最大504人の接続ができることを確認しています。

参考
[OpenRelay、Synamon社VR製品 NEUTRANS BIZにおいて504人接続を実現](https://furthersystem.com/news/news-2019-8-15-2.html)
* 公開できる情報が一社のみですが・・・ほんとはもっとたくさんあるはずです。同種製品でもチューニングすればだいたい300接続くらいは実現しているようです。ただ、いずれも観測データは非公開情報なので勝手にご紹介できず・・・*2

# 4. 10Gbpsの壁
ここは今現在、非常にホットな部分です。
2019年からここ数年の間にインターネットトラフィックに「期待」できる最大性能です。この10Gbpsの技術周辺には回線インフラ、OS、ミドルウェア、ハードベンダーそれぞれが課題を抱え、足踏みをしている状態が続いています。
しかし、昨今VRの導入が活発化したことで需要が高まるにつれ、各社かなりの力を入れているようで、今後かなりのスピードで改善されていくものと思います。各レイヤの検討状況について少しだけ掘り下げて紹介しておきます。

## 4-1. 10Gbpsの壁 - 10Gbps光回線
10Gbpsの光回線は実は10年以上前ににNTTが努力し一般消費者向けに導入しようとしていたようなのですが、なにやら苦労があったようです。（このあたりご興味あればG-PON, XG-PONの名前で検索すると色々出てきます）それが100%の原因というわけでもないと思うのですが、需要もなく競争があまり起きなかったこともあり、インターネット回線速度の進化はここ10年近く進化が止まってしまっていました。

しかし近年VRとマルチプレイ技術の活用需要が急激に増加し、各社10Gbpsのサービスに力を入れ始め一般消費者向け10Gbps回線も整備されつつあります。整備が進めばサービスを設計するうえでユーザ環境が10Gbpsを前提として設計することも近い将来できそうです。
また法人向けについては100Gbpsのサービスや10Gbpsの広域イーサネットなども提供されるようになり始めているようですので、範囲を限定してよければさらに高品質なものも構築できそうです。*3

参考
[NURO](https://www.nuro.jp/10g/)
[auひかり ホーム10ギガ・5ギガ](https://www.au.com/internet/auhikari_10-5g/)
[フレッツ 光クロス](https://flets.com/cross/)
[SoftBank 光 ファミリー・10ギガ](https://www.softbank.jp/ybb/sbhikari/10g/)
* 2020年4月現在 可能な限り全部載せてみたつもりですが載ってないのがあったらごめんなさい

## 4-2. 10Gbpsの壁 - OS基盤
10Gbpsや100Gbpsを超える転送レートを実現するイーサネットカードを販売しているMellanoxやIntelはDPDKという高速ネットワークドライバを作ったりXDP(eXpress Data Path)というlinuxカーネル改善の取り組みでネットワークスタックの速度改善に取り組み続けています。これらに取り組んでいる理由は既存のネットワークスタックでは10Gbpsのイーサネットカードの性能を使いきれていない、という所から来ています。つまり光回線が高速化したとしてもOS・ミドルウェアのレイヤでもまた高速化を阻害している状況なのです。ただ、ここも毎年改善していますので日を追うごとに改善されていくことでしょう。10Gbps光回線の普及とともに改善が待ち遠しい部分です。

参考
[netdev-0x13-から見た-linux-ネットワークの最新動向](https://medium.com/nttlabs/netdev-0x13-から見た-linux-ネットワークの最新動向-6aff2965f5c6)
[How to add XDP support to a NIC driver: fundamental aspects to increase performance](https://netdevconf.info/0x14/session.html?tutorial-add-XDP-support-to-a-NIC-driver)
[DPDKとは？ ～DPDK入門 第1回～](https://www.ntt-tx.co.jp/column/dpdk_blog/20180920/)

# 5. CPUの壁
10Gbpsの壁を超えると次に見えてくるのはCPUの壁です。
（その手前に未発見の壁があるかもしれませんが）
現在CPUで出せるネットワーク最大転送レートは理論値で300Gbpsということが分かっているようです。
これよりさらに大きなスループットを出したい場合はASICやFPGAなどの専用チップに切り替える必要があります。*4

参考
[プログラマブル・データプレーン時代に向けたネットワーク・オペレーション・スタック | 海老澤健太郎＠Ponto Networks, Inc. | ONIC Japan 2017](http://onic.jp/archive/2017/_cms/wp-content/uploads/2017/10/ONIC2017-KentaroEbisawa-PontoNetworks.pdf)
[フェイスブックもチップ事業に参入か、ASIC開発者を募集](https://www.technologyreview.jp/nl/why-facebook-wants-to-design-its-own-ai-chips/)


# 6. まとめ
上記は扇問題の回避をせず負荷に対し正面から解決に取り組んだ場合の話です。
これに加え、例えばリアルタイム通信を行う必要のないものをフィルタ・カリングしたり、状況に応じN:1通信を組み合わせ扇問題を回避する作りにすることで体感の同時接続人数を増やしていくことは可能です。
要件をよくヒアリングしそのケースでN:Nリアルタイム通信が必要かどうかはしっかり検討した方がいいかもしれません。
とはいえ、最近のVRの分野などではごまかしを許してくれない要求が出ることが多々あるようですので、各所に存在するボトルネックの壁から「現時点で力業で解決できる領域と解決できない領域がある」ということを把握しておくのも大事だと思いますし、このボトルネックマップがその際の判断材料の一助にでもなれば幸いです。






<br>
<br>
<br>
以下、注釈説明

---
*1 ボトルネックマップのアプリケーション実装の壁で追記漏れでNoLockを忘れてました・・・NoLockの適切な使い分け大事ですね。

*1 ボトルネックマップ自体は技術書典7で頒布したエンジニアの一生#3で一度紹介したものになります。本投稿ではエンジニアの一生#3で触れていない話にも触れていますが、試験結果の細かいレポートはエンジニアの一生#3を確認いただくということで、本投稿では簡潔に載せています。

*2 このあたり情報公開できるものが少なく・・そんな中Synamon社様は実験協力を快く引き受けてくださってかなり感謝してます。

*3 2019年のInteropで400Gbpsの実際の通信を行っているデモを確認しましたが実行転送レートはだいたい目視で380Gbpsくらいでした、ヘッダや制御コマンドの送信などがあるので転送可能実データとなるペイロードが減るのは仕方ないことですが、今後の転送レートでもそのあたりは考慮に入れておいた方がいいかもしれません。尚、専用機のようでCPUは使ってないと思います。

*4 リアルタイム通信分野ではまだこのASICチップやFPGAを活用して高速化する、という事例は見かけていません。しかし私が今現在進行形で研究・開発しているOSSリアルタイム通信サーバの[OpenRelay](https://github.com/OpenRelayOSS)でもASICチップ動作版のOpenRelayMetalというのものを進めようとしていますし、個人的には表に情報が出ていないだけで他でも水面下ではすでに着手し開発を行っている所は既に結構いるのではないかと考えています。

*自分でこういう情報を発信してはいますが、自分自身この課題をずっと追い続けていることもあり、データとして検証の場と実測値を探し求めています。自分が把握している現存観測されているN:N通信の最大接続数は504人ですが、これより多いものをご存じだったり実験の機会があれば教えてもらえると非常にうれしいです。

<br>