mirror of
https://github.com/logos-messaging/docs.waku.org.git
synced 2026-01-04 22:03:12 +00:00
1 line
13 KiB
JavaScript
1 line
13 KiB
JavaScript
"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[345],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>k});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function s(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?s(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):s(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function o(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},s=Object.keys(e);for(n=0;n<s.length;n++)a=s[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n<s.length;n++)a=s[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var i=n.createContext({}),p=function(e){var t=n.useContext(i),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},u=function(e){var t=p(e.components);return n.createElement(i.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,s=e.originalType,i=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),d=p(a),c=r,k=d["".concat(i,".").concat(c)]||d[c]||m[c]||s;return a?n.createElement(k,l(l({ref:t},u),{},{components:a})):n.createElement(k,l({ref:t},u))}));function k(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=a.length,l=new Array(s);l[0]=c;var o={};for(var i in t)hasOwnProperty.call(t,i)&&(o[i]=t[i]);o.originalType=e,o[d]="string"==typeof e?e:r,l[1]=o;for(var p=2;p<s;p++)l[p]=a[p];return n.createElement.apply(null,l)}return n.createElement.apply(null,a)}c.displayName="MDXCreateElement"},73266:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>m,frontMatter:()=>s,metadata:()=>o,toc:()=>p});var n=a(87462),r=(a(67294),a(3905));const s={title:"Performance Benchmarks and Test Reports"},l=void 0,o={unversionedId:"research/benchmarks/test-results-summary",id:"research/benchmarks/test-results-summary",title:"Performance Benchmarks and Test Reports",description:"Introduction",source:"@site/docs/research/benchmarks/test-results-summary.md",sourceDirName:"research/benchmarks",slug:"/research/benchmarks/test-results-summary",permalink:"/research/benchmarks/test-results-summary",draft:!1,editUrl:"https://github.com/waku-org/docs.waku.org/tree/develop/docs/research/benchmarks/test-results-summary.md",tags:[],version:"current",lastUpdatedAt:1742317220,formattedLastUpdatedAt:"18 Mar 2025",frontMatter:{title:"Performance Benchmarks and Test Reports"},sidebar:"research",previous:{title:"PostgreSQL",permalink:"/research/benchmarks/postgres-adoption"},next:{title:"Capped Bandwidth in Waku",permalink:"/research/research-and-studies/capped-bandwidth"}},i={},p=[{value:"Introduction",id:"introduction",level:2},{value:"Insights",id:"insights",level:2},{value:"Relay Bandwidth Usage: nwaku v0.34.0",id:"relay-bandwidth-usage-nwaku-v0340",level:3},{value:"Message Propagation Latency: nwaku v0.34.0-rc1",id:"message-propagation-latency-nwaku-v0340-rc1",level:3},{value:"Discv5 Bandwidth Usage: nwaku v0.34.0",id:"discv5-bandwidth-usage-nwaku-v0340",level:3},{value:"Testing",id:"testing",level:2},{value:"DST",id:"dst",level:3},{value:"QA",id:"qa",level:3},{value:"nwaku",id:"nwaku",level:3},{value:"Research",id:"research",level:3}],u={toc:p},d="wrapper";function m(e){let{components:t,...a}=e;return(0,r.kt)(d,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"introduction"},"Introduction"),(0,r.kt)("p",null,"This page summarises key performance metrics for nwaku and provides links to detailed test reports."),(0,r.kt)("blockquote",null,(0,r.kt)("h2",{parentName:"blockquote",id:"tldr"},"TL;DR"),(0,r.kt)("ul",{parentName:"blockquote"},(0,r.kt)("li",{parentName:"ul"},"Average Waku bandwidth usage: ~",(0,r.kt)("strong",{parentName:"li"},"10 KB/s")," (minus discv5 Discovery) for 1KB message size and message injection rate of 1msg/s.",(0,r.kt)("br",{parentName:"li"}),"Confirmed for topologies of up to 2000 Relay nodes."),(0,r.kt)("li",{parentName:"ul"},"Average time for a message to propagate to 100% of nodes: ",(0,r.kt)("strong",{parentName:"li"},"0.4s")," for topologies of up to 2000 Relay nodes."),(0,r.kt)("li",{parentName:"ul"},"Average per-node bandwidth usage of the discv5 protocol: ",(0,r.kt)("strong",{parentName:"li"},"8 KB/s")," for incoming traffic and ",(0,r.kt)("strong",{parentName:"li"},"7.4 KB/s")," for outgoing traffic,",(0,r.kt)("br",{parentName:"li"}),"in a network with 100 continuously online nodes."),(0,r.kt)("li",{parentName:"ul"},"Future improvements: A messaging API is currently in development to streamline interactions with the Waku protocol suite.",(0,r.kt)("br",{parentName:"li"}),"Once completed, it will enable benchmarking at the messaging API level, allowing applications to more easily compare their",(0,r.kt)("br",{parentName:"li"}),"own performance results."))),(0,r.kt)("h2",{id:"insights"},"Insights"),(0,r.kt)("h3",{id:"relay-bandwidth-usage-nwaku-v0340"},"Relay Bandwidth Usage: nwaku v0.34.0"),(0,r.kt)("p",null,"The average per-node ",(0,r.kt)("inlineCode",{parentName:"p"},"libp2p")," bandwidth usage in a 1000-node Relay network with 1KB messages at varying injection rates."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Message Injection Rate"),(0,r.kt)("th",{parentName:"tr",align:null},"Average libp2p incoming bandwidth (KB/s)"),(0,r.kt)("th",{parentName:"tr",align:null},"Average libp2p outgoing bandwidth (KB/s)"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1 msg/s"),(0,r.kt)("td",{parentName:"tr",align:null},"~10.1"),(0,r.kt)("td",{parentName:"tr",align:null},"~10.3")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1 msg/10s"),(0,r.kt)("td",{parentName:"tr",align:null},"~1.8"),(0,r.kt)("td",{parentName:"tr",align:null},"~1.9")))),(0,r.kt)("h3",{id:"message-propagation-latency-nwaku-v0340-rc1"},"Message Propagation Latency: nwaku v0.34.0-rc1"),(0,r.kt)("p",null,"The message propagation latency is measured as the total time for a message to reach all nodes.",(0,r.kt)("br",{parentName:"p"}),"\n","We compare the latency in different network configurations for the following simulation parameters:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Total messages published: 600"),(0,r.kt)("li",{parentName:"ul"},"Message size: 1KB"),(0,r.kt)("li",{parentName:"ul"},"Message injection rate: 1msg/s")),(0,r.kt)("p",null,"The different network configurations tested are:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Relay Config: 1000 nodes with relay enabled"),(0,r.kt)("li",{parentName:"ul"},"Mixed Config: 210 nodes, consisting of bootstrap nodes, filter clients and servers, lightpush clients and servers, store nodes"),(0,r.kt)("li",{parentName:"ul"},"Non-persistent Relay Config: 500 persistent relay nodes, 10 store nodes and 100 non-persistent relay nodes")),(0,r.kt)("p",null,"Click on a specific config to see the detailed test report."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Config"),(0,r.kt)("th",{parentName:"tr",align:null},"Average Message Propagation Latency (s)"),(0,r.kt)("th",{parentName:"tr",align:null},"Max Message Propagation Latency (s)"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://www.notion.so/Waku-regression-testing-v0-34-1618f96fb65c803bb7bad6ecd6bafff9"},"Relay")," (1000 nodes)"),(0,r.kt)("td",{parentName:"tr",align:null},"0.05"),(0,r.kt)("td",{parentName:"tr",align:null},"1.6")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://www.notion.so/Mixed-environment-analysis-1688f96fb65c809eb235c59b97d6e15b"},"Mixed")," (210 nodes)"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0125"),(0,r.kt)("td",{parentName:"tr",align:null},"0.007")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://www.notion.so/High-Churn-Relay-Store-Reliability-16c8f96fb65c8008bacaf5e86881160c"},"Non-persistent Relay")," (510 nodes)"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0125"),(0,r.kt)("td",{parentName:"tr",align:null},"0.25")))),(0,r.kt)("h3",{id:"discv5-bandwidth-usage-nwaku-v0340"},"Discv5 Bandwidth Usage: nwaku v0.34.0"),(0,r.kt)("p",null,"The average bandwidth usage of discv5 for a network of 100 nodes and message injection rate of 0 or 1msg/s.",(0,r.kt)("br",{parentName:"p"}),"\n","The measurements are based on a stable network where all nodes have already connected to peers to form a healthy mesh."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Message size"),(0,r.kt)("th",{parentName:"tr",align:null},"Average discv5 incoming bandwidth (KB/s)"),(0,r.kt)("th",{parentName:"tr",align:null},"Average discv5 outgoing bandwidth (KB/s)"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"no message injection"),(0,r.kt)("td",{parentName:"tr",align:null},"7.88"),(0,r.kt)("td",{parentName:"tr",align:null},"6.70")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1KB"),(0,r.kt)("td",{parentName:"tr",align:null},"8.04"),(0,r.kt)("td",{parentName:"tr",align:null},"7.40")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"10KB"),(0,r.kt)("td",{parentName:"tr",align:null},"8.03"),(0,r.kt)("td",{parentName:"tr",align:null},"7.45")))),(0,r.kt)("h2",{id:"testing"},"Testing"),(0,r.kt)("h3",{id:"dst"},"DST"),(0,r.kt)("p",null,"The VAC DST team performs regression testing on all new ",(0,r.kt)("strong",{parentName:"p"},"nwaku")," releases, comparing performance with previous versions.",(0,r.kt)("br",{parentName:"p"}),"\n","They simulate large Waku networks with a variety of network and protocol configurations that are representative of real-world usage."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Test Reports"),": ",(0,r.kt)("a",{parentName:"p",href:"https://www.notion.so/DST-Reports-1228f96fb65c80729cd1d98a7496fe6f"},"DST Reports")," "),(0,r.kt)("h3",{id:"qa"},"QA"),(0,r.kt)("p",null,"The VAC QA team performs interoperability tests for ",(0,r.kt)("strong",{parentName:"p"},"nwaku")," and ",(0,r.kt)("strong",{parentName:"p"},"go-waku")," using the latest main branch builds.",(0,r.kt)("br",{parentName:"p"}),"\n","These tests run daily and verify protocol functionality by targeting specific features of each protocol. "),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Test Reports"),": ",(0,r.kt)("a",{parentName:"p",href:"https://discord.com/channels/1110799176264056863/1196933819614363678"},"QA Reports")," "),(0,r.kt)("h3",{id:"nwaku"},"nwaku"),(0,r.kt)("p",null,"The ",(0,r.kt)("strong",{parentName:"p"},"nwaku")," team follows a structured release procedure for all release candidates.",(0,r.kt)("br",{parentName:"p"}),"\n","This involves deploying RCs to ",(0,r.kt)("inlineCode",{parentName:"p"},"status.staging")," fleet for validation and performing sanity checks. "),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Release Process"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/waku-org/nwaku/blob/master/.github/ISSUE_TEMPLATE/prepare_release.md"},"nwaku Release Procedure")," "),(0,r.kt)("h3",{id:"research"},"Research"),(0,r.kt)("p",null,"The Waku Research team conducts a variety of benchmarking, performance testing, proof-of-concept validations and debugging efforts.",(0,r.kt)("br",{parentName:"p"}),"\n","They also maintain a Waku simulator designed for small-scale, single-purpose, on-demand testing."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Test Reports"),": ",(0,r.kt)("a",{parentName:"p",href:"https://www.notion.so/Miscellaneous-2c02516248db4a28ba8cb2797a40d1bb"},"Waku Research Reports")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Waku Simulator"),": ",(0,r.kt)("a",{parentName:"p",href:"https://waku-org.github.io/waku-simulator/"},"Waku Simulator Book")))}m.isMDXComponent=!0}}]); |