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
SONiC動作の仕組み
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Masaru OKI
June 28, 2019
Technology
1.6k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SONiC動作の仕組み
SONiCは様々なソフトウェアが組み合わさって動作しています。本資料では、SONiCが動作するとき内部でどのように処理されているのかについて、概要を紹介します。
Masaru OKI
June 28, 2019
More Decks by Masaru OKI
See All by Masaru OKI
SONiCを自前でビルドする話
imasaruoki
2
1.9k
Ansible把握した 1日目
imasaruoki
0
410
NPLによるデータプレーンプログラミング
imasaruoki
8
2.8k
SONiC近況報告 2019/Fall
imasaruoki
1
1.4k
ホワイトボックススイッチをAnsibleで操る話
imasaruoki
2
2.7k
ホワイトボックススイッチとNOSを取り巻く状況について
imasaruoki
3
2.7k
SONICイントロダクション
imasaruoki
1
580
SONiCをはじめてみよう
imasaruoki
6
2.4k
SONiCで設定するFRRouting
imasaruoki
0
2k
Other Decks in Technology
See All in Technology
PLaMoを毎日の開発で使い育てていく
pfn
PRO
0
140
データエンジニアこそ組織のオントロジーに向き合うべき — 問いに答えるAIから、事業を動かすAIへ
gappy50
6
2.7k
MCPをつなげて作る組織横断のAIエージェント基盤
tsubakimoto_s
0
410
StepFunctionsとGraphRAGを活用した暗黙知活用のためのRAG基盤
yakumo
0
190
QAタスクをスキル化したいときに考えること
aomoriringo
0
130
最高のシステムプロンプトを作るためにフィードバック機能を導入した話
alchemy1115
1
240
Retriever と Reranker、結局どうする?
kazuaki
1
510
GMOフィナンシャルゲートが挑む、「止まらない」決済インフラ構築の裏側【SORACOM Discovery 2026】
soracom
PRO
0
110
最新IoT事例11選に学ぶ!現場の成功パターンと実践のコツ【SORACOM Discovery 2026】
soracom
PRO
0
120
LLMリーダーボードアップデートに向けたAgentic Math_SWEのトレースについて
nejumi
0
150
コンポーネント名には何を含めるべきなのか? / what-should-be-included-in-component-names
airrnot1106
0
190
新しい SLO が良い感じにハマっている話
z63d
1
530
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
55
10k
The SEO identity crisis: Don't let AI make you average
varn
0
520
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
380
Darren the Foodie - Storyboard
khoart
PRO
3
3.5k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
420
Java REST API Framework Comparison - PWX 2021
mraible
34
9.6k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
230
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.8k
Transcript
SONiC動作の仕組み June 28, 2019 Masaru OKI @masaru0714
SONiCの起動シーケンス 1. Linux kernel起動 2. rcスクリプト起動 3. systemdにより各サービス起動 ◦ bgp.service
◦ database.service ◦ lldp.service ◦ swss.service ◦ syncd.service ◦ など 4. 各サービスの起動スクリプトで dockerコンテナが起動
サービスの起動(database) 1. database.service ◦ ExecStartPre=/usr/bin/database.sh start 2. database.sh ◦ SKUをチェックし既存
docker imageと不一致の場合イメージを再作成 ◦ docker start database ◦ docker imageはdocker-database:latest 3. database docker (docker-database) ◦ supervisordが走る ◦ command=により/usr/bin/redis-server /etc/redis/redis.confが実行される 4. database.sh(docker startのあと) ◦ sonic-cfggen -j /etc/sonic/config_db.json --write-to-db でJSONからDBに変換 3
サービスの起動(bgp) 1. bgp.service ◦ ExecStartPre=/usr/bin/bgp.sh start 2. bgp.sh ◦ SKUをチェックし既存
docker imageと不一致の場合イメージを再作成 ◦ docker start bgp ◦ docker imageはdocker-fpm-frr:latestを使う 3. bgp docker (docker-fpm-frr) ◦ supervisordが走る ◦ command=/usr/bin/start.sh 4. start.sh ◦ テンプレートとConfigからbgpd.conf, zebra.conf, vtysh.confを生成 ◦ supervisorctl startを用いてrsyslogd, bgpcfgd, zebra, staticd, bgpd, fpmsyncdを起動
サービスの起動(ntp) 1. ntp-config.service ◦ ExecStartPre=/usr/bin/ntp-config.sh start 2. ntp-config.sh ◦ sonic-cfggen
-d -t /usr/share/sonic/templates/ntp.conf.j2 >/etc/ntp.conf Jinja2テンプレート ntp.conf.j2をSONiCコンフィグの内容で置換する。 3. systemctl restart ntpによりntpdが新しい設定で再起動。 {% for ntp_server in NTP_SERVER %} server {{ ntp_server }} iburst {% endfor %} interface ignore wildcard {% if MGMT_INTERFACE %} {% for (mgmt_intf, mgmt_prefix) in MGMT_INTERFACE %} interface listen {{ mgmt_prefix | ip }} {% endfor %} {% else %} interface listen eth0 {% endif %} interface listen 127.0.0.1 5
SONiCとdocker • SONiCは、主要な機能をdockerコンテナ内で動かしている。 • show servicesコマンドで確認できる、動いているコンテナ ◦ syncd docker ◦
dhcp_relay docker ◦ radv docker ◦ telemetry docker ◦ snmp docker ◦ teamd docker ◦ swss docker ◦ lldp docker ◦ bgp docker ◦ pmon docker ◦ database docker 6
SONiC内部の各コンポーネントの関係 CONFIG_DB APPL_DB ASIC_DB orchagent syncd saiserver intfsyncd neighsyncd fpmsyncd
lldp_syncd portsyncd teamsyncd arp_update ntp-config.sh rsyslog-config.sh switch ASIC netlink STATE_DB portmgrd intfmgrd vlanmgrd netdev intfs config_db.json ntpd.conf rsyslogd.conf bgpd bgpcfgd ntpd rsyslogd config command show command sonic-cfggen config save config load hostcfgd /etc/pam.d/comm on-auth-sonic tacplus_nss.conf nsswitch.conf COUNTER_DB warmstart vtysh snmp i.e. ip(8) shadow SAI thrift RPC SAI API call
主な機能における関係図 syncd docker (syncd) Switch ASIC database docker (redis server)
swss docker (orchagent他) bgp docker (FRR bgpd) rtnetlink socket redis socket redis socket Control via SAI (C API) Ethernet* (tap) SAI hostif socket for BGP protocol Linux kernel rtnetlink socket CLI (config) 8 asic db config db app db
CLIでIPアドレスを設定する 1. sudo config interface ip add … 2. (config
db) 3. orchagent 4. (asic db) 5. syncd 6. Switch ASIC syncd docker (syncd) Switch ASIC database docker (redis server) swss docker (orchagent他) bgp docker (FRR bgpd) rtnetlink socket redis socket redis socket Control via SAI (C API) Ethernet* (tap) SAI hostif socket for BGP protocol Linux kernel rtnetlink socket CLI (config) 9 asic db config db app db 1 2 3 4 5 6
BGPのプロトコルパケットの送受信 1. bgpd 2. (Ethernet*) 3. syncd (SAI hostif) 4.
Switch ASIC 送信の場合。受信は逆順。 syncd docker (syncd) Switch ASIC database docker (redis server) swss docker (orchagent他) bgp docker (FRR bgpd) rtnetlink socket redis socket redis socket Control via SAI (C API) Ethernet* (tap) SAI hostif socket for BGP protocol Linux kernel rtnetlink socket CLI (config) 10 asic db config db app db 3 4 2 1
BGPによるルーティング情報変更 1. bgpd 2. rtnetlink 3. fpmsyncd 4. (app db)
5. orchagent 6. (asic db) 7. syncd 8. Switch ASIC syncd docker (syncd) Switch ASIC database docker (redis server) swss docker (orchagent他) bgp docker (FRR bgpd) rtnetlink socket redis socket redis socket Control via SAI (C API) Ethernet* (tap) SAI hostif socket for BGP protocol Linux kernel rtnetlink socket CLI (config) 11 asic db config db app db 4 3 6 7 8 1 2 5
SFP, PSU, FAN制御 • カーネルモジュールが用意され、いずれも I2Cで制御する。 • FAN ◦ xxxxxxxxx_monitor_fan.py
(xxxxxxxxxはSKU名) ◦ 常に動いていて、とくにやれることはない • PSU ◦ xxxxxxxxx_monitor_psu.py (xxxxxxxxxはSKU名) ◦ /usr/bin/psud ◦ show platform psustatusで状態参照できる • SFP ◦ eeprom.py, sfputil.pyがportconfigコマンドやshowコマンドから呼ばれる ◦ show interfaces transceiver presenceなどで状態参照できる ◦ portconfigコマンドで速度や FEC設定を変更できる
まとめ • SONiCは主な機能をdockerコンテナで提供している • daemonの設定はJinja2テンプレートからconfファイルを生成している • Config DBに書き、ASIC DBに変換し、syncdによってスイッチASICに設定を反映させる •
Routing protocolやFDBについてはLinux kernelの機能を利用している • ハードウェア制御はPythonスクリプトを使いI2Cを介して実行