Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
NTTコミュニケーションズ インターンシップレポート
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
udon-yuya
March 02, 2021
Technology
1k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
NTTコミュニケーションズ インターンシップレポート
udon-yuya
March 02, 2021
More Decks by udon-yuya
See All by udon-yuya
難読化Bashの検知
udonyuya
0
200
Other Decks in Technology
See All in Technology
Antigravity SDK for the Java Developer
glaforge
0
210
AIは推し活である。
kurazuuuuuu
2
980
覗いてみよう 関数型ビジュアル言語×2Dグラフィックスの世界
yohyamasaki
0
110
負債のメタファと2026年 / Debt Metaphor in Agentic Engineering Age 202609 Edition
twada
PRO
13
7.5k
LLMに渡さなかった仕事
nanaism
0
12k
AI 時代のスタートアップエコシステ厶から考究する技術的負債との向き合い方
m3m0r7
PRO
3
2.7k
AIで社員の自主発信に広報目線を組み込む
_mossann_t
0
150
SREの視点で考えるSIEM活用術 〜AWS環境でのセキュリティ強化〜
cscengineer
PRO
0
370
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
12k
EventBridge に「合流」はない ― サーバーレスのワークフローを育てるということ / No Join in EventBridge
yusukeshimizu
2
560
AI Agent入門〜今更聞けないAgentの話〜
hiromimaganuma
0
120
AIに書かせて、プラットフォームで縛る ― EKSプラットフォームで実践した責任境界と権限設計
elmodev09
0
580
Featured
See All Featured
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
430
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7k
The Language of Interfaces
destraynor
162
27k
Bash Introduction
62gerente
615
220k
Designing for humans not robots
tammielis
254
26k
Fireside Chat
paigeccino
43
4k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Transcript
インターン成果報告資料 @UdonYuya
自己紹介・参加動機 名前:@UdonYuya 所属:九州大学大学院システム情報科学府 研究:セキュリティ、脅威トレース 低レイヤが好きで、クラウドの基盤開発をやりたいと思っていた。
取り組んだこと ContrailのvRouterが同時に処理できる最大フロー数に関する調査・改善 JP7のvRouterの最大フロー数の2.5倍のフローが扱えるように!
vRouter ・1台のハイパーバイザに対して、 vRouterが1台存 在する。 ・パケットのフォワーディングを行っている。 ・vRouter Agentは経路などの制御情報やフローの エントリなどをvRouterに格納する。 ・フロー:5つの要素からなる通信を識別するための 単位。
背景 ・商用で使われているvRouter1台が一度に扱える最大フロー数は2Mフロー。 ・VM1台あたりのフロー数は0.9M(45%)。 ・JP7では次世代基盤に移行され、収容できるVMの数が2倍になるため、4Mフローまで 扱えるしようとしている。 ・しかし新基盤でもVM1台あたりのフロー数は0.9Mのままでお客様的には大してメリット がない。
動機 ・vRouterの最大フロー数を増やしたい。 ・そもそもわからないことがたくさんある。 - 現状どこまで増やせるのか。 - 増やすと性能にどう影響が出るのか。 これらを明らかにしたい。
バグとの出会い ・最大フローを7Mにしたときに、メモリアロケーションエラーが発生した。 Error mapping KSync memory. Device: /dev/flow; /dev/flow: Cannot
allocate memory contrail-vrouter-agent: controller/src/vnsw/agent/vrouter/ksync/ksync_memory.cc:116: void KSyncMemory::Mmap(bool, void*, bool): Assertion `0' failed.
バグとの出会い ・最大フロー7M時、フローテーブルのサイズは { 7M + 1,468,456(overflow table) } * 256
= 2,254,962,688 bytes ・これはintの最大値 2,147,483,647 より大きい。 ・オーバフローによって正常に処理が行われていない可能性がある。
実際に ・vRouterカーネルモジュールがメモリをアロケートするときは、size_t宣言。 ・vRouter Agentが保持するフローテーブルのサイズはint宣言。 const char * vr_table_map(int major, unsigned
int table, const char *table_path, size_t size, void **mem) { … *mem = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0); … } https://github.com/tungstenfabric/tf-vrouter/blob/R2011/utils/unix_util.c class KSyncMemory { … // Size of flow table memory int table_size_; … }; https://github.com/tungstenfabric/tf-con troller/blob/R2011/src/vnsw/agent/vrout er/ksync/ksync_memory.h
つまり、 1. vRouter Agentがフローテーブルのサイズを計算し、オーバーフローが発生する。 2. オーバーフローした値がsize_tにキャストされ、非常に大きな値になる。 3. メモリアロケーションエラーが起きる。 参考:https://cplayground.com/
変更点 ・vRouter Agent内のフローテーブルサイズをsize_tで扱うように変えた。 ・vRouter カーネルモジュール内のSandeshというプロトコル周りの部分はu32(符号なし 32bit整数)で扱われていたため、u64で扱うように変更。 ・(余談)この辺で、もしかしてContrailは32bitで扱える範囲しかサポートしないつもりな のでは?という疑念がわきました。 変更によって7Mのフローを扱えるようになった!
性能測定 ・TRexというトラフィックジェネレータを用いて1台のVMに対し、高トラフィックを印加。 ・VM1台のフロー数の上限はvRouterの最大フロー数の80%に設定。 ・最大フロー数に達するまでのSetup Rateを最大フロー数ごとに比較。 ・最大フローに達した時の、他のVMに対する通信の遅延をqperfで測定。
4Mフロー フロー数 (左軸) Setup Rate (右軸)
5Mフロー
7Mフロー
10Mフロー
qperf 4Mフロー ubuntu@ubuntu:~$ qperf -vvs -t 30 192.168.56.6 tcp_lat tcp_lat:
latency = 51.1 us msg_rate = 19.6 K/sec loc_send_bytes = 293 KB loc_recv_bytes = 293 KB loc_send_msgs = 293,312 loc_recv_msgs = 293,311 rem_send_bytes = 293 KB rem_recv_bytes = 293 KB rem_send_msgs = 293,311 rem_recv_msgs = 293,311
qperf 5Mフロー ubuntu@ubuntu:~$ qperf -vvs -t 30 192.168.56.9 tcp_lat tcp_lat:
latency = 48.7 us msg_rate = 20.5 K/sec loc_send_bytes = 308 KB loc_recv_bytes = 308 KB loc_send_msgs = 307,696 loc_recv_msgs = 307,695 rem_send_bytes = 308 KB rem_recv_bytes = 308 KB rem_send_msgs = 307,695 rem_recv_msgs = 307,695
qperf 7Mフロー ubuntu@ubuntu:~$ qperf -vvs -t 30 192.168.56.9 tcp_lat tcp_lat:
latency = 45.5 us msg_rate = 22 K/sec loc_send_bytes = 329 KB loc_recv_bytes = 329 KB loc_send_msgs = 329,442 loc_recv_msgs = 329,441 rem_send_bytes = 329 KB rem_recv_bytes = 329 KB rem_send_msgs = 329,441 rem_recv_msgs = 329,441
qperf 10Mフロー ubuntu@ubuntu:~$ qperf -vvs -t 30 192.168.56.9 tcp_lat tcp_lat:
latency = 44.8 us msg_rate = 22.3 K/sec loc_send_bytes = 335 KB loc_recv_bytes = 335 KB loc_send_msgs = 335,191 loc_recv_msgs = 335,190 rem_send_bytes = 335 KB rem_recv_bytes = 335 KB rem_send_msgs = 335,190 rem_recv_msgs = 335,190
考察 ・最大フロー数を10Mまで増加させても、Setup Rateや他VMの通信の遅延には変化が 見られなかった。 ・フローテーブルはハッシュテーブルとして管理されており、処理は定数時間で完了す る。(要調査)
まとめ ・vRouterのフローテーブルのサイズを現在の最大の4Mから10Mまで増やして実験を行 い、また大きく性能に影響を与えることがないことを確認した。 ・vRouter内のバグを発見し、修正を行った。
感想 ・本当に本当に勉強になりました。 - もっと勉強します。。。 ・想像してたより、すごいサービスだと思った。(小学生並みの(以下略)) - 同時に改善できる点も多くあり、自分の手でより良くしたいと感じた。