Difference between revisions of "GoVPP/Performance"

From fd.io
Jump to: navigation, search
(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
 
|-
 
|-
|1
+
|5
 
|C application - control ping
 
|C application - control ping
 
|2340 req/second
 
|2340 req/second
 
|-
 
|-
|2
+
|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:

Asynchronous API
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
Synchronous API
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:
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