Windows 的 WSL 与 Linux 的性能对比,到底鹿死谁手呢?

2023-10-10 19:59

本文主要是介绍Windows 的 WSL 与 Linux 的性能对比,到底鹿死谁手呢?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



Phoronix 网站发布了关于 Windows、WSL 和 Linux 的性能基准测试结果。测试的内容包括网络性能、I/O 性能、编程语言运行性能和图形处理性能等。

测试的系统版本为:

  • Ubuntu 18.04.3 LTS

  • Ubuntu 19.10 

  • Windows 10 18362

  • Windows 10 18362 WSL

  • Windows 10 19008 WSL

  • Windows 10 19008 WSL2

  • Windows 10 19008 


所有的 Windows/Linux WSL 性能基准测试均基于以下硬件环境:

  • MSI X299 SLI PLUS 主板

  • Intel Core i9 7960X CPU

  • 16 GB 内存

  • 256 GB Intel NVMe SSD

  • 技嘉 Radeon RX 550 显卡


所有操作系统和 WSL 实例均在其现成的配置中进行了测试,所有这些基准测试都是使用 Phoronix Test Suite 进行的。

下面看看测试结果:

WSL 过去存在瓶颈的地方是 I/O 性能,通过观察测试数据我们能看到,到了 WSL2,它在 I/O 性能上要优于 WSL,这或许要归功于 WSL2 的 Hyper-V VM。不过对于某些 SQLite 测试,WSL2 的表现并不算太好。

有意思的是,WSL1/WSL2 的性能表现在某些 SQLite 测试中甚至超过 Windows 本身(有可能是由于 SQLite 上游的 fsync 行为在不同平台中表现不一样,也可能是因为某些 fsync 操作未在 WSL 下进行同样的处理)。

虽然 WSL2 提供了比 WSL 更好的 I/O 性能,但仍有改进的空间。

通过微软自带的 Ethr 基准测试进行评估,在网络性能方面,与 Ubuntu 相比,WSL 甚至 Windows 10 本身仍具有相当大的优势。

在完全由 CPU 决定的工作负载中,WSL/WSL2 的性能表现良好,和裸机 Linux 不相上下。

上图的性能测试结果显示,除了在测试 HTTP 时,WSL 下的 Golang 性能基本比 Windows 更好。

上面的数据显示,在使用相同 OpenJDK 版本的条件下,Windows 10 19008 似乎也比 Windows 10 18362 提供了更好的 Java 性能。而对于 WSL,结果好坏参半。

上面的数据是使用英特尔 OSpray 渲染器进行测试的结果,可以看到 WSL1 比 WSL2 快。

这里使用英特尔 Embree 测试的数据也很有趣,可以看到,在使用官方 Windows 二进制文件的情况下,Windows 10 19008 的性能要比 18362 的更好,WSL1 的性能也比 WSL2 好,不过它们都要比 Ubuntu 逊色一筹。

这里使用了英特尔 SVT 视频编码器进行测试,可以看到,属于 Windows 10 Insider 预览版的 Windows 10 19008 表现不错,和 Ubuntu、WSL/WSL2 不相上下。

从这个测试可以看到,Windows 10 Build 19008 的性能有了较大的改进,而 WSL 的性能则没有太大的变化。

与 Windows 相比,LuxCoreRender在 WSL/WSL2 中的性能更好。WSL 的性能也比 Ubuntu 稍好。

Himeno 属于比较重量级的工作负载,可以看到,在这个测试下,裸机 Ubuntu 的性能仍然是最好的。

与较早的 18362 版本相比,Windows 10 19008 显示出了另一项重大改进 —— 解压文件的性能。

这里测试的是代码编译性能,由于 I/O 存在瓶颈,在 WSL 上进行代码编译仍然很慢,而 WSL2 由于采用了传统的 VM 类型方法,因此它的速度有了一定的提升。

从上图可以看出,在 WSL 中构建 LLVM 比在 Windows 中构建 LLVM 要快。

上面这些结果显示了不同的测试条件下各自的表现,这里不再赘述了,各位可根据自己的需要进行查看。

使用 Blender 进行测试时,WSL/WSL2 可与 Linux 的性能相媲美,而 Windows 10 18362 的表现则稍有落后。

尽管执行了各种各样的测试,但是如果对在七个不同操作系统上成功运行的所有测试取几何平均值,可以得出这样的结论:

  • Windows 10 Build 19008 的总体性能要比 Build 18362 版本好,而 WSL 的性能并没有太大变化

  • WSL2 比 WSL 的性能确实稍好一些,这是因为在  I/O 或网络活动繁重的工作负载的情况下前者性能要好得多

  • 在这种特殊的 Core i9 7960X 场景下,运行 Ubuntu Linux 的速度总体上比最快的 Windows 配置快 27%

有兴趣的朋友可查看这份更详细的 OpenBenchmarking.org 结果文件,以深入研究这些 Windows / WSL / Linux 基准测试内容。

本文转载自:「开源中国」,原文:https://url.cn/5fRuo8f,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com 。

你可能还喜欢

点击下方图片即可阅读

天天都在用的 Iptables 你真的了解吗?5 分钟带你看懂其底层架构 Netfilter!

这篇关于Windows 的 WSL 与 Linux 的性能对比,到底鹿死谁手呢?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/182743

相关文章

mysqld_multi在Linux服务器上运行多个MySQL实例

《mysqld_multi在Linux服务器上运行多个MySQL实例》在Linux系统上使用mysqld_multi来启动和管理多个MySQL实例是一种常见的做法,这种方式允许你在同一台机器上运行多个... 目录1. 安装mysql2. 配置文件示例配置文件3. 创建数据目录4. 启动和管理实例启动所有实例

Linux内存泄露的原因排查和解决方案(内存管理方法)

《Linux内存泄露的原因排查和解决方案(内存管理方法)》文章主要介绍了运维团队在Linux处理LB服务内存暴涨、内存报警问题的过程,从发现问题、排查原因到制定解决方案,并从中学习了Linux内存管理... 目录一、问题二、排查过程三、解决方案四、内存管理方法1)linux内存寻址2)Linux分页机制3)

VScode连接远程Linux服务器环境配置图文教程

《VScode连接远程Linux服务器环境配置图文教程》:本文主要介绍如何安装和配置VSCode,包括安装步骤、环境配置(如汉化包、远程SSH连接)、语言包安装(如C/C++插件)等,文中给出了详... 目录一、安装vscode二、环境配置1.中文汉化包2.安装remote-ssh,用于远程连接2.1安装2

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s

Linux之软件包管理器yum详解

《Linux之软件包管理器yum详解》文章介绍了现代类Unix操作系统中软件包管理和包存储库的工作原理,以及如何使用包管理器如yum来安装、更新和卸载软件,文章还介绍了如何配置yum源,更新系统软件包... 目录软件包yumyum语法yum常用命令yum源配置文件介绍更新yum源查看已经安装软件的方法总结软

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

Linux:alias如何设置永久生效

《Linux:alias如何设置永久生效》在Linux中设置别名永久生效的步骤包括:在/root/.bashrc文件中配置别名,保存并退出,然后使用source命令(或点命令)使配置立即生效,这样,别... 目录linux:alias设置永久生效步骤保存退出后功能总结Linux:alias设置永久生效步骤

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动