Company
Solutions
Developers
EN
EN
EnglishChinese
Ampere Computing Logo
Ampere Computing Logo
Solutions
Solutions Home
Systems
Solutions
Performance Overview
Reference Architecture Overview
Tuning Guides for Cloud Native Processing
Tutorials Overview
Workload Briefs Overview
Where to Try
Ampere Systems
Ampere Altra
Azure
Equinix
Google Cloud
Oracle
Tencent Cloud
Ampere AIDownloadsHow It WorksFAQs
Developers
Developer CenterDesigning Cloud ApplicationsBuilding Cloud ApplicationsDeploying Cloud ApplicationsUsing Your DataWorking with Open SourceAmpere Ready SoftwareCommunity Forum
Support
Workloads Ampere Altra

NGINX on Azure Brief

Dpsv5 Virtual Machines Powered by Ampere Altra Processors

Print
Download
Overview
Results and Key Benefits
Diagram: Test configuration for running NGINX
Benchmarking Configuration
Key Findings and Conclusions
Footnotes
Overview

Ampere®Altra® processors are designed to deliver exceptional performance for Cloud Native applications like such as NGINX. They do so by using an innovative architectural design, operating at consistent frequencies, and using single-threaded cores that make applications more resistant to noisy neighbor issues. This allows workloads to run in a predictable manner with minimal variance under increasing loads. The processors are also designed to deliver exceptional energy efficiency. This translates to industry leading performance/watt capabilities and a lower carbon footprint.

Microsoft offers a comprehensive line of Azure Virtual Machines featuring the Ampere®Altra® Cloud Native processor that can run a diverse and broad set of scale-out workloads such as web servers, open-source databases, in-memory applications, big data analytics, gaming, media, and more. The Dpsv5 VMs are general-purpose VMs that provide 2 GB of memory per vCPU and a combination of vCPUs, memory, and local storage to cost-effectively run workloads that do not require larger amounts of RAM per vCPU. The Epsv5 VMs are memory-optimized VMs that provide 4 GB of memory per vCPU, which can benefit memory-intensive workloads including open-source databases, in-memory caching applications, gaming, and data analytics engines.

NGINX is an open source, high performance HTTP server that can also be used as a reverse proxy, load balancer, mail proxy, and HTTP cache. It uses a sophisticated event-driven architecture that allows it to scale to hundreds of thousands of concurrent connections on modern hardware. NGINX is the most popular web server among high-traffic websites as of 2021 with a 33.8% market share, according to W3Techs.

Results and Key Benefits

The Microsoft Azure Dpsv5 VMs powered by Ampere® Altra® processors deliver compelling performance in a variety of NGINX web server configurations, including a TLS-enabled server configuration used in our tests. The web server sends a static file for every request from the load generator over HTTPS. Our metric for performance is the throughput (requests/seconds) with the p99 latency under 5 ms.

Fig.1.NGINX Performance on Microsoft Azure Dpsv5 VMs Powered by Ampere Altra processors

The Ampere Altra-based Microsoft Azure Dpsv5 VMs outperform their x86 VM counterparts. The performance results shown in Figure 1 are normalized to the Intel Xeon Ice Lake based D16sv5 VM. The D16psv5 VM has a 4% better performance than D16sv5 and 9% better than D16asv5.

Fig.2.NGINX Price-Performance on Microsoft Azure Dpsv5 VMs Powered by Ampere Altra processors

Price-performance represents a big portion of the Total Cost of Ownership (TCO) for cloud developers and is an important consideration for a large-scale deployment in the cloud. The Dpsv5 VMs offer 21% to 30% better price-performance than the legacy x86 VMs used in our tests.

Diagram: Test configuration for running NGINX

NGINX.jpg

Benchmarking Configuration

In our tests, NGINX was hosted on 16 vCPU VMs. We compared the Ampere Altra-based Microsoft Azure D16psv5 to the Intel Xeon Ice Lake based D16sv5 and the AMD Milan based D16asv5 VMs. Like most open-source software, NGINX is natively supported on AArch64 and we used the corresponding package manager provided by the OS to install NGINX on all the server VMs. The NGINX server serves a static file compressed with gzip over HTTPS to a client request. WRK is used as a load generator running on a 32 vCPU VM. Performance NGINX is measured in requests per second under a Service Level Agreement (SLA). We use no more than 5 ms for the 99th percentile latency (p99) as the SLA. We configured the thread count and concurrency levels to achieve maximum throughput while keeping the p99 latency under 5 ms. The client and server VMs were configured to be part of the same subnet to achieve the best network throughput.

Standard D16s v5Standard D16as v5Standard D16ps v5
Number of vCPUs 161616
Hourly cost$0.768$0.688$0.616
Operating SystemUbuntu 20.04.4 LTSUbuntu 20.04.4 LTSUbuntu 20.04.4 LTS
Kernel5.13.0-1017-azure5.13.0-1017-azure5.13.0-1017-azure
Memory64GB64GB64GB
DiskPremium SSD 30GBPremium SSD 30GBPremium SSD 30GB
NGINX version1.18.01.18.01.18.0
WRK version4.2.0 4.2.0 4.2.0
Static File Size53KB53KB53KB

NGINX configuration for a TLS enabled server

# For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Documentation: http://nginx.org/ru/docs/ user nginx; worker_processes auto; worker_rlimit_nofile 104857600; error_log /var/log/nginx/error.log; pid /run/nginx.pid; # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; events { use epoll; accept_mutex off; worker_connections 10240; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; #access_log /var/log/nginx/access.log main; access_log off; open_file_cache max=10240000 inactive=60s; open_file_cache_valid 80s; open_file_cache_min_uses 1; keepalive_requests 100000000000; keepalive_timeout 300s; sendfile on; tcp_nopush on; tcp_nodelay on; types_hash_max_size 4096; include /etc/nginx/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name _; root /usr/share/nginx/html; ssl_certificate "/etc/pki/tls/certs/NGINX_TEST_SSL.crt"; ssl_certificate_key "/etc/pki/tls/private/NGINX_TEST_SSL.key"; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers "AES128+SHA256 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !MEDIUM !RC4"; ssl_prefer_server_ciphers on; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } }

The configuration file below shows the gzip compression settings we have used with NGINX.

gzip on; gzip_min_length 100; gzip_buffers 8 32k; gzip_types text/plain text/css application/x-javascript text/xml application/xml text/javascript; gzip_vary on;

On the client side, the wrk command line used is shown below. We varied $thread and $connection to arrive at the best throughput under the 5 ms p.99 latency SLA.

./wrk-4.2.0/wrk -t$thread -c$connection -H 'Accept-Encoding: gzip' -d10s https://${NGINX_HOST}:443/${filename} --latency
Key Findings and Conclusions

The Microsoft Azure Dpsv5 VMs powered by Ampere Altra processors are an excellent choice for Cloud Native workloads such as NGINX due to the innovative Cloud Native design and the fantastic price-performance that they offer. For cloud application developers, transitioning NGINX applications from legacy x86 VMs to Ampere Altra VMs is seamless today due to the maturity of the AArch64 software ecosystem. All in all, great performance and compelling price-performance, all while reducing your carbon footprint.

For more information about Azure virtual machines with Ampere Altra Arm-based processors, please visit the Azure blog for further details.

Footnotes

All data and information contained herein is for informational purposes only and Ampere reserves the right to change it without notice. This document may contain technical inaccuracies, omissions and typographical errors, and Ampere is under no obligation to update or correct this information. Ampere makes no representations or warranties of any kind, including but not limited to express or implied guarantees of noninfringement, merchantability, or fitness for a particular purpose, and assumes no liability of any kind. All information is provided “AS IS.” This document is not an offer or a binding commitment by Ampere. Use of the products contemplated herein requires the subsequent negotiation and execution of a definitive agreement or is subject to Ampere’s Terms and Conditions for the Sale of Goods.

System configurations, components, software versions, and testing environments that differ from those used in Ampere’s tests may result in different measurements than those obtained by Ampere.

Price performance was calculated using Microsoft's Virtual Machines Pricing, in September of 2022. Refer to individual tests for more information.

©2022 Ampere Computing. All Rights Reserved. Ampere, Ampere Computing, Altra and the ‘A’ logo are all registered trademarks or trademarks of Ampere Computing. Arm is a registered trademark of Arm Limited (or its subsidiaries). All other product names used in this publication are for identification purposes only and may be trademarks of their respective companies.

Ampere Computing® / 4655 Great America Parkway, Suite 601 / Santa Clara, CA 95054 / amperecomputing.com

Ampere Computing

4655 Great America Parkway

Suite 601 Santa Clara, CA 95054

Tel: +1-669-770-3700

info[at]amperecomputing.com

About
image
image
image
image
© 2023 Ampere Computing LLC. All rights reserved. Ampere, Altra and the A and Ampere logos are registered trademarks or trademarks of Ampere Computing.