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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Masaru OKI
June 28, 2019
Technology
1.5k
0
Share
SONiC動作の仕組み
SONiCは様々なソフトウェアが組み合わさって動作しています。本資料では、SONiCが動作するとき内部でどのように処理されているのかについて、概要を紹介します。
Masaru OKI
June 28, 2019
More Decks by Masaru OKI
See All by Masaru OKI
SONiCを自前でビルドする話
imasaruoki
2
1.7k
Ansible把握した 1日目
imasaruoki
0
400
NPLによるデータプレーンプログラミング
imasaruoki
8
2.8k
SONiC近況報告 2019/Fall
imasaruoki
1
1.3k
ホワイトボックススイッチをAnsibleで操る話
imasaruoki
2
2.7k
ホワイトボックススイッチとNOSを取り巻く状況について
imasaruoki
3
2.6k
SONICイントロダクション
imasaruoki
1
560
SONiCをはじめてみよう
imasaruoki
6
2.3k
SONiCで設定するFRRouting
imasaruoki
0
1.9k
Other Decks in Technology
See All in Technology
TanStack Start エコシステムの現在地 / TanStack Start Ecosystem 2026
iktakahiro
1
360
申請待ちゼロへ!AWS × Entra IDで実現した「権限付与」のセルフサービス化
mhrtech
1
240
Data Enabling Team立ち上げました
sansantech
PRO
0
290
ストライクウィッチーズ2期6話のエイラの行動が許せないのでPjMの観点から何をすべきだったのかを考える
ichimichi
1
310
Strands Agents × Amazon Bedrock AgentCoreで パーソナルAIエージェントを作ろう
yokomachi
2
260
機能・非機能の学びを一つに!Agent Skillsで月間レポート作成始めてみた / Unifying Bug & Infra Insights — Building Monthly Quality Reports with Agent Skills
bun913
5
3.8k
Hooks, Filters & Now Context: Why MCPs Are the “Hooks” of the AI Era
miriamschwab
0
130
Kubernetes基盤における開発者体験 とセキュリティの両⽴ / Balancing developer experience and security in a Kubernetes-based environment
chmikata
0
220
ふりかえりを 「あそび」にしたら、 学習が勝手に進んだ / Playful Retros Drive Learning
katoaz
0
430
暗黙知について一歩踏み込んで考える - 暗黙知の4タイプと暗黙考・暗黙動へ
masayamoriofficial
0
770
NgRx SignalStore: The Power of Extensibility
rainerhahnekamp
0
160
Bluesky Meetup in Tokyo vol.4 - 2023to2026
shinoharata
0
130
Featured
See All Featured
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
480
Statistics for Hackers
jakevdp
799
230k
The SEO Collaboration Effect
kristinabergwall1
0
420
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
880
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.2k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.8k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Balancing Empowerment & Direction
lara
5
1k
GitHub's CSS Performance
jonrohan
1032
470k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
190
Writing Fast Ruby
sferik
630
63k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.2k
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を介して実行