WSL3 Performance is about 5-60% faster than WSL2 depending on the workload
WSL3 Performance: A 5-60% Boost Over WSL2 Depending on Workload
By Tony Metzidis | AI, Cloud, & Engineering Leadership
Published: October 7, 2026 4 min read #Wsl #Wsl2 #Wsl3 #Benchmarks
With the introduction of the WSL 3.x stack, Microsoft has updated the default virtualization runtime and upgraded the guest kernel from the 6.6 LTS branch to 6.18.
While official marketing often highlights generalized speed increases, these bullet points rarely provide a clear picture of how developer-specific workloads are affected. To uncover the actual technical shifts, I conducted a side-by-side comparison between WSL 2.6.3.0 (Kernel 6.6.87.2) and WSL 3.0.2.0 (Kernel 6.18.40.1).
The following data examines kernel primitives, memory throughput, and a practical Go compilation scenario.
🛠️ The Test Environment
To ensure the results were reproducible and isolated, I utilized an Alpine Linux 3.23.0 root filesystem (minirootfs) running Go 1.27.1.
Hardware & Software Specifications
- Host OS: Windows 11 Pro (Build 26200.9550, VBS enabled)
- Host Machine: HP ProDesk 400 G4 Desktop Mini
- CPU: Intel Core i5-8500T (6C/6T Coffee Lake @ 2.10 GHz)
- RAM: 16 GB DDR4
- Guest OS: Alpine Linux 3.23.0 (x86_64)
- Guest Kernels:
6.6.87.2(WSL2) vs6.18.40.1(WSL3)
Resource Configuration
The following settings were applied via the .wslconfig file:
[wsl2]
processors=2 # Pinned to 2 vCPUs
memory=4GB
networkingMode=nat
firewall=true
📉 Low-Level Kernel Microbenchmarks
Using perf bench, I isolated raw IPC throughput, scheduler latency, and memory bandwidth to remove user-space noise.
| Benchmark Suite | Metric | WSL 2.6.3 (6.6.87) | WSL 3.0.2 (6.18.40) | Delta |
|---|---|---|---|---|
| syscall/basic | getppid() throughput | ops/s | ops/s | +3.98% |
| Entry/exit latency | -3.83% | |||
| sched/pipe | 100k process ping-pong | ops/s | ops/s | +12.68% |
| Context switch latency | -11.25% | |||
| sched/messaging | Hackbench (20g, 800t) | -10.06% | ||
| mem/memcpy | glibc bandwidth (1GB) | +61.35% |
Analysis of Kernel Improvements
The Memory Breakthrough: The most staggering gain is the +61.35% increase in sequential memory throughput. This is largely attributed to the kernel command line parameter:
page_reporting.page_reporting_order=5. By increasing the granularity of page reporting, the system reduces the frequency of hypervisor traps and the overhead of page-table walking during Hyper-V dynamic memory reclamation.
- Scheduler IPC Latency (): Improvements in the upstream 6.18 scheduler, combined with optimized Hyper-V VMBus synthetic interrupt handling, have reduced the "wake penalty" when tasks bounce between the two pinned vCPUs.
- Syscall Transitions (): The modest gain in
getppidsuggests that ring transitions on 8th-Gen Intel chips are limited by hardware architecture, leaving little room for software-only optimization.
🚀 Real-World Workload: GoReleaser Compilation
To see if these micro-gains translate to actual development, I compiled the GoReleaser codebase using go build -a -o /dev/null. I ensured a clean state by running go clean -cache while keeping the module cache primed.
| Metric | WSL 2.6.3 (6.6.87) | WSL 3.0.2 (6.18.40) | Delta |
|---|---|---|---|
| Real (Wall-clock) | 3m 11.27s (191.27s) | 3m 03.80s (183.80s) | -7.47s (-3.91%) |
| User (CPU Time) | 4m 58.99s (298.99s) | 4m 49.38s (289.38s) | -9.61s (-3.21%) |
| Sys (Kernel Time) | 0m 57.39s (57.39s) | 0m 48.22s (48.22s) | -9.17s (-15.98%) |
Understanding the Runtime Split
While the total wall-clock time only improved by , the internal breakdown reveals a different story:
- Kernel Overhead Collapse: The
systime dropped by nearly 16%. Because the compiler relies heavily onmmap,futex, andopenatcalls to manage the package graph, the improved slab caching and lower trap overhead in kernel 6.18 provided a significant win. - The Hardware Ceiling: The reason the total time didn't drop further is that compilation is primarily a user-space compute task (Lexing, AST, SSA optimization). Since the VM is capped at two 2.10 GHz cores, the CPU clock speed becomes the primary bottleneck, not the kernel.
🏁 Final Takeaways
Upgrading to WSL 3.x is highly recommended, but the perceived benefit depends on your specific usage:
- ✅ High-Churn & Memory-Heavy Systems: If you run in-memory databases (e.g., Redis), dense container environments, or microservices using Unix domain sockets, you will see immediate, massive benefits.
- ⚠️ Compute-Bound Toolchains: If your primary bottleneck is raw CPU execution (like heavy compilation), WSL 3.x will reduce the time spent in the kernel, but your total build time will still be limited by your physical hardware.
Upgrade Checklist
- Update WSL to version 3.0.2.0 or higher.
- Verify kernel version is
6.18.x. - Check
.wslconfigfor optimal vCPU pinning.
Related Reading:
- The "Security Tax": Reclaiming 30% Performance in WSL 2
- Isolated Sandboxed WSL Environments with Debian Slim
- Taming GCE Memory Tax on Small Instances