diff options
author | danielhanrahan <daniel.hanrahan@est.tech> | 2024-07-16 11:47:24 +0100 |
---|---|---|
committer | danielhanrahan <daniel.hanrahan@est.tech> | 2024-07-18 12:53:54 +0100 |
commit | dbe7b6675c05a512f50a8282af1eb8edd811fce6 (patch) | |
tree | f35e097f9afc269aea933cfc3e6fbd41d949deb3 /k6-tests | |
parent | 36437900e9b56e798b1397b9f5392ef603d50269 (diff) |
[k6] Measure NCMP overhead for passthrough operations
Measure NCMP overhead by subtracting DMI delay from request duration.
Issue-ID: CPS-2269
Signed-off-by: danielhanrahan <daniel.hanrahan@est.tech>
Change-Id: Ieb4758e9f7cab119da4c28e4a3febfa1361b2613
Diffstat (limited to 'k6-tests')
-rw-r--r-- | k6-tests/ncmp/common/utils.js | 24 | ||||
-rw-r--r-- | k6-tests/ncmp/ncmp-kpi.js | 19 |
2 files changed, 30 insertions, 13 deletions
diff --git a/k6-tests/ncmp/common/utils.js b/k6-tests/ncmp/common/utils.js index 4bf066c840..0f3b8d9c96 100644 --- a/k6-tests/ncmp/common/utils.js +++ b/k6-tests/ncmp/common/utils.js @@ -22,6 +22,8 @@ export const NCMP_BASE_URL = 'http://localhost:8883'; export const DMI_PLUGIN_URL = 'http://ncmp-dmi-plugin-demo-and-csit-stub:8092'; export const TOTAL_CM_HANDLES = 20000; export const REGISTRATION_BATCH_SIZE = 100; +export const READ_DATA_FOR_CM_HANDLE_DELAY_MS = 300; // must have same value as in docker-compose.yml +export const WRITE_DATA_FOR_CM_HANDLE_DELAY_MS = 670; // must have same value as in docker-compose.yml export const CONTENT_TYPE_JSON_PARAM = { headers: {'Content-Type': 'application/json'} }; export function recordTimeInSeconds(functionToExecute) { @@ -53,14 +55,18 @@ export function getRandomCmHandleId() { } export function makeCustomSummaryReport(data, options) { - let summaryCsv = '#,Test Name,Unit,Limit,Actual\n'; - summaryCsv += makeSummaryCsvLine(1, 'Registration of CM-handles', 'CM-handles/second', 'cmhandles_created_per_second', data, options); - summaryCsv += makeSummaryCsvLine(2, 'De-registration of CM-handles', 'CM-handles/second', 'cmhandles_deleted_per_second', data, options); - summaryCsv += makeSummaryCsvLine(3, 'CM-handle ID search with Module filter', 'milliseconds', 'http_req_duration{scenario:id_search_module}', data, options); - summaryCsv += makeSummaryCsvLine(4, 'CM-handle search with Module filter', 'milliseconds', 'http_req_duration{scenario:cm_search_module}', data, options); - summaryCsv += makeSummaryCsvLine(5, 'Synchronous single CM-handle pass-through read', 'requests/second', 'http_reqs{scenario:passthrough_read}', data, options); - summaryCsv += makeSummaryCsvLine(6, 'Synchronous single CM-handle pass-through write', 'requests/second', 'http_reqs{scenario:passthrough_write}', data, options); - return summaryCsv; + const summaryCsvLines = [ + '#,Test Name,Unit,Limit,Actual', + makeSummaryCsvLine('1', 'Registration of CM-handles', 'CM-handles/second', 'cmhandles_created_per_second', data, options), + makeSummaryCsvLine('2', 'De-registration of CM-handles', 'CM-handles/second', 'cmhandles_deleted_per_second', data, options), + makeSummaryCsvLine('3', 'CM-handle ID search with Module filter', 'milliseconds', 'http_req_duration{scenario:id_search_module}', data, options), + makeSummaryCsvLine('4', 'CM-handle search with Module filter', 'milliseconds', 'http_req_duration{scenario:cm_search_module}', data, options), + makeSummaryCsvLine('5a', 'Synchronous single CM-handle pass-through read', 'requests/second', 'http_reqs{scenario:passthrough_read}', data, options), + makeSummaryCsvLine('5b', 'NCMP overhead for Synchronous single CM-handle pass-through read', 'milliseconds', 'ncmp_overhead_passthrough_read', data, options), + makeSummaryCsvLine('6a', 'Synchronous single CM-handle pass-through write', 'requests/second', 'http_reqs{scenario:passthrough_write}', data, options), + makeSummaryCsvLine('6b', 'NCMP overhead for Synchronous single CM-handle pass-through write', 'milliseconds', 'ncmp_overhead_passthrough_write', data, options), + ]; + return summaryCsvLines.join('\n') + '\n'; } function makeSummaryCsvLine(testCase, testName, unit, thresholdInK6, data, options) { @@ -68,5 +74,5 @@ function makeSummaryCsvLine(testCase, testName, unit, thresholdInK6, data, optio const thresholdString = thresholdArray[0]; const [thresholdKey, thresholdOperator, thresholdValue] = thresholdString.split(/\s+/); const actualValue = data.metrics[thresholdInK6].values[thresholdKey].toFixed(3); - return `${testCase},${testName},${unit},${thresholdValue},${actualValue}\n`; + return `${testCase},${testName},${unit},${thresholdValue},${actualValue}`; } diff --git a/k6-tests/ncmp/ncmp-kpi.js b/k6-tests/ncmp/ncmp-kpi.js index 6bf0568077..96c6263d32 100644 --- a/k6-tests/ncmp/ncmp-kpi.js +++ b/k6-tests/ncmp/ncmp-kpi.js @@ -19,14 +19,17 @@ */ import { check } from 'k6'; -import { Gauge } from 'k6/metrics'; -import { TOTAL_CM_HANDLES, makeCustomSummaryReport, recordTimeInSeconds } from './common/utils.js'; +import { Gauge, Trend } from 'k6/metrics'; +import { TOTAL_CM_HANDLES, READ_DATA_FOR_CM_HANDLE_DELAY_MS, WRITE_DATA_FOR_CM_HANDLE_DELAY_MS, + makeCustomSummaryReport, recordTimeInSeconds } from './common/utils.js'; import { registerAllCmHandles, deregisterAllCmHandles } from './common/cmhandle-crud.js'; import { executeCmHandleSearch, executeCmHandleIdSearch } from './common/search-base.js'; import { passthroughRead, passthroughWrite } from './common/passthrough-crud.js'; let cmHandlesCreatedPerSecondGauge = new Gauge('cmhandles_created_per_second'); let cmHandlesDeletedPerSecondGauge = new Gauge('cmhandles_deleted_per_second'); +let passthroughReadNcmpOverheadTrend = new Trend('ncmp_overhead_passthrough_read'); +let passthroughWriteNcmpOverheadTrend = new Trend('ncmp_overhead_passthrough_write'); const DURATION = '15m'; @@ -64,10 +67,14 @@ export const options = { 'cmhandles_deleted_per_second': ['value >= 22'], 'http_reqs{scenario:passthrough_write}': ['rate >= 13'], 'http_reqs{scenario:passthrough_read}': ['rate >= 25'], - 'http_req_failed{scenario:id_search_module}': ['rate == 0'], - 'http_req_failed{scenario:cm_search_module}': ['rate == 0'], + 'ncmp_overhead_passthrough_read': ['avg <= 100'], + 'ncmp_overhead_passthrough_write': ['avg <= 100'], 'http_req_duration{scenario:id_search_module}': ['avg <= 625'], 'http_req_duration{scenario:cm_search_module}': ['avg <= 13000'], + 'http_req_failed{scenario:id_search_module}': ['rate == 0'], + 'http_req_failed{scenario:cm_search_module}': ['rate == 0'], + 'http_req_failed{scenario:passthrough_read}': ['rate == 0'], + 'http_req_failed{scenario:passthrough_write}': ['rate == 0'], }, }; @@ -84,11 +91,15 @@ export function teardown() { export function passthrough_read() { const response = passthroughRead(); check(response, { 'passthrough read status equals 200': (r) => r.status === 200 }); + const overhead = response.timings.duration - READ_DATA_FOR_CM_HANDLE_DELAY_MS; + passthroughReadNcmpOverheadTrend.add(overhead); } export function passthrough_write() { const response = passthroughWrite(); check(response, { 'passthrough write status equals 200': (r) => r.status === 200 }); + const overhead = response.timings.duration - WRITE_DATA_FOR_CM_HANDLE_DELAY_MS; + passthroughWriteNcmpOverheadTrend.add(overhead); } export function id_search_module() { |