From 4d460ff77b1f1bf0e77bdc1b6c6f6878a6c400af Mon Sep 17 00:00:00 2001 From: Pawel Suwala Date: Fri, 1 May 2020 00:56:45 +0200 Subject: [PATCH 1/7] [fix] Fix the codeblock to not require label parameter --- .../templates/doc-page/code-group/doc-page-code-group.view.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/templates/doc-page/code-group/doc-page-code-group.view.js b/src/components/templates/doc-page/code-group/doc-page-code-group.view.js index 8e9ce4ec3a..801fcd710f 100644 --- a/src/components/templates/doc-page/code-group/doc-page-code-group.view.js +++ b/src/components/templates/doc-page/code-group/doc-page-code-group.view.js @@ -19,7 +19,7 @@ export const CodeGroup = ({ const randomKey = getRandomKey(); return (
- {labels.length ? ( + {labels && labels.length ? (
{labels.map((label, i) => (
Date: Fri, 1 May 2020 01:19:24 +0200 Subject: [PATCH 2/7] first draft of the Hardware requirements article --- .../04 Large-scale k6 testing.md | 427 ++++++++++++++++++ .../large-scale-testing-3-terminals.png | Bin 0 -> 189726 bytes 2 files changed, 427 insertions(+) create mode 100644 src/data/markdown/docs/01 guides/05 Testing Guides/04 Large-scale k6 testing.md create mode 100644 src/data/markdown/docs/01 guides/05 Testing Guides/images/large-scale-testing-3-terminals.png diff --git a/src/data/markdown/docs/01 guides/05 Testing Guides/04 Large-scale k6 testing.md b/src/data/markdown/docs/01 guides/05 Testing Guides/04 Large-scale k6 testing.md new file mode 100644 index 0000000000..bf1013472e --- /dev/null +++ b/src/data/markdown/docs/01 guides/05 Testing Guides/04 Large-scale k6 testing.md @@ -0,0 +1,427 @@ +--- +title: "Hardware-sizing for large-scale k6 tests" +excerpt: "How to run large-scale k6 tests without distributed-execution" +--- + +This document explains how to launch a large-scale k6 test on a single machine without the need of distributed execution. + +The common misconception of many load-testers is that distributed-execution (ability to launch a load test on multiple machines) is required to generate large load. This is not the case with k6. + +k6 is different from many other load-testing tools in a way it handles hardware resources. A single k6 process will efficiently use all CPU cores on a load-generator machine. +Single instance of k6 is often enough to generate load of 30.000-40.000 simultaneus users (VUs). This amount of VUs can generate upwards of 300.000 requests per second (RPS). + +Unless you need more than 100.000-300.000 requests per second (6-12M requests per minute), a single instance of k6 will likely be sufficient for your needs. + +Below we will explore what hardware is needed for generating different levels of load. + + +## OS fine-tuning for maximum performance + +For the purpose of this demonstration, we are using a Linix (Ubuntu Server) machine. The instructions will be the same for any Linux distribution. + +The following configuration changes are required to allow the k6 instance to use the full network capacity of the server. +Detailed information about these settings can be found in our [OS Fine tuning article](/misc/fine-tuning-os). + +
+ +```bash +sysctl -w net.ipv4.ip_local_port_range="1024 65535" +sysctl -w net.ipv4.tcp_tw_reuse=1 +sysctl -w net.ipv4.tcp_timestamps=1 +ulimit -n 250000 +``` + +
+ +For quick testing, you can paste these commands in the root terminal window. To make these changes permanent, refer to the instructions of your Linux distribution. + +## Hardware considerations + +### Network +Network throughput of the machine is an important consideration when running large tests. +Many AWS EC2 machines come with 1Gbit/s connection which may limit the amount of load k6 can generate. + +When running the test, you can use `iftop` in the terminal to view in real time the amount of network traffic generated. +If the traffic is constant at 1Gbit/s, your test is probably limited by the network card. Consider upgrading to a different EC2 instance. + +### CPU +Unlike many other load testing tools, k6 is heavily multithreaded. It will effectively use all available CPU cores. + +The amount of CPU you need depends on your test files (sometimes called test script). +Regardless of the test file, you can assume that large tests require significant amount of CPU power. +We recommend that you size the machine to have at least 20% idle cycles (up to 80% used by k6, 20% idle). +If k6 uses 100% to generate load, it won't have enough CPU to measure the responses correctly. +This may cause the result metrics to have much larger response time than in reality. + +### Memory +k6 likes memory, but [it isn't as greedy as other load testing tools](https://k6.io/blog/comparing-best-open-source-load-testing-tools#memory-usage). +Memory consumption heavily depend on your test scenarios. To estimate the memory requirement of your test, +run the test on your laptop with 100VUs and multiply the consumed memory by the target number of VUs. + +Simple tests will use ~1-5MB per VU. (1000VUs = 1-5GB). +Tests that are using file-uploads can consume tens of megabytes per VU. + +## General advice for running large tests. + +### Make your test code resilient + +When running large stress tests, your script can't assume anything about the HTTP response. +Often performance tests are written with a "happy path" in mind. +For example, a "happy path" check like the one below is something that we see in k6 often. + +
+ +```javascript +let checkRes = check(res, { + "Homepage body size is 11026 bytes": (r) => r.body.length === 11026, +}); +``` + +
+ +Code like this runs fine when the system under test (SUT) is not overloaded and returns proper responses. +When the system starts to fail, the above check won't work as expected. + +The issue here is that the check assumes that there's always a body in a response. The `r.body` may not exist if server is failing. +In such case the check itself won't work as expected and error similar to the one below will be returned: + +
+ +``` +ERRO[0625] TypeError: Cannot read property 'length' of undefined +``` + +
+ +To fix this issue your checks must be resilient to any response type. This change will fix the above problem. + +
+ +```javascript +let checkRes = check(res, { + "Homepage body size is 11026 bytes": (r) => r.status === 200 && r.body && r.body.length === 11026 +}); +``` + +
+ +### Monitor the load-generator server + +If you are running a test for the first time, it's a good idea to keep an eye on the available resources while the test is running. +The easiest way to do so is to ssh to the server with 3 sessions: +1. To run k6 +2. To monitor CPU and memory +3. To monitor the network + +For monitoring CPU and memory we recommend [htop](https://en.wikipedia.org/wiki/Htop). +For monitoring network, we recommend [iftop](https://en.wikipedia.org/wiki/Iftop) + +Here's a screenshot of 3 terminal sessions showing k6, iftop and htop. +![k6 iftop htop](./images/large-scale-testing-3-terminals.png) + + +## Additional k6 flags to achieve better performance + +### --compatibility-mode=base + +If you are pushing the limits of the hardware, this is the most impactful k6 setting you can enable. + +This setting disables the internal babel transpilation from ES6 to ES5 and inclusion of corejs library. + +
+ +> ### Some background +> k6 at its core executes ECMAScript 5.1 code. Most k6 script examples and documentation is written in ECMAScript 6+. +> When k6 gets ES6+ code as input, it transpiles it to ES5.1 using babel and loads corejs to enable commonly used APIs. +> This works very well for 99% of use cases, but it adds significant overheard with large tests. + +
+ +To get the best performance out of k6, it's best to transpile the scripts outside of k6 using webpack. + +In this repository we have prepared an efficient transpilation scheme that produces performant ES5.1 code for k6. + +Use it like this: + +
+ +```bash +git clone https://github.com/loadimpact/k6-hardware-benchmark/ +cd k6-hardware-benchmark +yarn install +yarn run to-es5 someplace/yourscript.js +# your ES5 script is in someplace/yourscript.es5.js +``` +
+ + +Once your code is transpiled, run it like this: + +
+ +```bash +k6 run -o cloud --compatibility-mode=base someplace/yourscript.es5.js +``` +
+ +k6 will use about 50% of memory in comparison to running the original script. It will also reduce the CPU load. + +### discardResponseBodies + +You can tell k6 to not process the body of the response by setting `discardResponseBodies` in the options object like this: + +
+ +```js +export let options = { + discardResponseBodies: true, +}; +``` +
+ +k6 by default loads the response body of the request into memory. This causes much higher memory consumption, and often is completely unnecessary. + +### --no-thresholds --no-summary + +If you are running a cloud test with local execution (`k6 run -o cloud`), you may want to disable the terminal summary +and local threshold calculation because thresholds and summary will be displayed in the cloud. +This will save you some memory and CPU cycles. + +Here are all the mentioned flags, all in one: + +
+ +```bash +k6 run -o cloud --vus=20000 --duration=10m --compatibility-mode=base --no-thresholds --no-summary scripts/website.es5.js +``` + +
+ +### Remove unnecessary checks, groups and custom metrics + +If everything else has failed and you are trying to squeeze more performance out of the hardware, +you can consider optimizing the code of the load test itself. + +*Checks and groups* +k6 records the result of every individual check and group separately. If you are using many checks and groups, you may consider removing them to boost performance. + +*Custom metrics* +Similar to checks, values for custom metrics (Trend, Counter, Gauge and Rate) are recorded separately. Consider minimizing the usage of custom metrics. + +*Thresholds with abortOnFail* +If you have configured [abortOnFail thresholds](https://k6.io/docs/using-k6/thresholds#aborting-a-test-when-a-threshold-is-crossed), k6 needs to evaluate the result constantly to verify that the threshold wasn't crossed. Consider removing this setting. + + + +## File upload testing +Special considerations must be taken when testing file-uploads. + +##### Network throughput +The network throughput of the load-generator machine, as well as the SUT will likely be the bottleneck. + +##### Memory +k6 needs significant amount of memory when uploading files, as every VU is independent and has its own memory. + +##### Data transfer costs +k6 can upload a large amount data in a very short period of time. Make sure you understand the data transfer costs before commencing a large scale test. + +[Outbound Data Transfer is expensive in AWS EC2](https://www.cloudmanagementinsider.com/data-transfer-costs-everything-you-need-to-know/). The price ranges between $0.08 to $0.20 per GB depending on the region. +If you use the cheapest region the cost is about $0.08 per GB. Uploading 1TB therefore costs about $80. Long running test can cost several hundreds of dollars in data transfer alone. + +##### EC2 costs +The AWS EC2 instances are relatively cheap. Even the largest instance we have used in this benchmark (m5.24xlarge) costs only $4.6 per hour. Make sure to turn off the load-gen servers once you are done with your testing. Forgotten EC2 server will cost $3312 per month. +Tip: it's often possible to launch "spot instances" of the same hardware for 10-20% of the cost. + +## Errors + +If you run into errors during the execution, it's good to understand if they were caused by the load-generator or by the failing SUT. + +### read: connection reset by peer + +Error similar to this one is caused by the target system resetting the TCP connection. This happens when the Load balancer or the server itself isn't able to handle the traffic. + +
+ +```text +WARN[0013] Request Failed error="Get http://test.k6.io: read tcp 172.31.72.209:35288->63.32.205.136:80: read: connection reset by peer" +``` + +
+ +### context deadline exceeded + +Error like this happens when k6 was able to send a request, but the target system didn't respond in time. The default timeout in k6 is 60 seconds. If your system doesn't produce the response in this timeframe, this error will appear. + +
+ +``` +WARN[0064] Request Failed error="Get http://test.k6.io: context deadline exceeded" +``` + +
+ +### dial tcp 52.18.24.222:80: i/o timeout + +This is a similar error to the one above, but in this case k6 wasn't even able to make a request. The target system isn't able to establish a connection. + + +
+ +``` +WARN[0057] Request Failed error="Get http://pawel.staging.loadimpact.com/static/logo.svg?url=v3: dial tcp 52.18.24.222:80: i/o timeout" +``` + +
+ +### socket: too many open files + +This error means that the load-generator machine isn't able to open TCP sockets because it reached the limit of open file descriptors. +Make sure that your limit is set sufficiently high `ulimit -n 250000` should be enough for anyone :tm: + +
+ +``` +WARN[0034] Request Failed error="Get http://99.81.83.131/static/logo.svg?ip=6: dial tcp 99.81.83.131:80: socket: too many open files" +``` + +
+ + +Note: you should decide what level of errors is acceptable. At large scale some errors are always present. +If you make 50M requests with 100 failures, this is generally a good result (0.00002% errors). + +# Benchmarking k6 on AWS hardware + +## Real-life test of a website. + +Setup: +- All tests were executed on AWS EC2 instances +- The "discardResponseBodies" recommendation was NOT used. (results would be better with this setting). +- Scripts used for testing are available in the `/scripts` directory. The results are reproducible +- k6 v0.26.2 was used +- Note: the target system (test.k6.io) was running on a large cluster to boost performance. +- NOTE: the target system (test.k6.io) is a slow-ish PHP website, not optimized for performance - a static website would be much quicker. + +The "website.js" test file uses a wide range of k6 features to make the test emulate a real usage of k6. This is not a test rigged for performance - quite the opposite. +This test uses plenty of custom metrics, checks, parametrization, batches, thresholds and groups. It's a heavy test that should represent well the "real life" use case. + +### AWS m5.large server + +The `m5.large` instance has 8GB of RAM and 2 CPU cores. + +The following command was used to execute the test +
+ +``` +k6 run -o cloud --vus=6000 --duration=10m --compatibility-mode=base --no-thresholds --no-summary -e TEST_NAME="AWS EC2 m5.large" scripts/website.es5.js +``` + +
+ + +Results +- Maximum VUS reached: 6000 +- Memory used: 6.09 GB (out of 8.0) +- CPU load (avg): 1.49 (out of 2.0). +- Peak RPS: ~6000 (note, this test was not optimized for RPS). +- 2x `sleep(5)` in each iteration. + +https://app.k6.io/runs/720172 + +### AWS m5.4xlarge +The `m5.4xlarge` instance has 64GB of RAM and 16 CPU cores. +https://app.k6.io/runs/720179 +
+ +``` +k6 run -o cloud --vus=20000 --duration=10m --compatibility-mode=base --no-thresholds --no-summary -e TEST_NAME="AWS EC2 m5.4xlarge website test" scripts/website.es5.js +``` + +
+ +Results +- Maximum VUS reached: 20.000 +- Memory used: 20.1 GB (out of 61.4) +- CPU load (avg): 8.5 (out of 16.0). +- Peak RPS: ~20.000 (note, this test was not optimized for RPS). +- 2x `sleep(5)` in each iteration. + + +### AWS m5.24xlarge +The m5.24xlarge has 384GB of RAM and 96 CPU cores. +NOTE: sleep has been reduced to 1s instead of 5s to produce more requests. +
+ +``` +k6 run -o cloud --vus=30000 --duration=5m --compatibility-mode=base --no-thresholds --no-summary -e TEST_NAME="AWS EC2 m5.24xlarge website test" scripts/website.es5.js +``` + +
+ +Results +- Maximum VUS reached: 20.000 +- Memory used: XXX GB (out of 370 available) +- CPU load (avg): XXX (out of 96.0). +- Peak RPS: ~61.500. +- `sleep(1)` in each iteration. + +## Testing for RPS. + +As stated at the beginning, k6 can produce a lot of requests very quickly, especially if the target system responds quickly. +Unfortunately our `test.k6.io` target system is rather slow PHP app. Nevertheless using 30k VUs we have reached 188.000 RPS. +Much higher numbers are possible for faster systems. + +### AWS m5.24xlarge +
+ +``` +k6 run -o cloud --vus=30000 --duration=1m --compatibility-mode=base --no-thresholds --no-summary -e TEST_NAME="AWS EC2 m5.24xlarge RPS test" scripts/RPS-optimized.es5.js +``` + +
+ + +Results +- Maximum VUS reached: 30.000 +- Memory used: 24 GB (out of 370 available) +- CPU load (avg): 80 (out of 96.0). +- Peak RPS: ~188.500. + +https://app.k6.io/runs/720216 + +## Testing for data transfer + +k6 can utilize the available network bandwidth when uploading files, but it needs plenty of memory to do so. + +Please read the warning about the cost of data transfer in AWS before commencing a large scale test. + +### AWS m5.24xlarge + +We have executed this test for only 1 minute to minimize the data-transfer costs. In 1 minute, k6 managed to transfer 36 GB of data with 1000 VUs. +
+ +``` +k6 run -o cloud --vus=1000 --duration=1m --compatibility-mode=base --no-thresholds --no-summary -e TEST_NAME="AWS EC2 m5.24xlarge file upload" scripts/file-upload.es5.js +``` + +
+ + +Results +- Maximum VUS reached: 1.000 +- Memory used: 81 GB (out of 370 available) +- CPU load (avg): 9 (out of 96.0). +- Network throughput reached **4.7Gbit/s** +- Data transferred: 36GB. + +Note: each VU in k6 is completely independent, and therefore it doesn't hare any memory with other VUs. +1000VUs uploading 26MB file need as much as 81GB of RAM since each VU holds the copy of the file in memory. + +https://app.k6.io/runs/720228 + + +## Summary + +k6 is able to fully utilize CPU, memory and Network bandwidth available on any hardware we have tested it on. +Single instance of k6 can run 30k+ VUs and produce 100k+ RPS. For the vast majority of systems, load coming from a single k6 process will be more than enough. +At the time of writing this article, distributed execution isn't implemented in k6, but this is not something that \ No newline at end of file diff --git a/src/data/markdown/docs/01 guides/05 Testing Guides/images/large-scale-testing-3-terminals.png b/src/data/markdown/docs/01 guides/05 Testing Guides/images/large-scale-testing-3-terminals.png new file mode 100644 index 0000000000000000000000000000000000000000..18933a59272b2cba81ecfca2bf42579c3d3582eb GIT binary patch literal 189726 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

at5dL$fBxI~uZ7nhLW8qy__7$J5=J># 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 CqaNx2 literal 0 HcmV?d00001 From 693e1076b5519642a16c9c961c202730469edc00 Mon Sep 17 00:00:00 2001 From: sniku Date: Mon, 4 May 2020 16:37:04 +0200 Subject: [PATCH 3/7] cleanup of the hardware article --- .../04 Large-scale k6 testing.md | 137 +++++++++++++----- 1 file changed, 97 insertions(+), 40 deletions(-) diff --git a/src/data/markdown/docs/01 guides/05 Testing Guides/04 Large-scale k6 testing.md b/src/data/markdown/docs/01 guides/05 Testing Guides/04 Large-scale k6 testing.md index bf1013472e..42088146a1 100644 --- a/src/data/markdown/docs/01 guides/05 Testing Guides/04 Large-scale k6 testing.md +++ b/src/data/markdown/docs/01 guides/05 Testing Guides/04 Large-scale k6 testing.md @@ -15,6 +15,18 @@ Unless you need more than 100.000-300.000 requests per second (6-12M requests pe Below we will explore what hardware is needed for generating different levels of load. +

+ + ## OS fine-tuning for maximum performance For the purpose of this demonstration, we are using a Linix (Ubuntu Server) machine. The instructions will be the same for any Linux distribution. @@ -95,11 +107,11 @@ ERRO[0625] TypeError: Cannot read property 'length' of undefined To fix this issue your checks must be resilient to any response type. This change will fix the above problem. -
+
```javascript let checkRes = check(res, { - "Homepage body size is 11026 bytes": (r) => r.status === 200 && r.body && r.body.length === 11026 + "Homepage body size is 11026 bytes": (r) => r.body && r.body.length === 11026 }); ``` @@ -139,7 +151,7 @@ This setting disables the internal babel transpilation from ES6 to ES5 and inclu To get the best performance out of k6, it's best to transpile the scripts outside of k6 using webpack. -In this repository we have prepared an efficient transpilation scheme that produces performant ES5.1 code for k6. +In [k6-hardware-benchmark](https://github.com/loadimpact/k6-hardware-benchmark) repository, we have prepared an efficient transpilation scheme that produces performant ES5.1 code for k6. Use it like this: @@ -192,7 +204,13 @@ Here are all the mentioned flags, all in one:
```bash -k6 run -o cloud --vus=20000 --duration=10m --compatibility-mode=base --no-thresholds --no-summary scripts/website.es5.js +k6 run scripts/website.es5.js \ + -o cloud \ + --vus=20000 \ + --duration=10m \ + --compatibility-mode=base \ + --no-thresholds \ + --no-summary \ ```
@@ -202,13 +220,16 @@ k6 run -o cloud --vus=20000 --duration=10m --compatibility-mode=base --no-thresh If everything else has failed and you are trying to squeeze more performance out of the hardware, you can consider optimizing the code of the load test itself. -*Checks and groups* +**Checks and groups** + k6 records the result of every individual check and group separately. If you are using many checks and groups, you may consider removing them to boost performance. -*Custom metrics* +**Custom metrics** + Similar to checks, values for custom metrics (Trend, Counter, Gauge and Rate) are recorded separately. Consider minimizing the usage of custom metrics. -*Thresholds with abortOnFail* +**Thresholds with abortOnFail** + If you have configured [abortOnFail thresholds](https://k6.io/docs/using-k6/thresholds#aborting-a-test-when-a-threshold-is-crossed), k6 needs to evaluate the result constantly to verify that the threshold wasn't crossed. Consider removing this setting. @@ -216,19 +237,19 @@ If you have configured [abortOnFail thresholds](https://k6.io/docs/using-k6/thre ## File upload testing Special considerations must be taken when testing file-uploads. -##### Network throughput +### Network throughput The network throughput of the load-generator machine, as well as the SUT will likely be the bottleneck. -##### Memory +### Memory k6 needs significant amount of memory when uploading files, as every VU is independent and has its own memory. -##### Data transfer costs +### Data transfer costs k6 can upload a large amount data in a very short period of time. Make sure you understand the data transfer costs before commencing a large scale test. [Outbound Data Transfer is expensive in AWS EC2](https://www.cloudmanagementinsider.com/data-transfer-costs-everything-you-need-to-know/). The price ranges between $0.08 to $0.20 per GB depending on the region. If you use the cheapest region the cost is about $0.08 per GB. Uploading 1TB therefore costs about $80. Long running test can cost several hundreds of dollars in data transfer alone. -##### EC2 costs +### EC2 costs The AWS EC2 instances are relatively cheap. Even the largest instance we have used in this benchmark (m5.24xlarge) costs only $4.6 per hour. Make sure to turn off the load-gen servers once you are done with your testing. Forgotten EC2 server will cost $3312 per month. Tip: it's often possible to launch "spot instances" of the same hardware for 10-20% of the cost. @@ -292,49 +313,69 @@ If you make 50M requests with 100 failures, this is generally a good result (0.0 # Benchmarking k6 on AWS hardware +We have executed few large tests on different EC2 machines to see how much load k6 can generate. +Our general observation is that k6 scales proportionally to the hardware. 2x larger machine is able to generate 2x more traffic. +The limit to this scalability is in the number of open connections. Single Linux machine can open up to `65 535` sockets per IP. +This means that maximum of 65k requests can be executed simultaneously on a single machine. +The RPS limit depends on the response time of the SUT. If responses are delivered in 100ms, the RPS limit is 650 000. + ## Real-life test of a website. +Testing the theoretical limits is fun, but that's not the point of this benchmark. +The point of this benchmark is to give users indication of how much traffic k6 can generate when executing complicated, real-life tests. +For this purpose we have written a rather heavy [real-life website test](https://github.com/loadimpact/k6-hardware-benchmark/blob/master/scripts/website.js) that uses almost all k6 features. + Setup: - All tests were executed on AWS EC2 instances - The "discardResponseBodies" recommendation was NOT used. (results would be better with this setting). - Scripts used for testing are available in the `/scripts` directory. The results are reproducible - k6 v0.26.2 was used - Note: the target system (test.k6.io) was running on a large cluster to boost performance. -- NOTE: the target system (test.k6.io) is a slow-ish PHP website, not optimized for performance - a static website would be much quicker. +- Note: the target system (test.k6.io) is a slow-ish PHP website, not optimized for performance - a static website would be much quicker. The "website.js" test file uses a wide range of k6 features to make the test emulate a real usage of k6. This is not a test rigged for performance - quite the opposite. This test uses plenty of custom metrics, checks, parametrization, batches, thresholds and groups. It's a heavy test that should represent well the "real life" use case. -### AWS m5.large server +### Execution on AWS m5.large EC2 server The `m5.large` instance has 8GB of RAM and 2 CPU cores. The following command was used to execute the test
-``` -k6 run -o cloud --vus=6000 --duration=10m --compatibility-mode=base --no-thresholds --no-summary -e TEST_NAME="AWS EC2 m5.large" scripts/website.es5.js +```bash +k6 run scripts/website.es5.js \ + -o cloud \ + --vus=6000 \ + --duration=10m \ + --compatibility-mode=base \ + --no-thresholds \ + --no-summary ```
- Results - Maximum VUS reached: 6000 - Memory used: 6.09 GB (out of 8.0) - CPU load (avg): 1.49 (out of 2.0). - Peak RPS: ~6000 (note, this test was not optimized for RPS). - 2x `sleep(5)` in each iteration. - -https://app.k6.io/runs/720172 -### AWS m5.4xlarge +### Execution on AWS m5.4xlarge The `m5.4xlarge` instance has 64GB of RAM and 16 CPU cores. https://app.k6.io/runs/720179
-``` -k6 run -o cloud --vus=20000 --duration=10m --compatibility-mode=base --no-thresholds --no-summary -e TEST_NAME="AWS EC2 m5.4xlarge website test" scripts/website.es5.js +```bash +k6 run scripts/website.es5.js \ + -o cloud \ + --vus=20000 \ + --duration=10m \ + --compatibility-mode=base \ + --no-thresholds \ + --no-summary + ```
@@ -347,35 +388,47 @@ Results - 2x `sleep(5)` in each iteration. -### AWS m5.24xlarge +### Execution on AWS m5.24xlarge The m5.24xlarge has 384GB of RAM and 96 CPU cores. NOTE: sleep has been reduced to 1s instead of 5s to produce more requests.
-``` -k6 run -o cloud --vus=30000 --duration=5m --compatibility-mode=base --no-thresholds --no-summary -e TEST_NAME="AWS EC2 m5.24xlarge website test" scripts/website.es5.js +```bash +k6 run scripts/website.es5.js \ + -o cloud \ + --vus=30000 \ + --duration=5m \ + --compatibility-mode=base \ + --no-thresholds \ + --no-summary ```
Results -- Maximum VUS reached: 20.000 -- Memory used: XXX GB (out of 370 available) -- CPU load (avg): XXX (out of 96.0). +- Maximum VUS reached: 30.000 +- Memory used: ~120 GB (out of 370 available) +- CPU load (avg): ~45 (out of 96.0). - Peak RPS: ~61.500. - `sleep(1)` in each iteration. ## Testing for RPS. As stated at the beginning, k6 can produce a lot of requests very quickly, especially if the target system responds quickly. -Unfortunately our `test.k6.io` target system is rather slow PHP app. Nevertheless using 30k VUs we have reached 188.000 RPS. +To test the RPS limit of our app we have written an [RPS-optimized test](https://github.com/loadimpact/k6-hardware-benchmark/blob/master/scripts/RPS-optimized.js). Unfortunately our `test.k6.io` target system is a rather slow PHP app. Nevertheless using 30k VUs we have reached 188.000 RPS. Much higher numbers are possible for faster systems. -### AWS m5.24xlarge +### Execution on AWS m5.24xlarge
-``` -k6 run -o cloud --vus=30000 --duration=1m --compatibility-mode=base --no-thresholds --no-summary -e TEST_NAME="AWS EC2 m5.24xlarge RPS test" scripts/RPS-optimized.es5.js +```bash +k6 run scripts/RPS-optimized.es5.js \ + -o cloud \ + --vus=30000 \ + --duration=1m \ + --compatibility-mode=base \ + --no-thresholds \ + --no-summary ```
@@ -395,18 +448,24 @@ k6 can utilize the available network bandwidth when uploading files, but it need Please read the warning about the cost of data transfer in AWS before commencing a large scale test. -### AWS m5.24xlarge +### Execution on AWS m5.24xlarge + +To test the network throughput we have written a [file-uploading script](https://github.com/loadimpact/k6-hardware-benchmark/blob/master/scripts/file-upload.js). We have executed this test for only 1 minute to minimize the data-transfer costs. In 1 minute, k6 managed to transfer 36 GB of data with 1000 VUs. -We have executed this test for only 1 minute to minimize the data-transfer costs. In 1 minute, k6 managed to transfer 36 GB of data with 1000 VUs.
-``` -k6 run -o cloud --vus=1000 --duration=1m --compatibility-mode=base --no-thresholds --no-summary -e TEST_NAME="AWS EC2 m5.24xlarge file upload" scripts/file-upload.es5.js +```bash +k6 run scripts/file-upload.es5.js \ +-o cloud \ +--vus=1000 \ +--duration=1m \ +--compatibility-mode=base \ +--no-thresholds \ +--no-summary ```
- Results - Maximum VUS reached: 1.000 - Memory used: 81 GB (out of 370 available) @@ -414,14 +473,12 @@ Results - Network throughput reached **4.7Gbit/s** - Data transferred: 36GB. -Note: each VU in k6 is completely independent, and therefore it doesn't hare any memory with other VUs. +Note: each VU in k6 is completely independent, and therefore it doesn't share any memory with other VUs. 1000VUs uploading 26MB file need as much as 81GB of RAM since each VU holds the copy of the file in memory. -https://app.k6.io/runs/720228 - ## Summary k6 is able to fully utilize CPU, memory and Network bandwidth available on any hardware we have tested it on. Single instance of k6 can run 30k+ VUs and produce 100k+ RPS. For the vast majority of systems, load coming from a single k6 process will be more than enough. -At the time of writing this article, distributed execution isn't implemented in k6, but this is not something that \ No newline at end of file +At the time of writing this article, distributed execution isn't implemented in k6, but this is not something that should stop you from running very large load tests. \ No newline at end of file From 9fc86d6d877dc20a6e0f422a057d6184ec078684 Mon Sep 17 00:00:00 2001 From: Pawel Suwala Date: Mon, 4 May 2020 20:17:52 +0200 Subject: [PATCH 4/7] Update src/data/markdown/docs/01 guides/05 Testing Guides/04 Large-scale k6 testing.md Co-authored-by: Mihail Stoykov --- .../01 guides/05 Testing Guides/04 Large-scale k6 testing.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/markdown/docs/01 guides/05 Testing Guides/04 Large-scale k6 testing.md b/src/data/markdown/docs/01 guides/05 Testing Guides/04 Large-scale k6 testing.md index 42088146a1..4175d09d10 100644 --- a/src/data/markdown/docs/01 guides/05 Testing Guides/04 Large-scale k6 testing.md +++ b/src/data/markdown/docs/01 guides/05 Testing Guides/04 Large-scale k6 testing.md @@ -68,7 +68,7 @@ This may cause the result metrics to have much larger response time than in real ### Memory k6 likes memory, but [it isn't as greedy as other load testing tools](https://k6.io/blog/comparing-best-open-source-load-testing-tools#memory-usage). Memory consumption heavily depend on your test scenarios. To estimate the memory requirement of your test, -run the test on your laptop with 100VUs and multiply the consumed memory by the target number of VUs. +run the test on your development machine with 100VUs and multiply the consumed memory by the target number of VUs. Simple tests will use ~1-5MB per VU. (1000VUs = 1-5GB). Tests that are using file-uploads can consume tens of megabytes per VU. @@ -481,4 +481,4 @@ Note: each VU in k6 is completely independent, and therefore it doesn't share an k6 is able to fully utilize CPU, memory and Network bandwidth available on any hardware we have tested it on. Single instance of k6 can run 30k+ VUs and produce 100k+ RPS. For the vast majority of systems, load coming from a single k6 process will be more than enough. -At the time of writing this article, distributed execution isn't implemented in k6, but this is not something that should stop you from running very large load tests. \ No newline at end of file +At the time of writing this article, distributed execution isn't implemented in k6, but this is not something that should stop you from running very large load tests. From f51781fdeafd061076cf9332e030a76689c3cb3f Mon Sep 17 00:00:00 2001 From: Pawel Suwala Date: Mon, 4 May 2020 20:44:11 +0200 Subject: [PATCH 5/7] fixed plenty of spelling mistakes and addressed feedback --- .../04 Large-scale k6 testing.md | 56 +++++++++---------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/src/data/markdown/docs/01 guides/05 Testing Guides/04 Large-scale k6 testing.md b/src/data/markdown/docs/01 guides/05 Testing Guides/04 Large-scale k6 testing.md index 4175d09d10..376f83ebd0 100644 --- a/src/data/markdown/docs/01 guides/05 Testing Guides/04 Large-scale k6 testing.md +++ b/src/data/markdown/docs/01 guides/05 Testing Guides/04 Large-scale k6 testing.md @@ -1,16 +1,16 @@ --- -title: "Hardware-sizing for large-scale k6 tests" +title: "Hardware requirements for large-scale k6 tests" excerpt: "How to run large-scale k6 tests without distributed-execution" --- This document explains how to launch a large-scale k6 test on a single machine without the need of distributed execution. -The common misconception of many load-testers is that distributed-execution (ability to launch a load test on multiple machines) is required to generate large load. This is not the case with k6. +The common misconception of many load testers is that distributed execution (ability to launch a load test on multiple machines) is required to generate large load. This is not the case with k6. -k6 is different from many other load-testing tools in a way it handles hardware resources. A single k6 process will efficiently use all CPU cores on a load-generator machine. -Single instance of k6 is often enough to generate load of 30.000-40.000 simultaneus users (VUs). This amount of VUs can generate upwards of 300.000 requests per second (RPS). +k6 is different from many other load testing tools in the way it handles hardware resources. A single k6 process will efficiently use all CPU cores on a load generator machine. +A single instance of k6 is often enough to generate load of 30.000-40.000 simultaneous users (VUs). This amount of VUs can generate upwards of 300,000 requests per second (RPS). -Unless you need more than 100.000-300.000 requests per second (6-12M requests per minute), a single instance of k6 will likely be sufficient for your needs. +Unless you need more than 100,000-300,000 requests per second (6-12M requests per minute), or geographical distribution of the traffic, a single instance of k6 will likely be sufficient for your needs. Below we will explore what hardware is needed for generating different levels of load. @@ -20,7 +20,7 @@ Below we will explore what hardware is needed for generating different levels of > ### Note about native distributed-execution in k6 > > The long-term goal for k6 is to support distributed execution natively. We are currently laying groundwork for this feature in [PR #1007](https://github.com/loadimpact/k6/pull/1007). -> You can follow this effort on guthub [in issue 140](https://github.com/loadimpact/k6/issues/140). Again, this is useful only if you need to generate load larger than 300k RPS. +> You can follow this effort on GitHub [in issue 140](https://github.com/loadimpact/k6/issues/140). Again, this is useful only if you need to generate load larger than 300k RPS. > > [k6 cloud](/cloud) (a paid service) supports distributed execution already. @@ -29,7 +29,7 @@ Below we will explore what hardware is needed for generating different levels of ## OS fine-tuning for maximum performance -For the purpose of this demonstration, we are using a Linix (Ubuntu Server) machine. The instructions will be the same for any Linux distribution. +For the purpose of this demonstration, we are using a Linux (Ubuntu Server) machine. The instructions will be the same for any Linux distribution. The following configuration changes are required to allow the k6 instance to use the full network capacity of the server. Detailed information about these settings can be found in our [OS Fine tuning article](/misc/fine-tuning-os). @@ -45,7 +45,7 @@ ulimit -n 250000
-For quick testing, you can paste these commands in the root terminal window. To make these changes permanent, refer to the instructions of your Linux distribution. +For quick testing, you can paste these commands in a terminal window as the root user. To make these changes permanent, refer to the instructions of your Linux distribution. ## Hardware considerations @@ -63,7 +63,7 @@ The amount of CPU you need depends on your test files (sometimes called test scr Regardless of the test file, you can assume that large tests require significant amount of CPU power. We recommend that you size the machine to have at least 20% idle cycles (up to 80% used by k6, 20% idle). If k6 uses 100% to generate load, it won't have enough CPU to measure the responses correctly. -This may cause the result metrics to have much larger response time than in reality. +This may cause the result metrics to have a much larger response time than in reality. ### Memory k6 likes memory, but [it isn't as greedy as other load testing tools](https://k6.io/blog/comparing-best-open-source-load-testing-tools#memory-usage). @@ -71,7 +71,7 @@ Memory consumption heavily depend on your test scenarios. To estimate the memory run the test on your development machine with 100VUs and multiply the consumed memory by the target number of VUs. Simple tests will use ~1-5MB per VU. (1000VUs = 1-5GB). -Tests that are using file-uploads can consume tens of megabytes per VU. +Tests that are using file uploads can consume tens of megabytes per VU. ## General advice for running large tests. @@ -94,7 +94,7 @@ let checkRes = check(res, { Code like this runs fine when the system under test (SUT) is not overloaded and returns proper responses. When the system starts to fail, the above check won't work as expected. -The issue here is that the check assumes that there's always a body in a response. The `r.body` may not exist if server is failing. +The issue here is that the check assumes that there's always a body in a response. The `r.body` may not exist if server is failing. In such case the check itself won't work as expected and error similar to the one below will be returned:
@@ -117,10 +117,10 @@ let checkRes = check(res, {
-### Monitor the load-generator server +### Monitor the load generator server If you are running a test for the first time, it's a good idea to keep an eye on the available resources while the test is running. -The easiest way to do so is to ssh to the server with 3 sessions: +The easiest way to do so is to SSH to the server with 3 sessions: 1. To run k6 2. To monitor CPU and memory 3. To monitor the network @@ -138,13 +138,13 @@ Here's a screenshot of 3 terminal sessions showing k6, iftop and htop. If you are pushing the limits of the hardware, this is the most impactful k6 setting you can enable. -This setting disables the internal babel transpilation from ES6 to ES5 and inclusion of corejs library. +This setting disables the internal [Babel](https://babeljs.io/) transpilation from ES6 to ES5.1+ and inclusion of [corejs](https://github.com/zloirock/core-js) library.
> ### Some background > k6 at its core executes ECMAScript 5.1 code. Most k6 script examples and documentation is written in ECMAScript 6+. -> When k6 gets ES6+ code as input, it transpiles it to ES5.1 using babel and loads corejs to enable commonly used APIs. +> By default, k6 transpiles ES6+ code to ES5.1 using babel and loads corejs to enable commonly used APIs. > This works very well for 99% of use cases, but it adds significant overheard with large tests.
@@ -176,7 +176,7 @@ k6 run -o cloud --compatibility-mode=base someplace/yourscript.es5.js ```
-k6 will use about 50% of memory in comparison to running the original script. It will also reduce the CPU load. +k6 will use about 50-85% of memory in comparison to running the original script. It will also reduce the CPU load, and significantly decrease startup time. ### discardResponseBodies @@ -192,10 +192,11 @@ export let options = {
k6 by default loads the response body of the request into memory. This causes much higher memory consumption, and often is completely unnecessary. +If you need response body for some requests you can set [Params.responseType](https://k6.io/docs/javascript-api/k6-http/params-k6-http). ### --no-thresholds --no-summary -If you are running a cloud test with local execution (`k6 run -o cloud`), you may want to disable the terminal summary +If you are running a local test and streaming results to the cloud (`k6 run -o cloud`), you may want to disable the terminal summary and local threshold calculation because thresholds and summary will be displayed in the cloud. This will save you some memory and CPU cycles. @@ -235,10 +236,10 @@ If you have configured [abortOnFail thresholds](https://k6.io/docs/using-k6/thre ## File upload testing -Special considerations must be taken when testing file-uploads. +Special considerations must be taken when testing file uploads. ### Network throughput -The network throughput of the load-generator machine, as well as the SUT will likely be the bottleneck. +The network throughput of the load generator machine, as well as the SUT will likely be the bottleneck. ### Memory k6 needs significant amount of memory when uploading files, as every VU is independent and has its own memory. @@ -250,12 +251,13 @@ k6 can upload a large amount data in a very short period of time. Make sure you If you use the cheapest region the cost is about $0.08 per GB. Uploading 1TB therefore costs about $80. Long running test can cost several hundreds of dollars in data transfer alone. ### EC2 costs -The AWS EC2 instances are relatively cheap. Even the largest instance we have used in this benchmark (m5.24xlarge) costs only $4.6 per hour. Make sure to turn off the load-gen servers once you are done with your testing. Forgotten EC2 server will cost $3312 per month. +The AWS EC2 instances are relatively cheap. Even the largest instance we have used in this benchmark (m5.24xlarge) costs only $4.6 per hour. +Make sure to turn off the load generator servers once you are done with your testing. Forgotten EC2 server will cost $3312 per month. Tip: it's often possible to launch "spot instances" of the same hardware for 10-20% of the cost. ## Errors -If you run into errors during the execution, it's good to understand if they were caused by the load-generator or by the failing SUT. +If you run into errors during the execution, it's good to understand if they were caused by the load generator or by the failing SUT. ### read: connection reset by peer @@ -313,9 +315,9 @@ If you make 50M requests with 100 failures, this is generally a good result (0.0 # Benchmarking k6 on AWS hardware -We have executed few large tests on different EC2 machines to see how much load k6 can generate. +We have executed a few large tests on different EC2 machines to see how much load k6 can generate. Our general observation is that k6 scales proportionally to the hardware. 2x larger machine is able to generate 2x more traffic. -The limit to this scalability is in the number of open connections. Single Linux machine can open up to `65 535` sockets per IP. +The limit to this scalability is in the number of open connections. A single Linux machine can open up to `65 535` sockets per IP. This means that maximum of 65k requests can be executed simultaneously on a single machine. The RPS limit depends on the response time of the SUT. If responses are delivered in 100ms, the RPS limit is 650 000. @@ -364,7 +366,6 @@ Results ### Execution on AWS m5.4xlarge The `m5.4xlarge` instance has 64GB of RAM and 16 CPU cores. -https://app.k6.io/runs/720179
```bash @@ -412,7 +413,7 @@ Results - Peak RPS: ~61.500. - `sleep(1)` in each iteration. -## Testing for RPS. +## Testing for RPS As stated at the beginning, k6 can produce a lot of requests very quickly, especially if the target system responds quickly. To test the RPS limit of our app we have written an [RPS-optimized test](https://github.com/loadimpact/k6-hardware-benchmark/blob/master/scripts/RPS-optimized.js). Unfortunately our `test.k6.io` target system is a rather slow PHP app. Nevertheless using 30k VUs we have reached 188.000 RPS. @@ -440,7 +441,6 @@ Results - CPU load (avg): 80 (out of 96.0). - Peak RPS: ~188.500. -https://app.k6.io/runs/720216 ## Testing for data transfer @@ -450,7 +450,7 @@ Please read the warning about the cost of data transfer in AWS before commencing ### Execution on AWS m5.24xlarge -To test the network throughput we have written a [file-uploading script](https://github.com/loadimpact/k6-hardware-benchmark/blob/master/scripts/file-upload.js). We have executed this test for only 1 minute to minimize the data-transfer costs. In 1 minute, k6 managed to transfer 36 GB of data with 1000 VUs. +To test the network throughput we have written a [file uploading script](https://github.com/loadimpact/k6-hardware-benchmark/blob/master/scripts/file-upload.js). We have executed this test for only 1 minute to minimize the data-transfer costs. In 1 minute, k6 managed to transfer 36 GB of data with 1000 VUs.
@@ -480,5 +480,5 @@ Note: each VU in k6 is completely independent, and therefore it doesn't share an ## Summary k6 is able to fully utilize CPU, memory and Network bandwidth available on any hardware we have tested it on. -Single instance of k6 can run 30k+ VUs and produce 100k+ RPS. For the vast majority of systems, load coming from a single k6 process will be more than enough. +A single instance of k6 can run 30k+ VUs and produce 100k+ RPS. For the vast majority of systems, load coming from a single k6 process will be more than enough. At the time of writing this article, distributed execution isn't implemented in k6, but this is not something that should stop you from running very large load tests. From 58fe0411e5215d0f072778e7a294fe6501ab7c71 Mon Sep 17 00:00:00 2001 From: Pawel Suwala Date: Mon, 4 May 2020 21:16:50 +0200 Subject: [PATCH 6/7] Changed title to "Running large tests" --- .../01 guides/05 Testing Guides/04 Large-scale k6 testing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/markdown/docs/01 guides/05 Testing Guides/04 Large-scale k6 testing.md b/src/data/markdown/docs/01 guides/05 Testing Guides/04 Large-scale k6 testing.md index 376f83ebd0..923793e5c9 100644 --- a/src/data/markdown/docs/01 guides/05 Testing Guides/04 Large-scale k6 testing.md +++ b/src/data/markdown/docs/01 guides/05 Testing Guides/04 Large-scale k6 testing.md @@ -1,5 +1,5 @@ --- -title: "Hardware requirements for large-scale k6 tests" +title: "Running large tests" excerpt: "How to run large-scale k6 tests without distributed-execution" --- From 31ac0ea27afcca61265e43cb09c920485715c600 Mon Sep 17 00:00:00 2001 From: Pawel Suwala Date: Mon, 4 May 2020 21:26:05 +0200 Subject: [PATCH 7/7] more spelling mistaks corrected --- .../04 Large-scale k6 testing.md | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/data/markdown/docs/01 guides/05 Testing Guides/04 Large-scale k6 testing.md b/src/data/markdown/docs/01 guides/05 Testing Guides/04 Large-scale k6 testing.md index 923793e5c9..8a709ba0f8 100644 --- a/src/data/markdown/docs/01 guides/05 Testing Guides/04 Large-scale k6 testing.md +++ b/src/data/markdown/docs/01 guides/05 Testing Guides/04 Large-scale k6 testing.md @@ -3,7 +3,7 @@ title: "Running large tests" excerpt: "How to run large-scale k6 tests without distributed-execution" --- -This document explains how to launch a large-scale k6 test on a single machine without the need of distributed execution. +This document explains how to launch a large-scale k6 test on a single machine without the need for distributed execution. The common misconception of many load testers is that distributed execution (ability to launch a load test on multiple machines) is required to generate large load. This is not the case with k6. @@ -19,7 +19,7 @@ Below we will explore what hardware is needed for generating different levels of > ### Note about native distributed-execution in k6 > -> The long-term goal for k6 is to support distributed execution natively. We are currently laying groundwork for this feature in [PR #1007](https://github.com/loadimpact/k6/pull/1007). +> The long-term goal for k6 is to support distributed execution natively. We are currently laying the groundwork for this feature in [PR #1007](https://github.com/loadimpact/k6/pull/1007). > You can follow this effort on GitHub [in issue 140](https://github.com/loadimpact/k6/issues/140). Again, this is useful only if you need to generate load larger than 300k RPS. > > [k6 cloud](/cloud) (a paid service) supports distributed execution already. @@ -32,7 +32,7 @@ Below we will explore what hardware is needed for generating different levels of For the purpose of this demonstration, we are using a Linux (Ubuntu Server) machine. The instructions will be the same for any Linux distribution. The following configuration changes are required to allow the k6 instance to use the full network capacity of the server. -Detailed information about these settings can be found in our [OS Fine tuning article](/misc/fine-tuning-os). +Detailed information about these settings can be found in our [OS fine-tuning article](/misc/fine-tuning-os).
@@ -53,21 +53,21 @@ For quick testing, you can paste these commands in a terminal window as the root Network throughput of the machine is an important consideration when running large tests. Many AWS EC2 machines come with 1Gbit/s connection which may limit the amount of load k6 can generate. -When running the test, you can use `iftop` in the terminal to view in real time the amount of network traffic generated. +When running the test, you can use `iftop` in the terminal to view in real-time the amount of network traffic generated. If the traffic is constant at 1Gbit/s, your test is probably limited by the network card. Consider upgrading to a different EC2 instance. ### CPU Unlike many other load testing tools, k6 is heavily multithreaded. It will effectively use all available CPU cores. The amount of CPU you need depends on your test files (sometimes called test script). -Regardless of the test file, you can assume that large tests require significant amount of CPU power. +Regardless of the test file, you can assume that large tests require a significant amount of CPU power. We recommend that you size the machine to have at least 20% idle cycles (up to 80% used by k6, 20% idle). If k6 uses 100% to generate load, it won't have enough CPU to measure the responses correctly. This may cause the result metrics to have a much larger response time than in reality. ### Memory k6 likes memory, but [it isn't as greedy as other load testing tools](https://k6.io/blog/comparing-best-open-source-load-testing-tools#memory-usage). -Memory consumption heavily depend on your test scenarios. To estimate the memory requirement of your test, +Memory consumption heavily depends on your test scenarios. To estimate the memory requirement of your test, run the test on your development machine with 100VUs and multiply the consumed memory by the target number of VUs. Simple tests will use ~1-5MB per VU. (1000VUs = 1-5GB). @@ -95,7 +95,7 @@ Code like this runs fine when the system under test (SUT) is not overloaded and When the system starts to fail, the above check won't work as expected. The issue here is that the check assumes that there's always a body in a response. The `r.body` may not exist if server is failing. -In such case the check itself won't work as expected and error similar to the one below will be returned: +In such case, the check itself won't work as expected and error similar to the one below will be returned:
@@ -191,7 +191,7 @@ export let options = { ```
-k6 by default loads the response body of the request into memory. This causes much higher memory consumption, and often is completely unnecessary. +k6 by default loads the response body of the request into memory. This causes much higher memory consumption and often is completely unnecessary. If you need response body for some requests you can set [Params.responseType](https://k6.io/docs/javascript-api/k6-http/params-k6-http). ### --no-thresholds --no-summary @@ -242,13 +242,13 @@ Special considerations must be taken when testing file uploads. The network throughput of the load generator machine, as well as the SUT will likely be the bottleneck. ### Memory -k6 needs significant amount of memory when uploading files, as every VU is independent and has its own memory. +k6 needs a significant amount of memory when uploading files, as every VU is independent and has its own memory. ### Data transfer costs -k6 can upload a large amount data in a very short period of time. Make sure you understand the data transfer costs before commencing a large scale test. +k6 can upload a large amount of data in a very short period of time. Make sure you understand the data transfer costs before commencing a large scale test. [Outbound Data Transfer is expensive in AWS EC2](https://www.cloudmanagementinsider.com/data-transfer-costs-everything-you-need-to-know/). The price ranges between $0.08 to $0.20 per GB depending on the region. -If you use the cheapest region the cost is about $0.08 per GB. Uploading 1TB therefore costs about $80. Long running test can cost several hundreds of dollars in data transfer alone. +If you use the cheapest region the cost is about $0.08 per GB. Uploading 1TB, therefore, costs about $80. Long-running test can cost several hundreds of dollars in data transfer alone. ### EC2 costs The AWS EC2 instances are relatively cheap. Even the largest instance we have used in this benchmark (m5.24xlarge) costs only $4.6 per hour. @@ -285,7 +285,7 @@ WARN[0064] Request Failed error="Get http://test.k6.io: context deadline exce ### dial tcp 52.18.24.222:80: i/o timeout -This is a similar error to the one above, but in this case k6 wasn't even able to make a request. The target system isn't able to establish a connection. +This is a similar error to the one above, but in this case, k6 wasn't even able to make a request. The target system isn't able to establish a connection.
@@ -310,7 +310,7 @@ WARN[0034] Request Failed error="Get http://99.81.83.131/static/logo.svg?ip=
-Note: you should decide what level of errors is acceptable. At large scale some errors are always present. +Note: you should decide what level of errors is acceptable. At large scale, some errors are always present. If you make 50M requests with 100 failures, this is generally a good result (0.00002% errors). # Benchmarking k6 on AWS hardware @@ -324,8 +324,8 @@ The RPS limit depends on the response time of the SUT. If responses are delivere ## Real-life test of a website. Testing the theoretical limits is fun, but that's not the point of this benchmark. -The point of this benchmark is to give users indication of how much traffic k6 can generate when executing complicated, real-life tests. -For this purpose we have written a rather heavy [real-life website test](https://github.com/loadimpact/k6-hardware-benchmark/blob/master/scripts/website.js) that uses almost all k6 features. +The point of this benchmark is to give users an indication of how much traffic k6 can generate when executing complicated, real-life tests. +For this purpose, we have written a rather heavy [real-life website test](https://github.com/loadimpact/k6-hardware-benchmark/blob/master/scripts/website.js) that uses almost all k6 features. Setup: - All tests were executed on AWS EC2 instances @@ -416,7 +416,7 @@ Results ## Testing for RPS As stated at the beginning, k6 can produce a lot of requests very quickly, especially if the target system responds quickly. -To test the RPS limit of our app we have written an [RPS-optimized test](https://github.com/loadimpact/k6-hardware-benchmark/blob/master/scripts/RPS-optimized.js). Unfortunately our `test.k6.io` target system is a rather slow PHP app. Nevertheless using 30k VUs we have reached 188.000 RPS. +To test the RPS limit of our app we have written an [RPS-optimized test](https://github.com/loadimpact/k6-hardware-benchmark/blob/master/scripts/RPS-optimized.js). Unfortunately, our `test.k6.io` target system is a rather slow PHP app. Nevertheless using 30k VUs we have reached 188.000 RPS. Much higher numbers are possible for faster systems. ### Execution on AWS m5.24xlarge @@ -450,7 +450,7 @@ Please read the warning about the cost of data transfer in AWS before commencing ### Execution on AWS m5.24xlarge -To test the network throughput we have written a [file uploading script](https://github.com/loadimpact/k6-hardware-benchmark/blob/master/scripts/file-upload.js). We have executed this test for only 1 minute to minimize the data-transfer costs. In 1 minute, k6 managed to transfer 36 GB of data with 1000 VUs. +To test the network throughput we have written a [file uploading script](https://github.com/loadimpact/k6-hardware-benchmark/blob/master/scripts/file-upload.js). We have executed this test for only 1 minute to minimize the data transfer costs. In 1 minute, k6 managed to transfer 36 GB of data with 1000 VUs.
@@ -479,6 +479,6 @@ Note: each VU in k6 is completely independent, and therefore it doesn't share an ## Summary -k6 is able to fully utilize CPU, memory and Network bandwidth available on any hardware we have tested it on. +k6 is able to fully utilize CPU, memory and network bandwidth available on any hardware we have tested it on. A single instance of k6 can run 30k+ VUs and produce 100k+ RPS. For the vast majority of systems, load coming from a single k6 process will be more than enough. At the time of writing this article, distributed execution isn't implemented in k6, but this is not something that should stop you from running very large load tests.