キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 
cancel
454
閲覧回数
10
いいね!
0
コメント
Tomonobu Okada
Cisco Employee
Cisco Employee

Snapshot database とは

NSO 4.4 から追加された commit-queue 用の拡張機能です。そもそも commit-queue とは commit の内容が全てのデバイスに適用されるまで待つのではなく、commit-queue にキューイングして transaction としては終了することによりスループット改善を図っています。これに加え snapshot database は config change-set の計算を transaction lock の外で実行することでさらなるパフォーマンス向上を実現しています。Snapshot database は NSO が元々使用している running database とは別に各デバイスの config を保存していますので、このデータを元に change-set を計算することで transaction の時間を短縮できます。

Snapshot database は CDB のディレクトリに S.cdb という名前で保存されています。

cisco@ncs-run$[4.4.4] tree ncs-cdb
ncs-cdb
├── A.cdb
├── C.cdb
├── O.cdb
├── S.cdb

 

実際に試してみる

事前準備

実際に効果があるかどうか試してみます。なお、本記事では NSO 4.4.4 を使用してテストしています。

まず、snapshot database  は commit-queue が前提ですので commit-queue を有使用する必要があります。以下の例は global レベルでデフォルト有効にしていますが、デバイス毎にも設定できますし、commit 単位でも有効にできます。

admin@ncs(config)# devices global-settings commit-queue enabled-by-default true
admin@ncs(config)# commit

Snapshot database に config を保存させる方法は二通りあります。一つは /ncs-config/cdb/snapshot/pre-populate を true に設定する方法で、この場合自動で config が保存されます。False の場合はデバイスに対して最初に commit-queue を通じて commit が実行された時に保存されます。

 

結果を計測する方法

効果を見るうえで比較的時間がかかる transaction が必要ですので、自動で 5000 の static route 設定を生成する genIpRoute というサービスパッケージを作成しました。seed は IP の最初のオクテットに使用されます。

admin@ncs(config)# genIpRoute 1 seed 1 device ios0

CDB の running に対してどの程度 lock が発生しているか確認するため、ncs --status の出力に含まれる以下をモニターして lock 時間を計測するスクリプトを作成しました。

cdb:
current transaction id: 1512-896657-925449
running:
--- snip ---
read locks: 0
write lock: unset

また、transaction に関しては devel.log の内容を見て確認します。

Commit-queue なしの場合(snapshot を使用しない)

Commit-queue を使用しないで先程の genIpRoute をデバイス ios0 に適用してみます。

admin@ncs(config)# genIpRoute 1 seed 1 device ios0
admin@ncs(config-genIpRoute-1)# commit
Commit complete.

CDB lock

python measure_lock.py
read lock started
write lock started
read lock finished:9.6635 secs
read lock started
write lock finished:20.530179 secs
read lock finished:0.448463 secs

devel.log

<DEBUG> 10-Dec-2017::17:58:21.088 XXXXXXXXXXXXXX ncs[96448]: devel-c trans_lock request daemon id: 4 session id: 109
<DEBUG> 10-Dec-2017::17:58:21.088 XXXXXXXXXXXXXX ncs[96448]: devel-c trans_lock succeeded daemon id: 4 session id: 109

<DEBUG> 10-Dec-2017::17:58:53.640 XXXXXXXXXXXXXX ncs[96448]: devel-c close_trans request daemon id: 4 session id: 109
<DEBUG> 10-Dec-2017::17:58:53.641 XXXXXXXXXXXXXX ncs[96448]: devel-c close_trans succeeded daemon id: 4 session id: 109

Transaction が lock を取得してから完了するまで約 32 秒程度かかっています。また、CDB の write lock は 20 秒ほどかかっています。

 

Commit-queue ありの場合(snapshot を使用)

今後は commit-queue を使用して同様の commit を実行してみます。

admin@ncs(config)# genIpRoute 1 seed 1 device ios0
admin@ncs(config-genIpRoute-1)# commit commit-queue async
commit-queue-id 1512896658100
Commit complete.

CDB lock

read lock started
write lock started
read lock finished:9.685041 secs
write lock finished:1.994608 secs

devel.log

<DEBUG> 10-Dec-2017::18:04:08.053 XXXXXXXXXXXXXX ncs[96448]: devel-c trans_lock request daemon id: 4 session id: 166
<DEBUG> 10-Dec-2017::18:04:08.053 XXXXXXXXXXXXXX ncs[96448]: devel-c trans_lock succeeded daemon id: 4 session id: 166

<DEBUG> 10-Dec-2017::18:04:19.920 XXXXXXXXXXXXXX ncs[96448]: devel-c close_trans request daemon id: 4 session id: 166
<DEBUG> 10-Dec-2017::18:04:19.920 XXXXXXXXXXXXXX ncs[96448]: devel-c close_trans succeeded daemon id: 4 session id: 166

CDB write lock の時間が大幅に短縮され、約 2 秒になりました。また、transaction も 10 秒程度で完了しています。

今回のテストケースでは大きく改善が見られましたが、ユースケースによって効果は必ずしも同様ではないかもしれません。ただ transaction のスループットを改善したいと考えている場合は一度検討されても良いかもしれません。

 

リファレンス

Commit-queue に関する説明は NSO User Guide の CHAPTER 3 The NSO Device Manager / Commit Queue に記載されています。また、snapshot database に関しても同じセクション内の Commit Queue Tuning に説明が載っていますので、参照してみてください。

Getting Started

検索バーにキーワード、フレーズ、または質問を入力し、お探しのものを見つけましょう

シスコ コミュニティをいち早く使いこなしていただけるよう役立つリンクをまとめました。みなさんのジャーニーがより良いものとなるようお手伝いします