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
Masaru OKI
June 28, 2019
Technology
0
1.1k
SONiC動作の仕組み
SONiCは様々なソフトウェアが組み合わさって動作しています。本資料では、SONiCが動作するとき内部でどのように処理されているのかについて、概要を紹介します。
Masaru OKI
June 28, 2019
Tweet
Share
More Decks by Masaru OKI
See All by Masaru OKI
SONiCを自前でビルドする話
imasaruoki
1
1.2k
Ansible把握した 1日目
imasaruoki
0
300
NPLによるデータプレーンプログラミング
imasaruoki
8
2.4k
SONiC近況報告 2019/Fall
imasaruoki
1
1.2k
ホワイトボックススイッチをAnsibleで操る話
imasaruoki
2
2.4k
ホワイトボックススイッチとNOSを取り巻く状況について
imasaruoki
3
2.3k
SONICイントロダクション
imasaruoki
1
470
SONiCをはじめてみよう
imasaruoki
4
1.9k
SONiCで設定するFRRouting
imasaruoki
0
1.6k
Other Decks in Technology
See All in Technology
クラウド関連のインシデントケースを収集して見えてきたもの
lhazy
8
1.1k
Aurora PostgreSQLがCloudWatch Logsに 出力するログの課金を削減してみる #jawsdays2025
non97
1
210
AWSではじめる Web APIテスト実践ガイド / A practical guide to testing Web APIs on AWS
yokawasa
8
710
OCI Success Journey OCIの何が評価されてる?疑問に答える事例セミナー(2025年2月実施)
oracle4engineer
PRO
2
160
日経のデータベース事業とElasticsearch
hinatades
PRO
0
240
遷移の高速化 ヤフートップの試行錯誤
narirou
6
1.2k
依存パッケージの更新はコツコツが勝つコツ! / phpcon_nagoya2025
blue_goheimochi
3
220
Amazon Q Developerの無料利用枠を使い倒してHello worldを表示させよう!
nrinetcom
PRO
2
120
IAMのマニアックな話2025
nrinetcom
PRO
4
740
自分だけの仮想クラスタを高速かつ効率的に作る kubefork
donkomura
0
100
AIエージェント入門
minorun365
PRO
31
18k
株式会社Awarefy(アウェアファイ)会社説明資料 / Awarefy-Company-Deck
awarefy
3
11k
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
Being A Developer After 40
akosma
89
590k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Mobile First: as difficult as doing things right
swwweet
223
9.4k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.1k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.4k
Rails Girls Zürich Keynote
gr2m
94
13k
Typedesign – Prime Four
hannesfritz
40
2.5k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2.1k
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を介して実行