7c29a454af776d658be1dc69e0f0b785d4570b8e
[policy/parent.git] / docs / development / devtools / xacml-s3p.rst
1 .. This work is licensed under a
2 .. Creative Commons Attribution 4.0 International License.
3 .. http://creativecommons.org/licenses/by/4.0
4
5 .. _xacml-s3p-label:
6
7 .. toctree::
8    :maxdepth: 2
9
10 Policy XACML PDP component
11 ##########################
12
13 Both the Performance and the Stability tests were executed by performing requests
14 against the Policy RESTful APIs residing on the XACML PDP installed in the windriver
15 lab.  This was running on a kubernetes pod having the following configuration:
16
17 - 16GB RAM
18 - 8 VCPU
19 - 160GB Disk
20
21 Both tests were run via jmeter, which was installed on a separate VM so-as not
22 to impact the performance of the XACML-PDP being tested.
23
24 Performance Test of Policy XACML PDP
25 ************************************
26
27 Summary
28 =======
29
30 The Performance test was executed, and the result analyzed, via:
31
32 .. code-block:: bash
33
34     jmeter -Jduration=1200 -Jusers=10 \
35         -Jxacml_ip=$ip -Jpap_ip=$ip -Japi_ip=$ip \
36         -Jxacml_port=31104 -Jpap_port=32425 -Japi_port=30709 \
37         -n -t perf.jmx
38
39     ./result.sh
40
41 Note: the ports listed above correspond to port 6969 of the respective components.
42
43 The performance test, perf.jmx, runs the following, all in parallel:
44
45 - Healthcheck, 10 simultaneous threads
46 - Statistics, 10 simultaneous threads
47 - Decisions, 10 simultaneous threads, each running the following in sequence:
48
49    - Monitoring Decision
50    - Monitoring Decision, abbreviated
51    - Naming Decision
52    - Optimization Decision
53    - Default Guard Decision (always "Permit")
54    - Frequency Limiter Guard Decision
55    - Min/Max Guard Decision
56
57 When the script starts up, it uses policy-api to create, and policy-pap to deploy,
58 the policies that are needed by the test.  It assumes that the "naming" policy has
59 already been created and deployed.  Once the test completes, it undeploys and deletes
60 the policies that it previously created.
61
62 Results
63 =======
64
65 The test was run for 20 minutes at a time, for different numbers of users (i.e.,
66 threads), with the following results:
67
68 .. csv-table::
69    :header: "Number of Users", "Throughput (requests/second)", "Average Latency (ms)"
70
71    10, 6064, 4.1
72    20, 6495, 7.2
73    40, 6457, 12.2
74    80, 5803, 21.3
75
76
77 Stability Test of Policy XACML PDP
78 ************************************
79
80 Summary
81 =======
82
83 The Stability test was run with the same pods/VMs and uses the same jmeter script as the
84 performance test, except that it was run for 72 hours instead of 20 minutes.  In
85 addition, it was run in the background via "nohup", to prevent it from being interrupted:
86
87 .. code-block:: bash
88
89     nohup jmeter -Jduration=259200 \
90         -Jxacml_ip=$ip -Jpap_ip=$ip -Japi_ip=$ip \
91         -Jxacml_port=31104 -Jpap_port=32425 -Japi_port=30709 \
92         -n -t perf.jmx &
93
94 The memory and CPU usage can be monitored by running "top" on the xacml pod.  By taking
95 a snapshot before the test is started, and again when it completes, the total CPU used
96 by all of the requests can be computed.
97
98 Results
99 =======
100
101 The final output of the jmeter script is found in the nohup.out file:
102
103 .. image:: images/xacml-s3p-jmeter.png
104
105 The final memory and CPU from "top":
106
107 .. image:: images/xacml-s3p-top.png
108
109 The through-put reported by jmeter was 4849 requests/second, with 0 errors.  In addition,
110 the memory usage observed via "top" indicated that the virtual memory and resident set
111 sizes remained virtually unchanged through-out the test.
112
113 Unfortunately, the initial CPU usage was not recorded, so the CPU time reported in
114 the "top" screen-shot includes XACML-PDP start-up time as well as requests that were
115 executed before the stability test was started.  Nevertheless, even including that, we find:
116
117 .. code-block:: bash
118
119     13,166 CPU minutes * 60sec/min * 1000ms/sec / 1,256,834,239 requests = 0.63ms/request