在纯Ubuntu和Windows(WSL)的Ubuntu上运行模拟


15

我想问一个有关在以下两种情况下在同一台计算机上测试大型CAE仿真的问题。

  1. 纯Ubuntu系统
  2. Windows 10(WSL)中的Ubuntu系统

两种情况下的计算速度几乎相同还是不同?


4
如果不了解模拟的性质,就无法回答。
muru

1
@muru:并不是那么模糊。“模拟”可能是一项计算量很大的后台作业,这使其成为CPU或内存受限的对象。(磁盘或网络I / O可能也是瓶颈,但这是编写此类程序的人所趋于避免的,并且一些现代的仿真代码甚至可能使用GPU进行并行计算。)一个人可以很轻松地编写(或下载)基准测试它测试了这2到5个可能的瓶颈,并检查WSL和本机Ubuntu之间是否存在任何显着差异。我愿意,但是我没有WSL(或Windows 10)可用。
Ilmari Karonen

3
@IlmariKaronen“大概”。取决于处理的数据,即使CPU受限制,它也可能是IO密集型的。您的其余评论是解决此问题的一个很好的理由-我们不知道瓶颈在这里有什么可能的组合。
muru

1
好吧,我确实发布了答案,因为事实证明合适的基准测试已经在线。显然,我无法确定OP的特定仿真代码在WSL上运行的是否较慢。但无论如何,除了OP之外,对这个问题的答案对任何人都没有用。根据基准测试,我能回答的是,可以合理预期哪些类型的仿真代码在WSL和本机Linux之间具有性能差异。
Ilmari Karonen

@muru,它是CAE模拟(Abaqus CAE)。
ABCDEMMM

Answers:


18

仿真软件很可能是受CPU限制或受内存限制的。对于此类工作负载,除了在“裸机”上或在WSL(或使用本机执行的任何其他兼容层或VM)内部运行代码之间,不会看到任何显着差异,因为在两种情况下,操作系统大多只是待命。仿真代码直接在CPU上运行。

但是,您的模拟也可能至少部分受I / O约束,这可能会导致差异。显然,WSL(当前)具有相当慢的文件系统接口层,可以大大降低磁盘I / O的速度。*也就是说,尽管磁盘I / O可能是许多批量数据处理任务的主要瓶颈,但“模拟”平时应花费其大部分的时间读取和写入文件。如果是,请考虑从RAM磁盘(例如,本机** Linux上的tmpfs)运行它,以避免不必要的物理磁盘访问。

无论如何,唯一可以确保的方法是在两种环境中以及时间上测试您的仿真运行时间。但是,在此之前,您可能需要看一下现有的基准测试,例如Phoronix从2018年2月开始的WSL,Docker,VirtualBox和本地Linux性能基准测试,并检查所有强调相同组件的测试结果系统的仿真。

(FWIW,Phoronix的结果似乎基本符合我上面概述的一般原则,尽管在一些I / O绑定基准测试中有一些明显的奇怪之处,例如VirtualBox在性能上显然胜过本机Linux,这显然是因为其虚拟磁盘并不总是立即同步数据我没有在上面提到的一个潜在的相关问题是,基准测试显示,即使在裸机上运行,不同主机环境之间以及不同Linux发行版之间的多线程OpenMP性能也存在显着差异。这并不奇怪,因为线程和IPC是由内核处理的。我猜那里的发行版之间的许多差异可能归结为不同的运行时和/或编译时内核调整参数。)


*)根据2016年的MSDN博客文章,WSL中实际上有两个文件系统接口组件:VolFs,它通过NTFS紧密模拟本机Linux文件系统语义,并用于挂载eg //home; DrvFs,其提供了大多数类似于Windows的语义并用于通过/mnt/c等访问Windows主机驱动器。如果您的软件不特别要求本机Linux文件系统功能(如指向同一文件的多个硬链接),则对其进行配置以将其数据文件存储在DrvFs文件夹中可能会提高文件访问性能。 WSL。

**)根据2017年5月的Reddit线程,WSL上的“ tmpfs当前正在使用磁盘进行仿真”。除非去年发生了任何变化,否则可能意味着在WSL上使用tmpfs不会比在普通磁盘上使用文件系统带来任何性能上的好处。


也许不仅是调整参数,还包括编译器选项(例如-O3 -march=haswell,诸如此类。我不知道Clear Linux实际上用来构建其内核的是popcnt什么,但是也许BMI2 / //可以在glibc和内核方面产生可测量的不同。)不过,我没有从AVX中受益,因为内核避免了触摸FPU寄存器,除非使用诸如软件RAID5 / 6错误校正数据之类的特定代码。)
Peter Cordes,

12

Windows中的Ubuntu(WSL-2017 Fall Creators Update)绝对比Linux环境中的“纯” Ubuntu慢。

例如,与Ubuntu 16.04相比,Windows 10中的屏幕绘画时间要长很多倍,也就是说,您实际上可以在Windows 10中看到光标移动:

WSL bash startup.gif

WSL Bash初始屏幕绘制大约需要5秒钟。相比之下,在Ubuntu 16.04中,相同的启动屏幕大约需要1 1/2秒:

Ubuntu终端splash.gif


CPU基准测试

第一部分显示屏幕I / O的速度如何,但是CPU基准测试又如何呢?

通过这个Ask Ubuntu Q&A:Linux的CPU基准测试实用程序,我在Linux和Windows的Ubuntu 16.04上进行了测试。在Linux上大约24秒,在Windows 10版本1709上大约31秒。Linux快6秒或快25%。但是我刚刚将Windows 10升级到了版本1803(Redstone 4又名Spring Creators 2018年4月更新),它花费了24秒,与Linux相同。

Linux上的Ubuntu 16.04

$ sysbench --test=cpu --cpu-max-prime=20000 run
sysbench 0.4.12:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1

Doing CPU performance benchmark

Threads started!
Done.

Maximum prime number checked in CPU test: 20000


Test execution summary:
    total time:                          23.5065s
    total number of events:              10000
    total time taken by event execution: 23.5049
    per-request statistics:
         min:                                  2.13ms
         avg:                                  2.35ms
         max:                                  8.52ms
         approx.  95 percentile:               2.76ms

Threads fairness:
    events (avg/stddev):           10000.0000/0.00
    execution time (avg/stddev):   23.5049/0.00

Windows 10 build 1709上的Ubuntu 16.04

$ sysbench --test=cpu --cpu-max-prime=20000 run
sysbench 0.4.12:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1

Doing CPU performance benchmark

Threads started!
Done.

Maximum prime number checked in CPU test: 20000


Test execution summary:
    total time:                          30.5350s
    total number of events:              10000
    total time taken by event execution: 30.5231
    per-request statistics:
         min:                                  2.37ms
         avg:                                  3.05ms
         max:                                  6.21ms
         approx.  95 percentile:               4.01ms

Threads fairness:
    events (avg/stddev):           10000.0000/0.00
    execution time (avg/stddev):   30.5231/0.00

Windows 10 build 1803上的Ubuntu 16.04

$ sysbench --test=cpu --cpu-max-prime=20000 run
sysbench 0.4.12:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1

Doing CPU performance benchmark

Threads started!
Done.

Maximum prime number checked in CPU test: 20000


Test execution summary:
    total time:                          23.7223s
    total number of events:              10000
    total time taken by event execution: 23.7155
    per-request statistics:
         min:                                  2.21ms
         avg:                                  2.37ms
         max:                                  4.53ms
         approx.  95 percentile:               2.73ms

Threads fairness:
    events (avg/stddev):           10000.0000/0.00
    execution time (avg/stddev):   23.7155/0.00

注意: 2018年的Windows 10春季更新(称为Redstone 4)于5月9日(4天前)发布,我将尽快安装它以查看改进。无疑有很多。我知道我感兴趣的一个地方是能够cron在启动时运行作业。我需要自动每日备份到gmail.com。

注意2:我刚刚安装了Windows 10 Build 1803(2018年4月Spring Creators Update AKA Redstone 4),并且屏幕绘制要快得多。现在仅3秒钟即可显示Bash初始屏幕,而不是5秒。现在,CPU基准与Linux相当。


8
请注意,这具有误导性-不能区分I / O性能和其他计算性能。众所周知,WSL的I / O速度很慢(例如,参见Phoronix基准测试)。但这并没有说明OP的计算是否可以在WSL中同样快地完成。
muru

6
老实说,这两种情况下绘制启动屏幕都不会立即生效,我感到很惊讶。(大概)您的计算机很乐意在几毫秒内完成更复杂的屏幕更新,例如在播放视频时。我最后一次看到终端像您第一次录音一样慢是在90年代初,当时是在2400 bps调制解调器上拨打BBS时。
Ilmari Karonen

“ Linux中的Ubuntu”是什么意思?
乔恩·本特利

3
老实说,这种基准对于任何现实的程序都是完全没有用的,因为任何基准都可以测量控制台绘画速度。程序的瓶颈是控制台I / O(即使在大多数终端仿真器的Linux上,它的速度也很慢),或者这并不是任何有用的可靠措施。
意大利Matteo '18

2
@ WinEunuuchs2Unix从我可以看到,几乎没有计算。但是有很多I / O:从某个地方获取天气,读取日期和时间,并以某种格式打印,读取系统信息等。无论如何,您是否曾经使用过Abaqus?除非您强制执行模拟,否则在运行实际模拟时,像It或Ansys或Simulink这样的模拟软件不受屏幕I / O约束。这些都完全有可能根据完成的模拟显示最终结果。
muru

7

考虑一下-在WSL中,您的计算机正在运行完整的图形Windows系统(首先是可怕的资源消耗)以及Ubuntu子系统。在本机Ubuntu中,它仅运行Ubuntu。


1
@JimDeadlock我真的不认为它会杀死桌面,只是不显示它。每个GUI应用程序仍在后台运行,不是吗?
埃里克·杜米尼尔

2
Windows GUI占用一些内存,但是什么都不做就不会占用太多CPU。我不知道为什么会有什么重大影响?
vidarlo

1
将控制台切换到其他VT不会终止任何进程。@EricDuminil是正确的。因为X服务器知道它不再显示了,所以它可能会暂停使用CPU时间进行图形更新的内容(因此可能不会浪费任何时间在OpenGL处理​​或其他方面)。但是,如果您运行pstreeps auxw,很显然所有所有进程都仍然有效。(或者top按M键以按内存消耗排序)。
彼得·科德斯

2
@MichaelEricOberlin:更改为另一个VT不会影响运行级别!只是文本控制台在启动GDM的运行级别中仍然可用。(顺便说一句,运行级别基本上已经成为过去;systemd它不能像SysV一样工作init。此注释的较早部分是假装您正在运行5或10年历史的Linux发行版,并带有老式的init设置。)但是,是的,退出X会话并停止X11 / GDM将会释放资源,特别是在没有交换空间或桌面出现垃圾的情况下,即使“空闲”时也会频繁唤醒。
彼得·科德斯

1
@MichaelEricOberlin:您的评论完全是错误的。您可以考虑删除它吗?
埃里克·杜米尼尔

1

我不知道这是否会特别影响您的仿真,但可能会:

WSL不会使用RAM共享内存!它使用磁盘!

这意味着,如果您的仿真使用共享内存(请考虑/dev/shm),它可能会变慢和/或损坏存储设备!而性能损失来自多个层面:

  • 文件系统驱动程序

  • 存储驱动程序

  • 储存媒体

但是,如果不这样做,那么性能应该类似于裸机Ubuntu(假定没有其他I / O,就像其他人提到的那样)。


真的很高兴知道它!
ABCDEMMM
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.