Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
NTTコミュニケーションズ インターンシップレポート
Search
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
なぜ Temporal の大小比較には compare しかないのか / Why Does Temporal Only Have compare() for Comparisons
kazukihayase
1
200
[potatotips #96] Give Your AI Agent the Flutter Playbook
korodroid
0
160
属人化を叩き割れ!「制作加速」と「安定化」の矛盾を打破する:8年目プロダクトが辿り着いた「ミスが起こり得ない」アセット制作フローの全貌
gree_tech
PRO
0
460
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
12
85k
【書籍出版記念】 10周回って、エージェント開発は RAGがすべてだった。〜RAGの歴史と開発現場で見えた実践知〜
akiratameto
20
7.2k
電話に出る Python のログの話
shinnosuke_kishida
0
220
What's new in Go 1.27?
ciarana
0
430
Android skills に学ぶ
kokiko
0
170
[ホンマでっか SRE] あなたはなぜ SRE に?
_awache
0
110
Oracle MCP Servers Explained
thatjeffsmith
1
470
巨大気象データと戦う ― サロゲートモデル学習を高速化する圧縮技術
gpuunite_official
0
260
MCPを待つな、パスキーを拡げよう(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
110
Featured
See All Featured
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
220
BBQ
matthewcrist
89
10k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
250
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
800
The SEO Collaboration Effect
kristinabergwall1
1
530
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Mobile First: as difficult as doing things right
swwweet
225
10k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
260
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
400
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内のバグを発見し、修正を行った。
感想 ・本当に本当に勉強になりました。 - もっと勉強します。。。 ・想像してたより、すごいサービスだと思った。(小学生並みの(以下略)) - 同時に改善できる点も多くあり、自分の手でより良くしたいと感じた。