Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions assets/sass/post.scss
Original file line number Diff line number Diff line change
Expand Up @@ -107,4 +107,57 @@
color: #666;
text-align: center;
margin-bottom: 10px;
}

// Trophy table — ranked comparison tables with gold/silver/bronze columns.
// Usage in markdown posts:
// <div class="trophy-table-wrap">
// <table class="trophy-table"> ... </table>
// </div>
// Expects columns in order: label | first | second | third
.tpl-post {
.trophy-table-wrap {
overflow-x: auto;
margin: 0 0 24px;
}

.trophy-table {
width: 100%;
margin-bottom: 0; // wrapper handles spacing, override .tpl-post table default
border-collapse: collapse;
font-size: 1rem;
line-height: 1.4;

th,
td {
border: 1px solid #a8b3c1;
padding: 12px 16px;
text-align: left;
vertical-align: middle;
}

thead th {
background-color: #dbe4f0;
color: $brand_dark_blue;
font-weight: 700;
letter-spacing: 0.01em;
}

tbody th {
background-color: #ffffff;
color: $brand_dark_blue;
font-weight: 700;
white-space: nowrap;
}

tbody td {
font-variant-numeric: tabular-nums;
font-weight: 500;
color: #1a1a1a;
}

tbody td:nth-child(2) { background-color: #e8c547; } // gold
tbody td:nth-child(3) { background-color: #c8c8c8; } // silver
tbody td:nth-child(4) { background-color: #d08b4a; } // bronze
}
}
85 changes: 85 additions & 0 deletions content/en/blog/2026-04-09-26Q1-Rustls-Performance.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
---
author: Josh Aas
date: 2026-04-09T00:00:00Z
slug: 26Q1-Rustls-Performance
title: "Q1 2026 Rustls Performance Update"
excerpt: "Test results comparing Rustls performance to other TLS libraries."
display_default_footer: true
display_inline_newsletter_embed: false
---


## Overview

Offering top tier performance is a primary goal for the [Rustls](https://github.com/rustls/rustls) project. As such, the project has developed benchmarks representing some of the most performance critical functions and monitors them closely.

The Rustls project [periodically publishes test results](https://rustls.dev/perf/) that compare Rustls performance to other popular TLS libraries, OpenSSL and BoringSSL.

The previously published test results are from [July of 2025](https://rustls.dev/perf/2025-07-31-report/). The Rustls project is planning to start publishing performance reports more frequently going forward.

Here's how library versions have changed since the previous results:

- Rustls: 0.23.31 (aws-lc-rs 1.13.1) -> 0.23.37 (aws-lc-rs 1.16.0)
- OpenSSL: 3.5.1 -> 3.6.1
- BoringSSL: July 2024 -> March 2026 snapshot

The testing discussed here was done in March of 2026.

## Results

![Bulk throughput speed comparison across BoringSSL, OpenSSL, and Rustls](/images/blog/blog-2026-04-09-bulk-throughput.png)

![Full handshake speed comparison across BoringSSL, OpenSSL, and Rustls](/images/blog/blog-2026-04-09-full-handshake.png)

![Resumed handshake speed comparison across BoringSSL, OpenSSL, and Rustls](/images/blog/blog-2026-04-09-resumed-handshake.png)

## Analysis

<div class="trophy-table-wrap">
<table class="trophy-table">
<thead>
<tr>
<th scope="col">Library</th>
<th scope="col">First Place</th>
<th scope="col">Second Place</th>
<th scope="col">Third Place</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">Rustls</th>
<td>14</td>
<td>2</td>
<td>0</td>
</tr>
<tr>
<th scope="row">BoringSSL</th>
<td>2</td>
<td>10</td>
<td>4</td>
</tr>
<tr>
<th scope="row">OpenSSL</th>
<td>0</td>
<td>4</td>
<td>12</td>
</tr>
</tbody>
</table>
</div>

Since the last tests in July of 2025, neither BoringSSL or OpenSSL significantly improved or regressed in any test. Rustls got a bit faster in a few tests, likely because of improvements to the underlying cryptography via updates to [aws-lc-rs](https://github.com/aws/aws-lc-rs).

The results on the whole are roughly what we'd expect. OpenSSL is [known](https://www.feistyduck.com/newsletter/issue_132_openssl_performance_still_under_scrutiny) to have serious performance issues, BoringSSL avoids most of those, and Rustls takes performance a step further.

## Looking Forward

Rustls 0.24 will be released this year with a large number of changes focused on building a strong foundation for a 1.0 release. In particular, Rustls is making some changes to its APIs that will serve users better for the long term.

One performance-related change we are pursuing is "split mode". This is where — after the TLS handshake — a connection can be split into sender and receiver objects. The sender can send TLS-protected data, while the receiver can receive it. Historically this has been challenging because in TLS, a receiver may need to occasionally write (e.g. to send an alert). To address this challenge the split objects have an internal relationship to ensure that (for example) if the receiver object needs to send a message, that can happen in a transparent way. This is a very infrequent occurrence, so doesn't cause contention in normal use.

The intention is that those objects can be used on separate threads, which allows total throughput for a connection to be roughly doubled. The above measurements are per-core, but we're not aware of other TLS libraries that allow the use of one connection from two threads like this. Therefore, the send and receive measurements of Rustls could be added together. We'll confirm that is practically possible in a future performance report.

That is all caveated on applications that can be structured to benefit from full-duplex use of a single connection. Luckily, `tokio` already has this pattern as a first-class concept. We hope the Rustls split-mode feature will contribute to cementing Rust as a great choice for mega-fast and safer network services.

Large releases like this can be a mixed bag for performance, but the team monitors regressions closely and so at a minimum, no significant regressions are expected. For some of the closely contested results it's possible that Rustls 0.24 could pick up or lose a place. If that happens, we'll prioritize improvements that get Rustls back to the prior position.
2 changes: 1 addition & 1 deletion content/en/initiative/rustls.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
background: dce0e9
funders: ["Google", "Flyio", "AWS", "Sovereign-Tech-Agency", "Alpha-Omega"]
image: /images/rustls.png
blog_posts: ["2025-10-01-rustls-error-handling.md", "2025-09-03-rustls-joins-rust-foundation-rust-innovation-lab.md", "2025-05-13-rustls-server-perf.md", "2024-10-22-rustls-performance.md", "2024-06-13-rustls-ECH-support.md", "2024-05-08-Rustls-Nginx-Compatibility-layer.md", "2024-03-26-PQ-key-exchange.md", "2024-02-29-Rustls-with-aws-Crypto-back-end-and-FIPS.md", "2024-01-04-rustls-performance.md", "2023-03-29-rustls-new-features.md", "2021-04-20-preparing-rustls.md"]
blog_posts: ["2026-04-09-26Q1-Rustls-Performance.md", "2025-10-01-rustls-error-handling.md", "2025-09-03-rustls-joins-rust-foundation-rust-innovation-lab.md", "2025-05-13-rustls-server-perf.md", "2024-10-22-rustls-performance.md", "2024-06-13-rustls-ECH-support.md", "2024-05-08-Rustls-Nginx-Compatibility-layer.md", "2024-03-26-PQ-key-exchange.md", "2024-02-29-Rustls-with-aws-Crypto-back-end-and-FIPS.md", "2024-01-04-rustls-performance.md", "2023-03-29-rustls-new-features.md", "2021-04-20-preparing-rustls.md"]
---

<h2>The Story</h2>
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"Target":"/sass/main.min.cd024e9c80ac2ff06994073b8c9aa9cf389ce7af713eca7f49c41aac00015c46.css","MediaType":"text/css","Data":{"Integrity":"sha256-zQJOnICsL/BplAc7jJqpzzic569xPsp/ScQarAABXEY="}}
{"Target":"/sass/main.min.f5171ff4d4b87ca555b99b7d9107aae62aa1e4d180309d7a7a5ce12158f62179.css","MediaType":"text/css","Data":{"Integrity":"sha256-9Rcf9NS4fKVVuZt9kQeq5iqh5NGAMJ16elzhIVj2IXk="}}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading