|
| 1 | +# Performance Test |
| 2 | + |
| 3 | +Workflow-core version 3.7.0 was put under test to evaluate its performance. The setup used was single node with the default MemoryPersistenceProvider persistence provider. |
| 4 | + |
| 5 | +## Methodology |
| 6 | + |
| 7 | +- Test Environment - Test were run on following two environments one after the other to see how workflow-core performance with a lower vs higher hardware configuration. |
| 8 | + - Lower configuration |
| 9 | + - Cores: 8 vCPU ([Standard_D8s_v3](https://learn.microsoft.com/azure/virtual-machines/dv3-dsv3-series)) |
| 10 | + - RAM: 32 GB |
| 11 | + - OS: Linux Ubuntu 20.04 |
| 12 | + - dotNet 6 |
| 13 | + - Higher configuration |
| 14 | + - Cores: 32 vCPU ([Standard_D32as_v4](https://learn.microsoft.com/azure/virtual-machines/dav4-dasv4-series)) |
| 15 | + - RAM: 128 GB |
| 16 | + - OS: Linux Ubuntu 20.04 |
| 17 | + - dotNet 6 |
| 18 | +- Test Workflow: Workflow consist of 3 basic steps. These 3 simple steps were chosen to test the performance of the workflow engine with minimal yet sufficient complexity and to avoid any external dependencies. |
| 19 | + - Step1 : Generate a [random number](https://learn.microsoft.com/dotnet/api/system.random?view=net-6.0) between 1 to 10 and print it on standard output. |
| 20 | + - Step2 : [Conditional step](https://github.com/danielgerlag/workflow-core/blob/master/docs/control-structures.md) |
| 21 | + - Step 2.1: If value generate in step1 is > 5 then print it on standard output. |
| 22 | + - Step 2.2: If value generate in step1 is <= 5 then print it on standard output. |
| 23 | + - Step3: Prints a good bye message on standard output. |
| 24 | +- Test tools: |
| 25 | + - [NBomber](https://nbomber.com/docs/getting-started/overview/) was used as performance testing framework with C# console app as base. |
| 26 | + |
| 27 | +- Test scenarios: |
| 28 | + - Each type of test run executed for 20 minutes. |
| 29 | + - NBomber Load Simulation of type [KeepConstant](https://nbomber.com/docs/using-nbomber/basic-api/load-simulation#keep-constant) copies was used. This type of simulation keep a constant amount of Scenario copies(instances) for a specific period. |
| 30 | + - Concurrent copies [1,2,3,4,5,6,7,8,10,12,14,16,32,64,128,256,512,1024] were tested. |
| 31 | + - For example if we take Concurrent copies=4 and Duration=20 minutes this means that NBomber will ensure that we have 4 instance of Test Workflow running in parallel for 20 minutes. |
| 32 | + |
| 33 | +## Results |
| 34 | + |
| 35 | +- Workflow per seconds - Below tables shows how many workflows we are able to execute per second on two different environment with increasing number of concurrent copies. |
| 36 | + |
| 37 | +| **Concurrent Copies** | **8 vCPU** | **32 vCPU** | |
| 38 | +| :-------------------: | :--------: | :---------: | |
| 39 | +| **1** | 300.6 | 504.7 | |
| 40 | +| **2** | 310.3 | 513.1 | |
| 41 | +| **3** | 309.6 | 519.3 | |
| 42 | +| **4** | 314.7 | 521.3 | |
| 43 | +| **5** | 312.4 | 519.0 | |
| 44 | +| **6** | 314.7 | 517.7 | |
| 45 | +| **7** | 318.9 | 516.7 | |
| 46 | +| **8** | 318.4 | 517.5 | |
| 47 | +| **10** | 322.6 | 517.1 | |
| 48 | +| **12** | 319.7 | 517.6 | |
| 49 | +| **14** | 322.4 | 518.1 | |
| 50 | +| **16** | 327.0 | 515.5 | |
| 51 | +| **32** | 327.7 | 515.8 | |
| 52 | +| **64** | 330.7 | 523.7 | |
| 53 | +| **128** | 332.8 | 526.9 | |
| 54 | +| **256** | 332.8 | 529.1 | |
| 55 | +| **512** | 332.8 | 529.1 | |
| 56 | +| **1024** | 341.3 | 529.1 | |
| 57 | + |
| 58 | + |
| 59 | + |
| 60 | +- Latency - Shows Mean, P99 and P50 latency in milliseconds on two different environment with increasing number of concurrent copies. |
| 61 | + |
| 62 | +| **Concurrent Copies** | **Mean 8 vCPU** | **Mean 32 vCPU** | **P.99 8 vCPU** | **P.99 32 vCPU** | **P.50 8 vCPU** | **P.50 32 vCPU** | |
| 63 | +| :-------------------: | :-------------: | :--------------: | :-------------: | :--------------: | :-------------: | :--------------: | |
| 64 | +| **1** | 3.32 | 1.98 | 12.67 | 2.49 | 3.13 | 1.85 | |
| 65 | +| **2** | 6.43 | 3.89 | 19.96 | 5.67 | 6.17 | 3.65 | |
| 66 | +| **3** | 9.67 | 5.77 | 24.96 | 8.2 | 9.14 | 5.46 | |
| 67 | +| **4** | 12.7 | 7.76 | 27.44 | 13.57 | 12.02 | 7.22 | |
| 68 | +| **5** | 15.99 | 9.63 | 34.59 | 41.89 | 15.14 | 9.08 | |
| 69 | +| **6** | 19.05 | 11.58 | 38.69 | 45.92 | 18.02 | 10.93 | |
| 70 | +| **7** | 21.94 | 13.54 | 42.18 | 48.9 | 20.72 | 12.66 | |
| 71 | +| **8** | 25.11 | 15.45 | 44.35 | 51.04 | 23.92 | 14.54 | |
| 72 | +| **10** | 30.98 | 19.33 | 52.29 | 56.64 | 29.31 | 18.21 | |
| 73 | +| **12** | 37.52 | 23.18 | 59.2 | 63.33 | 35.42 | 21.82 | |
| 74 | +| **14** | 43.44 | 27.01 | 67.33 | 67.58 | 41.28 | 25.55 | |
| 75 | +| **16** | 48.93 | 31.03 | 72.06 | 72.77 | 46.11 | 28.93 | |
| 76 | +| **32** | 97.65 | 62.03 | 130.05 | 104.96 | 94.91 | 58.02 | |
| 77 | +| **64** | 193.53 | 122.24 | 235.14 | 168.45 | 191.49 | 115.26 | |
| 78 | +| **128** | 384.63 | 243.74 | 449.79 | 294.65 | 379.65 | 236.67 | |
| 79 | +| **256** | 769.13 | 486.82 | 834.07 | 561.66 | 766.46 | 498.22 | |
| 80 | +| **512** | 1538.29 | 968.02 | 1725.44 | 1052.67 | 1542.14 | 962.05 | |
| 81 | +| **1024** | 2999.36 | 1935.32 | 3219.46 | 2072.57 | 3086.34 | 1935.36 | |
| 82 | + |
| 83 | + |
| 84 | + |
| 85 | +## References |
| 86 | + |
| 87 | +- [NBomber](https://nbomber.com/docs/getting-started/overview/) |
0 commit comments