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
SONiC動作の仕組み
Search
Masaru OKI
June 28, 2019
Technology
1.7k
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
430
NPLによるデータプレーンプログラミング
imasaruoki
8
2.9k
SONiC近況報告 2019/Fall
imasaruoki
1
1.4k
ホワイトボックススイッチをAnsibleで操る話
imasaruoki
2
2.7k
ホワイトボックススイッチとNOSを取り巻く状況について
imasaruoki
3
2.7k
SONICイントロダクション
imasaruoki
1
600
SONiCをはじめてみよう
imasaruoki
6
2.5k
SONiCで設定するFRRouting
imasaruoki
0
2k
Other Decks in Technology
See All in Technology
VS Code × GitHub Copilot での Fabric 開発
ryomaru0825
1
210
1万名の社員が使う認証基盤で どう信頼性を担保するか?
kairim0
0
140
検証フェーズはAIの回答を判断するための学習機会
toru_kubota
2
210
生成AIを使って「人が」考える技術 ― AI時代の人機共想と実践ノウハウ|UNITT AC2026
ishiirikie
0
510
[2026 Oracle Technical Deep Dive] AI時代のデータベース基盤をどう選ぶ? Exadata Database Serviceの選択肢と使い分け (2026年9月17日開催)
oracle4engineer
PRO
0
120
企業の現実世界をグラフで写し取る
sansantech
PRO
0
230
3人で1000GPU超を統合運用する?マルチクラウド&オンプレを跨ぐ、構築と運用のリアル!
kazukun0716
2
800
Codex概要
ymiya55
0
150
顧客の成果創出とプロダクトの成長を 両立するためのFDE
sansantech
PRO
0
600
AI駆動開発、viviONの1年 ── うまくいったこと・いかなかったこと
vivion
0
120
Swap and Memory Reclaim - Squeezing Out More RAM
ennael
PRO
1
1.5k
オブザーバビリティを高める AI エージェント体験を考える / Designing AI Agent Experiences That Enhance Observability
aoto
PRO
1
140
Featured
See All Featured
Practical Orchestrator
shlominoach
192
12k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
560
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
200
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
390
Balancing Empowerment & Direction
lara
6
1.3k
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.8k
[SF Ruby Conf 2025] Rails X
palkan
3
1.4k
Prompt Engineering for Job Search
mfonobong
0
470
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
The SEO Collaboration Effect
kristinabergwall1
1
580
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
440
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を介して実行