I'm interested in load (/stress) testing openvpn servers running on various hardware. The idea is to have a good definition of
load
which I can use to ensure that user experience when connecting to a server always
good when load is below a certain level. The definition of
good is somewhat connected to that of
load. I'd expect the main factor in defining
good will be bandwidth, but things like reliability, e.g. ability to connect and stay connected, jitter, variance of bandwidth, will also play a part.
N.B.
- I'll be testing various hardware setups with various numbers of VPN instances running during this process.
- I'm not interested in varying openvpn configs. These are already optimal for my use cases so I'll be load testing under the assumption those are static.
I'm interested in knowing if anyone has aggressively undertaken such tests before. I have lots of ideas for what I'll test but it'd be good to learn from previous experience if there's any out there. I've done a fair bit of research and the only substantial thing in this direction I found was here:
https://community.openvpn.net/openvpn/wiki/PerformanceTesting. This seems roughly in the direction I'm going in but details on that seem quite vague and there are limited results.
Roughly so far my plan is to stress servers using multiple client machines. The type of load I'll generate includes:
- Concurrent "small" GET requests.
- Concurrent file downloads of varying size.
- Concurrent file uploads of varying size.
- Concurrent DNS requests.
- Concurrent client connections
- Artificially generated TCP or UDP load.
Once the load is applied I'll then record observable load metrics from the server, e.g. bandwidth usage, cpu load, mem usage (anything available which is easily observable really). From these metrics I'll form a definition of
load (they are effectively proxies for load). I'll then run a few tests which mimmic user behaviour and measure the impact with different loads - e.g. how are user download speeds affected.
N.B. I will also be testing with various network setups for the hardware and tests in order to check the impact on results.
I'm interested in opinions on this type of investigation. Has anyone done this before? Are there any obvious problems? Are there better ways to load? Are there better metrics to analyse?
Thanks!