Difference between revisions of "GoVPP/Performance"
From fd.io
< GoVPP
(→GoVPP Performance) |
(→GoVPP Performance) |
||
Line 10: | Line 10: | ||
|- | |- | ||
|1 | |1 | ||
− | |C application - control ping | + | |C application (vppapiclient) - control ping |
|762 000 req/second | |762 000 req/second | ||
|- | |- | ||
Line 29: | Line 29: | ||
|+Synchronous API | |+Synchronous API | ||
|- | |- | ||
− | | | + | |5 |
|C application - control ping | |C application - control ping | ||
|2340 req/second | |2340 req/second | ||
|- | |- | ||
− | | | + | |6 |
|GoVPP - control ping | |GoVPP - control ping | ||
|107 req/second | |107 req/second | ||
+ | |} | ||
+ | |||
+ | As the results show, there is quite big difference between the performance of a C test application and the GoVPP. In order to identify the difference and bottlenecks, we: | ||
+ | * performed profiling of the execution of the test 2 (asynchronous GoVPP) and 6 (synchronous GoVPP). | ||
+ | * performed the measurements from the bare Go application that called vppapiclient library directly, without any further processing in Go, with following results: | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |+Synchronous API | ||
+ | |- | ||
+ | |7 | ||
+ | |Go async - no encode & decode, callback once per 100 replies | ||
+ | |761 836 req/second | ||
+ | |- | ||
+ | |8 | ||
+ | |Go async - no encode & decode | ||
+ | |554 215 req/second | ||
+ | |- | ||
+ | |9 | ||
+ | |Go async - with encode & decode, no message passing | ||
+ | |284 283 req/second | ||
+ | |- | ||
+ | |10 | ||
+ | |Go async - with encode & decode, with message passing | ||
+ | |250 861 req/second | ||
|} | |} |
Revision as of 15:01, 11 July 2017
GoVPP Performance
GoVPP performance has been measured using the perf-bench example binary on an Ubuntu 16.04 LTS virtual machine running on a laptop with Intel® Core™ i7-6820HQ CPU @ 2.70GHz and 16 GB of RAM. The virtual machine has been assigned all CPU cores and 8 GB of RAM.
The benchmark application is able to measure the performance of both synchronous and asynchronous binary API. As the results of the benchmark show; in case that speed is an issue, asynchronous API is recommended:
1 | C application (vppapiclient) - control ping | 762 000 req/second |
2 | GoVPP - control ping | 251 878 req/second |
3 | GoVPP - l2fib add | 245 560 req/second |
4 | GoVPP - interface dump | 210 305 req/second |
5 | C application - control ping | 2340 req/second |
6 | GoVPP - control ping | 107 req/second |
As the results show, there is quite big difference between the performance of a C test application and the GoVPP. In order to identify the difference and bottlenecks, we:
- performed profiling of the execution of the test 2 (asynchronous GoVPP) and 6 (synchronous GoVPP).
- performed the measurements from the bare Go application that called vppapiclient library directly, without any further processing in Go, with following results:
7 | Go async - no encode & decode, callback once per 100 replies | 761 836 req/second |
8 | Go async - no encode & decode | 554 215 req/second |
9 | Go async - with encode & decode, no message passing | 284 283 req/second |
10 | Go async - with encode & decode, with message passing | 250 861 req/second |