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
850
SONiC動作の仕組み
SONiCは様々なソフトウェアが組み合わさって動作しています。本資料では、SONiCが動作するとき内部でどのように処理されているのかについて、概要を紹介します。
Masaru OKI
June 28, 2019
Tweet
Share
More Decks by Masaru OKI
See All by Masaru OKI
Ansible把握した 1日目
imasaruoki
0
210
NPLによるデータプレーンプログラミング
imasaruoki
8
2.1k
SONiC近況報告 2019/Fall
imasaruoki
1
1.1k
ホワイトボックススイッチをAnsibleで操る話
imasaruoki
2
2.1k
ホワイトボックススイッチとNOSを取り巻く状況について
imasaruoki
3
2.1k
SONICイントロダクション
imasaruoki
1
360
SONiCをはじめてみよう
imasaruoki
4
1.4k
SONiCで設定するFRRouting
imasaruoki
0
1.3k
SONiCトラブルシューティング
imasaruoki
0
350
Other Decks in Technology
See All in Technology
ここが嬉しいABAC ここが辛いよABAC #再解説+補足編
masahirokawahara
0
220
NgRx Signal Store
rainerhahnekamp
0
110
Janus
bkuhlmann
1
490
長期運用プロジェクトでのMySQLからTiDB移行の検証
colopl
2
660
ChatGPT for IT Service Management (IT Pro)
dahatake
2
130
社内勉強会運営のコツ
senoo
6
1.1k
普段有償でサポート業務をしているCSAが技術知見を無料で公開する理由
07jp27
1
630
巨大なテーブルのテーブル定義を無停止で安全に誰でも変更できるようにする / Table-definitions-for-huge-tables-can-be-modified-by-anyone-safely-and-non-disruptively
freee
1
740
Tableau事例紹介 / Tableau Case Study of Eureka
kazuya_araki_tokyo
1
170
Google Cloud の AI を支える裏側のインフラを垣間見る!
maroon1st
0
170
コードを書く隙間を見つけて生きていく技術/Findy 思考の現在地
fujiwara3
24
5.1k
検証を通して見えてきたTiDBの性能特性
lycorptech_jp
PRO
6
3.3k
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
59
3.9k
What's in a price? How to price your products and services
michaelherold
237
11k
Why You Should Never Use an ORM
jnunemaker
PRO
50
8.6k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
5
1.5k
Building a Modern Day E-commerce SEO Strategy
aleyda
16
6.4k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
19
1.9k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
6
990
How to Ace a Technical Interview
jacobian
272
22k
What the flash - Photography Introduction
edds
64
11k
From Idea to $5000 a Month in 5 Months
shpigford
377
45k
Fireside Chat
paigeccino
20
2.6k
Practical Orchestrator
shlominoach
181
9.7k
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を介して実行