Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Test data used complies with Open ROADM YANG model. Specifically, openroadm-device nodes consisting of 86 fragments are created. For example, a test that creates 1000 device nodes will result in 86,000 fragments in the database. Some tests use up to 3000 device nodes (258,000 fragments - equivalent to around 20,000 CM-handles in NCMP), with four anchors replicating the data, meaning that the system has been tested up to 1 million fragments. Not all results are displayed on this page, but are included in the attached spreadsheet.

Storing data nodes

A varying number of Open ROADM device nodes will be stored using CpsDataService::saveData.

Created device nodes11002003004005006007008009001000

Time (seconds)

0.
295
302.364.367.159.7611.5014.7718.4319.7922.1626.54

Observations

  • Storing data nodes has linear time complexity (as expected).
  • Raw performance is roughly 3000 fragments per second for the given test setup.
  • Performance can be improved by enabling write batching (CPS-1795)
  • There are edge cases with exponential complexity.

...

In this scenario, 1000 Open ROADM device nodes are already defined. A number of these existing data nodes will be updated using CpsDataService::updateDataNodeAndDescendants.

Updated device nodes11002003004005006007008009001000

Time (seconds)

0.
215
2212.7928.3844.2351.55

69.46

85.6795.02109.16117.00131.15

Observations

  • Updating data nodes has linear time complexity (as expected).
  • Raw performance is roughly 600 fragments per second for the given model and test setup.
  • Updating data nodes is 5 times slower than storing data nodes.

...

Code Block
languagetext
{
    'openroadm-device': [
        {'device-id':'C201-7-1A-1', 'status':'fail', 'ne-state':'jeopardy'}
    ]
}

Test Results


Updated device nodes11002003004005006007008009001000

Time (seconds)

0.
201
200.
266
270.
276
280.
280
280.
317
320.
379
380.
385
390.
465
470.
485
490.
520
52

0.

561

56

Observations

  • Updating data leaves has linear time complexity.
  • Raw performance is about 3000 fragments per second.
  • This is very fast compared to updating whole data nodes. I recommend that NCMP use this API for updating CM-handle state.

...

In this scenario, 300 Open ROADM device nodes are already defined. A number of these data nodes will be deleted using CpsDataService::deleteDataNodes. The types of nodes will be varied, for example, deleting container nodes, list elements, or whole lists.

Test results

N =
50100150200250300Example xpath
Delete top-level container node-----0.
630
63/openroadm-devices
Batch delete N/300 container nodes0.
150
150.
261
260.
377
380.
453
450.
553
550.
686
69/openroadm-devices/openroadm-device[@device-id='C201-7-1A-10']/org-openroadm-device
Batch delete N/300 lists elements0.
132
130.
248
250.
338
340.
449
450.
545
550.
670
67/openroadm-devices/openroadm-device[@device-id='C201-7-1A-49']
Batch delete N/300 whole lists0.
509
511.
054
051.
401
401.
848
852.
134
132.
555
56/openroadm-devices/openroadm-device[@device-id='C201-7-1A-293']/org-openroadm-device/degree
Try batch delete N/300 non-existing0.
250
250.
535
540.
667
670.
951
951.
145
151.
318
32/path/to/non-existing/node[@id='27']

Observations

  • Delete performance is linear on the amount of data being deleted (as expected).
  • Raw performance of deleting containers of list elements is around 40,000 fragments per second. (So we can delete data nodes around 10x faster than creating them.)
  • Deleting lists is much slower than deleting the parent container of the list (which can be easily improved).
  • Of note, attempting to delete non-existing data nodes takes longer than actually deleting the equivalent amount of nodes with descendants - it is a slow operation.

...

Reading the top-level container node with no descendants:

Total device nodes50010001500200025003000
Time (milliseconds)475248564847

The above data clearly indicates constant time.

Reading the top-level container node with all descendants:

Total device nodes50010001500200025003000
Time (seconds)0.
423
421.
189
191.
536
542.
159
162.
526
532.
696
67

Observations

  • Reading a single top-level container node with no descendants has constant time (as expected).
  • Reading a single top-level container node with all descendants has linear time (as expected).
  • Raw performance of reading with all descendants is roughly 100,000 fragments per second.

...

This test uses CpsDataService::getDataNodesForMultipleXpaths with all descendants to retrieve a varying number of Open ROADM device nodes.

Test results

Total device nodes50010001500200025003000
Time (seconds)0.
619
611.
151
151.
522
522.
136
142.
957
963.
965
97

Special case: attempting to read multiple non-existing data nodes

...

As can be seen below, CPU usage never reached 100% during the tests of the current version.

CM-handle

...

de-registration

ReleaseDateCmHandles100500100020005000100002000040000Comments
KohnOct 2022Time7 sec2 min7 min25 min2.5 hourest: 10 hourest: 2 daysest: 7 daysSome values estimated due to time constraints
LondonMay 2023Time< 1 sec2 sec3 sec5 sec17 sec37 sec85 secERRORError due to 32K limit
current

Aug 2023

Time< 1 sec1 sec3 sec4 sec14 sec23 sec65 sec2 min

...

RemovedTime (sec)CM-handles/sec
5001.535327
10002.656377
500013.262377
1000025.939385
2000056.151356