From 2e2ad8c87dc06150cfe79e3d1be03263eefd0aee Mon Sep 17 00:00:00 2001 From: "Kyle J. Davis" Date: Wed, 3 Dec 2025 10:10:34 -0700 Subject: [PATCH 1/6] adds a performance section to the homepage Signed-off-by: Kyle J. Davis --- _data/perf.toml | 12 ++++ sass/_valkey.scss | 20 ++++-- templates/index.html | 148 ++++++++++++++++++++++++------------------- 3 files changed, 109 insertions(+), 71 deletions(-) create mode 100644 _data/perf.toml diff --git a/_data/perf.toml b/_data/perf.toml new file mode 100644 index 00000000..bb279f8c --- /dev/null +++ b/_data/perf.toml @@ -0,0 +1,12 @@ +# Example of a homepage performance card. +# [[dashboards]] +# title = "GETs/SETs on `9.0.0`" +# description = "Performance dashboard of GETs and SETs on the Valkey 9.0.0 release. Updated on Oct 21, 2025." +# link = "https://perf-dashboard.valkey.io/public-dashboards/3e45bf8ded3043edaa941331cd1a94e2" + +# Order in this file indicates rendering order. + +[[dashboards]] +title = "GETs/SETs on `unstable`" +description = "Performance dashboard of GETs and SETs on the Valkey `unstable` branch. Updated nightly." +link = "https://perf-dashboard.valkey.io/public-dashboards/3e45bf8ded3043edaa941331cd1a94e2" diff --git a/sass/_valkey.scss b/sass/_valkey.scss index 8bc0c1d1..1b706148 100644 --- a/sass/_valkey.scss +++ b/sass/_valkey.scss @@ -769,7 +769,7 @@ p { } } - .col_3 { + .col-3 { @include respond-min(768px) { flex: 1 1 25%; } @@ -1853,7 +1853,7 @@ html.banner-hidden .banner { .inner-card { background: white; padding: 3rem; - border-radius: 20px; + border-radius: 10px; margin: 0 0 3rem; h4 { @@ -2046,12 +2046,17 @@ blockquote { } // Homepage Blog Cards with Featured Images +.homepage-performance-section, .homepage-blog-section { display: flex; flex-direction: column; gap: 2rem; } +.homepage-performance-section { + margin-bottom: 3rem; +} +.homepage-performance-card, .homepage-blog-card { background: #fff; border-radius: 10px; @@ -2078,6 +2083,7 @@ blockquote { border-top-right-radius: 10px; } +.homepage-performance-card-content, .homepage-blog-card-content { padding: 1.5rem; flex: 1; @@ -2085,6 +2091,10 @@ blockquote { flex-direction: column; } +.homepage-performance-card h4 p { + margin: none; +} +.homepage-performance-card h4, .homepage-blog-card-title { margin: 0 0 1rem 0; font-size: 1.6rem; @@ -2101,7 +2111,7 @@ blockquote { color: #667eea; } } - +.homepage-performance-card h4 + p, .homepage-blog-card-description { margin: 0 0 1.5rem 0; font-size: 1.4rem; @@ -2113,7 +2123,7 @@ blockquote { overflow: hidden; flex: 1; } - +.homepage-performance-card .view-dashboard, .homepage-blog-card-readmore { display: inline-flex; align-items: center; @@ -2130,7 +2140,7 @@ blockquote { transition: all 0.2s ease; background: #fff; } - +.homepage-performance-card .view-dashboard:hover, .homepage-blog-card-readmore:hover { background: #667eea; color: #fff; diff --git a/templates/index.html b/templates/index.html index 9a7b6e29..2fd5ffb4 100644 --- a/templates/index.html +++ b/templates/index.html @@ -17,79 +17,95 @@

{{ heading }}

-
- {% set release_section = get_section(path="download/releases/_index.md") %} - {% set releases = release_section.pages | reverse %} - - {% set_global active_releases = [] %} - {% for release in releases %} - {% if release.extra.tag is not matching(".*-.*") %} - {% set_global active_releases = active_releases | concat(with=release) %} - {% endif %} - {% endfor %} - - {% set most_recent_release_page = active_releases | slice(end= 1) %} - {% set release_date = most_recent_release_page[0].date %} - {% set release = most_recent_release_page[0].extra %} - - {% set split_ver = release.tag | split(pat=".")%} - {% set_global major = split_ver | nth(n= 0) %} - -

Version {{major}}.x.x

-
- {% include "includes/release.html" %} -
- -

Latest supported version of past releases

- -
- {% for older_release in active_releases %} - {% set older_split_ver = older_release.extra.tag | split(pat=".")%} - {% set older_major = older_split_ver | nth(n= 0) %} - {% if older_major != major %} - {% set_global major = older_major %} - {% set release = older_release.extra %} -

Version {{major}}.x.x

- {% include "includes/release.html" %} +
+ {% set release_section = get_section(path="download/releases/_index.md") %} + {% set releases = release_section.pages | reverse %} + + {% set_global active_releases = [] %} + {% for release in releases %} + {% if release.extra.tag is not matching(".*-.*") %} + {% set_global active_releases = active_releases | concat(with=release) %} {% endif %} {% endfor %} -
-
- -
-

Latest From Our Blog

-
- {% set blog_post_section = get_section(path="blog/_index.md") %} - {% set blog_posts = blog_post_section.pages | slice(end=2) %} - {% for post in blog_posts %} -
-
-

{{ post.title }}

-

{{ post.description }}

- Read More + + {% set most_recent_release_page = active_releases | slice(end= 1) %} + {% set release_date = most_recent_release_page[0].date %} + {% set release = most_recent_release_page[0].extra %} + + {% set split_ver = release.tag | split(pat=".")%} + {% set_global major = split_ver | nth(n= 0) %} + +

Version {{major}}.x.x

+
+ {% include "includes/release.html" %} +
+ +

Latest supported version of past releases

+ +
+ {% for older_release in active_releases %} + {% set older_split_ver = older_release.extra.tag | split(pat=".")%} + {% set older_major = older_split_ver | nth(n= 0) %} + {% if older_major != major %} + {% set_global major = older_major %} + {% set release = older_release.extra %} +

Version {{major}}.x.x

+ {% include "includes/release.html" %} + {% endif %} + {% endfor %} +
+
+
+

Performance

+
+ {% set perf = load_data(path="_data/perf.toml") %} + {% for perf_dashboard in perf.dashboards %} +
+
+

{{ perf_dashboard.title | markdown | safe }}

+ {{ perf_dashboard.description | markdown | safe }} + View Dashboard
+
- {% endfor %} + {% endfor %} +
+
+
+

Latest Blog Posts

+
+ {% set blog_post_section = get_section(path="blog/_index.md") %} + {% set blog_posts = blog_post_section.pages | slice(end=2) %} + {% for post in blog_posts %} +
+
+

{{ post.title }}

+

{{ post.description }}

+ Read More +
+
+ {% endfor %} +
- {% if section.extra and section.extra.sidebar %} - {% for sidebar_category in section.extra.sidebar %} -

{{sidebar_category.title}}

-
- - {% if sidebar_category.more %} - {{sidebar_category.more.title}} - {% endif %} -
- {% endfor %} - {% endif %} -
+ {% if section.extra and section.extra.sidebar %} + {% for sidebar_category in section.extra.sidebar %} +

{{sidebar_category.title}}

+
+ + {% if sidebar_category.more %} + {{sidebar_category.more.title}} + {% endif %} +
+ {% endfor %} + {% endif %} +
@@ -102,7 +118,7 @@

{{sidebar_category.title}}

{% if section.extra and section.extra.documentation_cards %} {% for card in section.extra.documentation_cards %} -
+

{{ card.title }}

{{ card.description }}

From c91be8b805e2c6e75a63012db5c2bfdb1abf2045 Mon Sep 17 00:00:00 2001 From: "Kyle J. Davis" Date: Wed, 3 Dec 2025 09:48:56 -0800 Subject: [PATCH 2/6] adds additional comment about markdown Signed-off-by: Kyle J. Davis --- _data/perf.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/_data/perf.toml b/_data/perf.toml index bb279f8c..03d9da96 100644 --- a/_data/perf.toml +++ b/_data/perf.toml @@ -1,4 +1,5 @@ # Example of a homepage performance card. +# Both `title` and `description` can contain markdown for styles, but not links. # [[dashboards]] # title = "GETs/SETs on `9.0.0`" # description = "Performance dashboard of GETs and SETs on the Valkey 9.0.0 release. Updated on Oct 21, 2025." From f8e8f8a3b7494eea6e0570f23f2e7bfdeea13470 Mon Sep 17 00:00:00 2001 From: Roshan Khatri Date: Wed, 10 Dec 2025 23:10:29 +0000 Subject: [PATCH 3/6] Adds /performance page with the dashboards Signed-off-by: Roshan Khatri --- _data/perf.toml | 21 ++++++++++++++++++--- content/performance.md | 6 ++++++ templates/index.html | 2 +- templates/performance.html | 36 ++++++++++++++++++++++++++++++++++++ 4 files changed, 61 insertions(+), 4 deletions(-) create mode 100644 content/performance.md create mode 100644 templates/performance.html diff --git a/_data/perf.toml b/_data/perf.toml index 03d9da96..5da1bdf7 100644 --- a/_data/perf.toml +++ b/_data/perf.toml @@ -8,6 +8,21 @@ # Order in this file indicates rendering order. [[dashboards]] -title = "GETs/SETs on `unstable`" -description = "Performance dashboard of GETs and SETs on the Valkey `unstable` branch. Updated nightly." -link = "https://perf-dashboard.valkey.io/public-dashboards/3e45bf8ded3043edaa941331cd1a94e2" +title = "Valkey Performance Dashboards" +description = "Valkey Performance Dashboards provide a consolidated view of throughput and memory efficiency trends across versions, helping teams validate improvements and identify regressions." +link = "/performance/" + +# Performance dashboard sections for /performance page +# Order in this file indicates rendering order. + +[[sections]] +title = "Throughput Across Versions" +iframe_url = "https://df0m5orgq2d38.cloudfront.net/public-dashboards/e6e8ec1f88954ddd8a67df1ab4966eb2" +description = "This dashboard visualizes throughput trends across Valkey versions. It helps compare key releases side by side, highlight performance gains from new features. Use it when evaluating whether a new version meets your performance SLOs before rollout." +methodology = "These metrics are generated using the valkey-perf-benchmark tool on a c8g.metal.2xl instance, running a matrix of configurations that vary pipelining (1, 10), I/O threading (1, 9), and data sizes 512 bytes. To further stabilize results, we apply IRQ tuning by pinning network interrupts away from CPUs dedicated to the server process, and we isolate the server and benchmark client on separate NUMA nodes to remove L3 cache contention. This controlled methodology ensures consistent, repeatable comparisons across versions and makes performance gains or regressions easier to attribute to real code changes rather than environmental variability." + +[[sections]] +title = "Memory Overhead Across Versions" +iframe_url = "https://df0m5orgq2d38.cloudfront.net/public-dashboards/1e3d87a62b794ce9aa81281d8399e4bf" +description = "This dashboard visualizes Memory Efficiency trends across Valkey versions. It helps compare releases side by side, highlight Memory Efficiency gains from new features. Use it when evaluating whether a new version meets your performance SLOs before rollout." +methodology = "These benchmarks are generated by starting an empty instance of Valkey for each test, measuring memory usage, then adding 3 million string items of a certain data size, then measuring Valkey memory usage again. We take the increase in memory use, divide by the number of items, and subtract the size of the user data (key and value) to get the extra overhead bytes Valkey uses to track and organize the data. For this graph, we tested every value size from 8B to 128B inclusive, then averaged the numbers for each range in this chart." diff --git a/content/performance.md b/content/performance.md new file mode 100644 index 00000000..d039211b --- /dev/null +++ b/content/performance.md @@ -0,0 +1,6 @@ +--- +title: Valkey Performance Dashboards +template: performance.html +--- + +Valkey Performance Dashboards provide a consolidated view of throughput and memory efficiency trends across versions, helping teams validate improvements and identify regressions quickly. diff --git a/templates/index.html b/templates/index.html index 2fd5ffb4..e0972bc2 100644 --- a/templates/index.html +++ b/templates/index.html @@ -64,7 +64,7 @@

Performance

{{ perf_dashboard.title | markdown | safe }}

{{ perf_dashboard.description | markdown | safe }} - View Dashboard + Explore
diff --git a/templates/performance.html b/templates/performance.html new file mode 100644 index 00000000..a604f2c5 --- /dev/null +++ b/templates/performance.html @@ -0,0 +1,36 @@ +{% extends "default.html" %} + +{% block content %} +
+

{{ page.title }}

+
+ +
+
+ {{ page.content | markdown | safe }} + + {% set perf = load_data(path="_data/perf.toml") %} + {% for section in perf.sections %} +
+

{{ section.title }}

+ + {% if section.iframe_url %} + + {% endif %} + + {% if section.description %} +

{{ section.description }}

+ {% endif %} + + {% if section.methodology %} +

Methodology

+

{{ section.methodology }}

+ {% endif %} +
+ {% endfor %} + +
+

For questions about performance or to contribute benchmarking data, visit our community page or join the discussion on GitHub.

+
+
+{% endblock content %} From 3d93acb89267a8b55cf2786779f3b2f476369a6a Mon Sep 17 00:00:00 2001 From: Roshan Khatri Date: Thu, 11 Dec 2025 20:25:43 +0000 Subject: [PATCH 4/6] Addressing feedbacks Signed-off-by: Roshan Khatri --- _data/perf.toml | 10 +++++----- templates/performance.html | 16 +++++++++------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/_data/perf.toml b/_data/perf.toml index 5da1bdf7..2094d1e7 100644 --- a/_data/perf.toml +++ b/_data/perf.toml @@ -17,12 +17,12 @@ link = "/performance/" [[sections]] title = "Throughput Across Versions" -iframe_url = "https://df0m5orgq2d38.cloudfront.net/public-dashboards/e6e8ec1f88954ddd8a67df1ab4966eb2" -description = "This dashboard visualizes throughput trends across Valkey versions. It helps compare key releases side by side, highlight performance gains from new features. Use it when evaluating whether a new version meets your performance SLOs before rollout." -methodology = "These metrics are generated using the valkey-perf-benchmark tool on a c8g.metal.2xl instance, running a matrix of configurations that vary pipelining (1, 10), I/O threading (1, 9), and data sizes 512 bytes. To further stabilize results, we apply IRQ tuning by pinning network interrupts away from CPUs dedicated to the server process, and we isolate the server and benchmark client on separate NUMA nodes to remove L3 cache contention. This controlled methodology ensures consistent, repeatable comparisons across versions and makes performance gains or regressions easier to attribute to real code changes rather than environmental variability." +iframe_url = "https://perf-dashboard.valkey.io/public-dashboards/38ad683dbd06456c829b547d97e2b7da" +description = "This dashboard visualizes throughput trends across Valkey versions. It helps compare key releases side by side, highlight performance gains from new features. Read more about [Unlocking 1 Million RPS in Valkey](/blog/unlock-one-million-rps/)." +methodology = "These metrics are generated using the [valkey-perf-benchmark](https://github.com/valkey-io/valkey-perf-benchmark) tool an AWS `c8g.metal.24xl` instance, running a matrix of configurations that vary pipelining (1, 10), I/O threading (1, 9), and with a data size of 512 bytes. To further stabilize results, we apply IRQ tuning by pinning network interrupts away from CPUs dedicated to the server process, and we isolate the server and benchmark client on separate NUMA nodes to remove L3 cache contention." [[sections]] title = "Memory Overhead Across Versions" iframe_url = "https://df0m5orgq2d38.cloudfront.net/public-dashboards/1e3d87a62b794ce9aa81281d8399e4bf" -description = "This dashboard visualizes Memory Efficiency trends across Valkey versions. It helps compare releases side by side, highlight Memory Efficiency gains from new features. Use it when evaluating whether a new version meets your performance SLOs before rollout." -methodology = "These benchmarks are generated by starting an empty instance of Valkey for each test, measuring memory usage, then adding 3 million string items of a certain data size, then measuring Valkey memory usage again. We take the increase in memory use, divide by the number of items, and subtract the size of the user data (key and value) to get the extra overhead bytes Valkey uses to track and organize the data. For this graph, we tested every value size from 8B to 128B inclusive, then averaged the numbers for each range in this chart." +description = "This dashboard visualizes Memory Efficiency trends across Valkey versions. It helps compare releases side by side, highlight Memory Efficiency gains from new features. Discover how [our new hash table design](/blog/new-hash-table/) reduces memory overhead." +methodology = "These benchmarks are generated by starting an empty instance of Valkey for each test, measuring memory usage, then adding 3 million string items of a certain data size, then measuring Valkey memory usage again. We take the increase in memory use, divide by the number of items, and subtract the size of the user data (key and value) to get the extra overhead bytes Valkey uses to track and organize the data. For this graph, we tested every value size from 8B to 128B inclusive, then averaged the numbers for each range in this chart." \ No newline at end of file diff --git a/templates/performance.html b/templates/performance.html index a604f2c5..bfe306dd 100644 --- a/templates/performance.html +++ b/templates/performance.html @@ -13,24 +13,26 @@

{{ page.title }}

{% for section in perf.sections %}

{{ section.title }}

- + {% if section.iframe_url %} {% endif %} - + {% if section.description %} -

{{ section.description }}

+

{{ section.description | markdown | safe }}

{% endif %} - + {% if section.methodology %}

Methodology

-

{{ section.methodology }}

+

{{ section.methodology | markdown | safe }}

{% endif %}
{% endfor %}
-

For questions about performance or to contribute benchmarking data, visit our community page or join the discussion on GitHub.

+

For questions about performance or to contribute benchmarking data, visit our community + page or join the discussion on GitHub. +

-{% endblock content %} +{% endblock content %} \ No newline at end of file From ab75345e42f7139fcf01ccb103fc523fb4bf1f7b Mon Sep 17 00:00:00 2001 From: Roshan Khatri Date: Fri, 12 Dec 2025 00:19:02 +0000 Subject: [PATCH 5/6] update dashboard link Signed-off-by: Roshan Khatri --- _data/perf.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_data/perf.toml b/_data/perf.toml index 2094d1e7..e760e81d 100644 --- a/_data/perf.toml +++ b/_data/perf.toml @@ -23,6 +23,6 @@ methodology = "These metrics are generated using the [valkey-perf-benchmark](htt [[sections]] title = "Memory Overhead Across Versions" -iframe_url = "https://df0m5orgq2d38.cloudfront.net/public-dashboards/1e3d87a62b794ce9aa81281d8399e4bf" +iframe_url = "https://perf-dashboard.valkey.io/public-dashboards/0501007755004ae098dcc27d06bcda6a" description = "This dashboard visualizes Memory Efficiency trends across Valkey versions. It helps compare releases side by side, highlight Memory Efficiency gains from new features. Discover how [our new hash table design](/blog/new-hash-table/) reduces memory overhead." methodology = "These benchmarks are generated by starting an empty instance of Valkey for each test, measuring memory usage, then adding 3 million string items of a certain data size, then measuring Valkey memory usage again. We take the increase in memory use, divide by the number of items, and subtract the size of the user data (key and value) to get the extra overhead bytes Valkey uses to track and organize the data. For this graph, we tested every value size from 8B to 128B inclusive, then averaged the numbers for each range in this chart." \ No newline at end of file From 0d84d14b08a8459497532f1682d2893baeb8a6c8 Mon Sep 17 00:00:00 2001 From: Roshan Khatri Date: Fri, 12 Dec 2025 21:44:44 +0000 Subject: [PATCH 6/6] removes memory overhead metrics Signed-off-by: Roshan Khatri --- _data/perf.toml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/_data/perf.toml b/_data/perf.toml index e760e81d..0aebc1c5 100644 --- a/_data/perf.toml +++ b/_data/perf.toml @@ -9,7 +9,7 @@ [[dashboards]] title = "Valkey Performance Dashboards" -description = "Valkey Performance Dashboards provide a consolidated view of throughput and memory efficiency trends across versions, helping teams validate improvements and identify regressions." +description = "Valkey Performance Dashboards provide a consolidated view of throughput trends across versions, helping teams validate improvements and identify regressions." link = "/performance/" # Performance dashboard sections for /performance page @@ -20,9 +20,3 @@ title = "Throughput Across Versions" iframe_url = "https://perf-dashboard.valkey.io/public-dashboards/38ad683dbd06456c829b547d97e2b7da" description = "This dashboard visualizes throughput trends across Valkey versions. It helps compare key releases side by side, highlight performance gains from new features. Read more about [Unlocking 1 Million RPS in Valkey](/blog/unlock-one-million-rps/)." methodology = "These metrics are generated using the [valkey-perf-benchmark](https://github.com/valkey-io/valkey-perf-benchmark) tool an AWS `c8g.metal.24xl` instance, running a matrix of configurations that vary pipelining (1, 10), I/O threading (1, 9), and with a data size of 512 bytes. To further stabilize results, we apply IRQ tuning by pinning network interrupts away from CPUs dedicated to the server process, and we isolate the server and benchmark client on separate NUMA nodes to remove L3 cache contention." - -[[sections]] -title = "Memory Overhead Across Versions" -iframe_url = "https://perf-dashboard.valkey.io/public-dashboards/0501007755004ae098dcc27d06bcda6a" -description = "This dashboard visualizes Memory Efficiency trends across Valkey versions. It helps compare releases side by side, highlight Memory Efficiency gains from new features. Discover how [our new hash table design](/blog/new-hash-table/) reduces memory overhead." -methodology = "These benchmarks are generated by starting an empty instance of Valkey for each test, measuring memory usage, then adding 3 million string items of a certain data size, then measuring Valkey memory usage again. We take the increase in memory use, divide by the number of items, and subtract the size of the user data (key and value) to get the extra overhead bytes Valkey uses to track and organize the data. For this graph, we tested every value size from 8B to 128B inclusive, then averaged the numbers for each range in this chart." \ No newline at end of file