envoyproxy / envoyproxy/envoy

some performance results of envoy's different versions

Open
#19,103 82 comments 6 reactions 0 assignees View on GitHub
area/perf help wanted investigate
Dominant language
C++
Stars
28.9k
Forks
5.6k
Avg merge
1d 22h
Merged PRs (30d)
430

Description

I did some simple tests today and found that envoy's performance seems to be getting worse and worse. Although I know features should always come at some cost. But those costs seem to be too much.

And although I know that performance is not the first goal of Envoy. But with continuous enhancement of Envoy, the performance seems to degrade too quickly. Here are some simple results of **single envoy worker**:

| Version | QPS |
| ------- | -------- |
| v1.12.4 | 26921.48 |
| v1.13.3 | 25182.18 |
| v1.14.7 | 23732.31 |
| v1.15.5 | 21010.66 |
| v1.16.5 | 19116.81 |
| v1.17.4 | 17804.78 |
| v1.18.4 | 16953.67 |
| v1.19.1 | 16046.59 |
| v1.20.0 | 15949.65 |

I think we should at least prevent it from further deterioration, and at the same time find ways to optimize it.

Here is my config yaml:

```
static_resources:
listeners:
- address:
socket_address:
address: 0.0.0.0
port_value: 9090
filter_chains:
- filters:
- name: envoy.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
codec_type: auto
stat_prefix: ingress_http
route_config:
name: local_route
virtual_hosts:
- name: host-one # prefix route
domains:
- "*"
routes:
- match:
prefix: "/"
route:
cluster: httpbin
http_filters:
- name: envoy.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
dynamic_stats: false
suppress_envoy_headers: true
clusters:
- name: httpbin
connect_timeout: 5s
type: strict_dns
lb_policy: round_robin
load_assignment:
cluster_name: httpbin
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: localhost
port_value: 8080

admin:
access_log_path: "/dev/null"
address:
socket_address:
address: 0.0.0.0
port_value: 20000

```

Back-end: multi-processes Nginx that will return simple short string.

Client command: wrk -c 200 -t 2 -d 180s http://localhost:9090/

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.