ใช้การจำลองบน Ubuntu บริสุทธิ์กับ Ubuntu ใน Windows (WSL)


15

ฉันต้องการถามคำถามเกี่ยวกับการทดสอบการจำลองCAEขนาดใหญ่บนคอมพิวเตอร์เครื่องเดียวกันในสองสถานการณ์ต่อไปนี้

  1. ระบบ Ubuntu บริสุทธิ์
  2. ระบบ Ubuntu ใน Windows 10 (WSL)

ความเร็วในการคำนวณในทั้งสองกรณีเกือบเท่ากันหรือแตกต่างกันหรือไม่?


4
โดยไม่ทราบว่าลักษณะของการจำลองนั้นเป็นไปไม่ได้ที่จะตอบ
muru

1
@muru: มันไม่ได้เป็นที่คลุมเครือ "การจำลอง" อาจเป็นงานพื้นหลังที่ใช้คอมพิวเตอร์เป็นหลักซึ่งทำให้ CPU หรือหน่วยความจำถูกผูกไว้ (ดิสก์หรือเครือข่าย I / O อาจเป็นคอขวด แต่นั่นเป็นสิ่งที่คนเขียนโปรแกรมดังกล่าวมักจะหลีกเลี่ยงและบางรหัสจำลองที่ทันสมัยอาจใช้ GPU สำหรับการคำนวณแบบขนาน) หนึ่งสามารถเขียน (หรือดาวน์โหลด) มาตรฐานได้อย่างง่ายดาย ที่ทดสอบคอขวดที่เป็นไปได้เหล่านี้ทั้งหมด 2 ถึง 5 และตรวจสอบว่ามีความแตกต่างอย่างมีนัยสำคัญระหว่าง WSL และ Ubuntu ดั้งเดิมสำหรับสิ่งใด ๆ ฉันทำได้ แต่ฉันไม่มี WSL (หรือ Windows 10)
Ilmari Karonen

3
@IlmariKaronen "สมมุติ" ขึ้นอยู่กับข้อมูลที่นำมา crunched ก็อาจจะเป็นอย่างเข้มข้น IO แม้ว่า CPU จะถูกผูกไว้ และความเห็นที่เหลือของคุณเป็นเหตุผลที่ดีในการปิดเรื่องนี้ - เราไม่มีความคิดว่าการรวมกันของคอขวดที่เป็นไปได้นั้นมีความสำคัญอย่างไร
muru

1
ดีฉันไม่โพสต์คำตอบเพราะมันกลับกลายเป็นว่ามาตรฐานที่เหมาะสมอยู่แล้วออนไลน์ เห็นได้ชัดว่าฉันไม่สามารถพูดได้อย่างแน่นอนว่ารหัสจำลองเฉพาะของ OP จะทำงานช้าลงบน WSL หรือไม่ แต่ในกรณีใด ๆ คำตอบสำหรับคำถามนั้นไม่เป็นประโยชน์กับใครนอกจาก OP สิ่งที่ฉันสามารถตอบได้ตามมาตรฐานเป็นสิ่งที่ประเภทของรหัสการจำลองที่คาดว่าจะมีความแตกต่างระหว่าง WSL และ Linux พื้นเมือง
Ilmari Karonen

@muru เป็น CAE Simulation (Abaqus CAE)
ABCDEMMM

คำตอบ:


18

ซอฟต์แวร์การจำลองของคุณมีแนวโน้มมากที่สุดทั้งCPU ผูกพันหรือหน่วยความจำที่ถูกผูกไว้ สำหรับเวิร์กโหลดดังกล่าวเราจะไม่ยกเว้นที่จะเห็นความแตกต่างอย่างมีนัยสำคัญระหว่างการรันโค้ดบน "เปลือยโลหะ" หรือภายใน WSL (หรือเลเยอร์ความเข้ากันได้อื่นหรือ VM ที่ใช้การประมวลผลดั้งเดิม) เนื่องจากในกรณีใดกรณีหนึ่ง ในขณะที่รหัสการจำลองทำงานโดยตรงบน CPU

อย่างไรก็ตามอาจเป็นไปได้ว่าการจำลองของคุณอย่างน้อยบางส่วนของ I / O และนั่นคือสิ่งที่ความแตกต่างอาจเกิดขึ้น เห็นได้ชัดว่า WSL (ปัจจุบัน) มีชั้นอินเตอร์เฟซระบบไฟล์ที่ค่อนข้างช้าซึ่งสามารถชะลอดิสก์ I / O ได้อย่างมีนัยสำคัญ * กล่าวว่าในขณะที่ดิสก์ I / O สามารถเป็นคอขวดที่สำคัญสำหรับงานการประมวลผลข้อมูลจำนวนมาก มักจะไม่ควรใช้เวลาส่วนใหญ่ในการอ่านและเขียนไฟล์ หากเป็นของคุณคุณอาจต้องการพิจารณาเรียกใช้จากดิสก์ RAM (เช่น tmpfs บน native ** Linux) เพื่อหลีกเลี่ยงการเข้าถึงดิสก์ที่ไม่มีความจำเป็น

ไม่ว่าในกรณีใดวิธีเดียวที่จะมั่นใจได้คือการทดสอบแบบจำลองของคุณในสภาพแวดล้อมและเวลาที่ใช้ในการรัน อย่างไรก็ตามก่อนที่คุณจะทำเช่นนั้นคุณอาจต้องการดูมาตรฐานที่มีอยู่เช่นWSL เทียบกับ Docker กับ VirtualBox เปรียบเทียบกับมาตรฐานประสิทธิภาพของ Linux พื้นเมืองโดย Phoronix ตั้งแต่เดือนกุมภาพันธ์ 2018และตรวจสอบผลลัพธ์สำหรับการทดสอบใด ๆ ที่เน้นองค์ประกอบเดียวกัน ของระบบตามการจำลองของคุณ

(FWIW ผล Phoronix ดูเหมือนจะตรงกับหลักการทั่วไปส่วนใหญ่ที่ฉันระบุไว้ข้างต้นแม้ว่าจะมีแปลกประหลาดบางอย่างเช่น VirtualBox เด่นชัดกว่าลินุกซ์พื้นเมืองในมาตรฐาน I / O ผูกพันไม่กี่เห็นได้ชัดเนื่องจากดิสก์เสมือนไม่ทันทีซิงค์ข้อมูลทันที ไปยังดิสก์ทางกายภาพ. ปัญหาหนึ่งที่เกี่ยวข้องที่อาจเกิดขึ้นที่ฉันล้มเหลวที่จะต้องทราบดังกล่าวข้างต้นคือมาตรฐานแสดงความแตกต่างอย่างมีนัยสำคัญในการทำงานแบบมัลติเธรด OpenMP ทั้งระหว่างสภาพแวดล้อมโฮสต์ที่แตกต่างกันและระหว่าง distros ลินุกซ์ที่แตกต่างกันแม้ในขณะที่ทำงานบนฮาร์ดแวร์เปลือย. ย้อนหลัง ไม่น่าแปลกใจนักเนื่องจากเธรดและ IPC ถูกจัดการโดยเคอร์เนลฉันเดาว่าความแตกต่างส่วนใหญ่ระหว่าง distros นั้นอาจเกิดขึ้นกับรันไทม์ที่แตกต่างกันและ / หรือพารามิเตอร์การปรับแต่งเคอร์เนลเวลาคอมไพล์)


*) จากการโพสต์บล็อกของ MSDN ในปี 2559 มีองค์ประกอบของระบบไฟล์สองส่วนใน WSL: VolFs ซึ่งเลียนแบบความหมายของระบบไฟล์ Linux ดั้งเดิมผ่าน NTFS อย่างใกล้ชิดและใช้เพื่อติดตั้งเช่น/และ/homeและ DrvFs ซึ่งให้ความหมายเหมือน Windows และใช้สำหรับการเข้าถึงไดรฟ์ Windows โฮสต์ผ่าน/mnt/cฯลฯ หากซอฟต์แวร์ของคุณไม่ต้องการคุณสมบัติระบบไฟล์ Linux ดั้งเดิมเช่นการเชื่อมโยงอย่างหนักหลายไฟล์ไปยังไฟล์เดียวกันการกำหนดค่าเพื่อจัดเก็บไฟล์ข้อมูลในโฟลเดอร์ DrvFs อาจปรับปรุงประสิทธิภาพการเข้าถึงไฟล์ WSL

**) ตามReddit เธรดนี้ตั้งแต่เดือนพฤษภาคม 2017, "tmpfs ปัจจุบันถูกจำลองโดยใช้ดิสก์" บน WSL หากไม่มีการเปลี่ยนแปลงบางอย่างในปีที่ผ่านมาสิ่งนี้น่าจะหมายความว่าการใช้ tmpfs บน WSL ไม่ได้ให้ประโยชน์ด้านประสิทธิภาพมากกว่าการใช้ระบบไฟล์บนดิสก์ปกติ


อาจไม่ใช่แค่การปรับพารามิเตอร์ แต่เป็นตัวเลือกของคอมไพเลอร์ (เช่น-O3 -march=haswellหรือบางอย่างฉันไม่รู้ว่า Clear Linux ใช้สร้างเมล็ดของพวกเขาได้จริง แต่บางที BMI2 / popcnt/ อะไรก็ตามที่สามารถสร้างความแตกต่างที่วัดได้ใน glibc และเคอร์เนล แม้ว่าจะไม่ได้ประโยชน์จาก AVX เนื่องจากเคอร์เนลหลีกเลี่ยงการสัมผัสกับการลงทะเบียน FPU ยกเว้นในรหัสเฉพาะเช่นข้อมูลการแก้ไขข้อผิดพลาดซอฟต์แวร์-RAID5 / 6)
Peter Cordes

12

Ubuntu ใน Windows (WSL - 2017 Fall Builders Update) นั้นช้ากว่า Ubuntu "Pure" ในระบบ Linux

ตัวอย่างเช่นการวาดภาพบนหน้าจอใช้เวลานานขึ้นหลายเท่าใน Windows 10 เทียบกับ Ubuntu 16.04 นั่นคือคุณสามารถเห็นการเลื่อนเคอร์เซอร์ใน Windows 10:

WSL bash startup.gif

ใช้เวลาประมาณ 5 วินาทีในการทาสีหน้าจอ WSL Bash โดยการเปรียบเทียบมันเป็นประมาณ 1 1/2 วินาทีสำหรับหน้าจอเดียวกันใน Ubuntu 16.04:

เทอร์มินัล Ubuntu splash.gif


การเปรียบเทียบ CPU

ส่วนแรกแสดงให้เห็นว่า I / O หน้าจอช้าแค่ไหน แต่เกี่ยวกับการเปรียบเทียบ CPU?

จากนี้ถามคำถามเกี่ยวกับ Ubuntu: ยูทิลิตี้การเปรียบเทียบ CPU สำหรับ Linuxฉันรันการทดสอบบน Ubuntu 16.04 บน Linux และ Windows บน Linux ประมาณ 24 วินาทีบน Windows 10 เวอร์ชั่น 1709 ประมาณ 31 วินาที Linux เร็วขึ้น 6 วินาทีหรือเร็วขึ้นประมาณ 25% อย่างไรก็ตามฉันเพิ่งอัพเกรด Windows 10 เป็นเวอร์ชัน 1803 (อัปเดต Redstone 4 หรือที่เรียกว่า Spring Builders เมษายน 2018) และใช้เวลา 24 วินาทีซึ่งเหมือนกับ Linux

Ubuntu 16.04 บน Linux

$ 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

Ubuntu 16.04 บน Windows 10 build 1709

$ 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

Ubuntu 16.04 บน Windows 10 บิลด์ 1803

$ 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

หมายเหตุ: การอัปเดต Windows 10 spring สำหรับปี 2018 (ขนานนามRedstone 4 ) ออกมาในวันที่ 9 พฤษภาคม (4 วันที่ผ่านมา) และฉันจะติดตั้งในไม่ช้าเพื่อตรวจสอบการปรับปรุง ไม่ต้องสงสัยเลยว่ามีอยู่มากมาย หนึ่งที่ฉันรู้ว่าสิ่งที่ฉันสนใจคือความสามารถในการทำงานcronเมื่อเริ่มต้น ฉันต้องการข้อมูลสำรองอัตโนมัติทุกวันไปที่ gmail.com

หมายเหตุ 2:ฉันเพิ่งติดตั้ง Windows 10 Build 1803 (เมษายน 2018 Spring Updates Update AKA Redstone 4) และการวาดภาพบนหน้าจอนั้นเร็วกว่ามาก ตอนนี้เป็นเพียง 3 วินาทีแทนที่จะเป็น 5 วินาทีเพื่อแสดงหน้าจอ Bash splash มาตรฐานของ CPU อยู่ในระดับเดียวกับ Linux แล้ว


8
โปรดทราบว่านี่เป็นสิ่งที่ทำให้เข้าใจผิด - สิ่งนี้ไม่ได้แยกความแตกต่างของประสิทธิภาพ I / O และประสิทธิภาพการคำนวณอื่น ๆ WSL นั้นช้าสำหรับ I / O (ดูเช่นมาตรฐานของ Phoronix) ไม่ได้พูดอะไรเกี่ยวกับว่าการคำนวณของ OP สามารถทำได้อย่างรวดเร็วใน WSL หรือไม่
muru

6
ฉันประหลาดใจอย่างแท้จริงที่การวาดหน้าจอสแปลชไม่ได้มีประสิทธิภาพในทั้งสองกรณี คอมพิวเตอร์ของคุณยินดีที่จะทำการปรับปรุงหน้าจอที่ซับซ้อนมากขึ้นในไม่กี่มิลลิวินาทีเช่นเมื่อเล่นวิดีโอ และครั้งสุดท้ายที่ฉันเห็นเทอร์มินัลช้าเช่นเดียวกับในการบันทึกครั้งแรกของคุณอยู่ในช่วงต้นยุค 90 เมื่อเรียกใช้ BBS บนโมเด็ม 2,400 bps ของฉัน
Ilmari Karonen

"Ubuntu ใน Linux" หมายความว่าอย่างไร
Jon Bentley

3
ตามจริงแล้วเกณฑ์มาตรฐานประเภทนี้ไร้ประโยชน์อย่างสมบูรณ์สำหรับโปรแกรมประเภทใดก็ตามเนื่องจากมาตรฐานที่วัดความเร็วคอนโซลเป็นหลัก ไม่ว่าจะเป็นคอขวดของโปรแกรมของคุณคือ console I / O (ซึ่งเป็นที่ทราบกันช้าว่าแม้ใน Linux ที่มีเทอร์มินัลอีมูเลเตอร์ส่วนใหญ่) หรือนี่ไม่ใช่สิ่งที่มีประโยชน์
Matteo Italia

2
@ WinEunuuchs2Unix จากสิ่งที่ฉันเห็นมีการคำนวณเล็กน้อย แต่ I / O มากมาย: ดึงข้อมูลสภาพอากาศจากที่ไหนสักแห่งอ่านวันที่และเวลาแล้วพิมพ์ในรูปแบบอ่านข้อมูลระบบ ฯลฯ คุณเคยใช้ Abaqus ไหม? ซอฟต์แวร์การจำลองเช่นมันหรือ Ansys หรือ Simulink จะไม่ถูกผูกหน้าจอ I / O เมื่อรันการจำลองที่เกิดขึ้นจริงเว้นแต่ว่าคุณจะบังคับให้การจำลองนั้นเป็นเช่นนั้น เป็นไปได้อย่างสมบูรณ์แบบสำหรับสิ่งเหล่านี้ในการแสดงผลลัพธ์ที่สิ้นสุดขึ้นอยู่กับการจำลองที่กระทำ
muru

7

ลองคิดดู - ใน WSL คอมพิวเตอร์ของคุณใช้ระบบ Windows แบบกราฟิกเต็มรูปแบบ (ซึ่งเป็นหมูทรัพยากรที่น่ากลัวตั้งแต่แรก) บวกกับระบบย่อยของ Ubuntu ใน Ubuntu ดั้งเดิมมันใช้งาน Ubuntu เท่านั้น


1
@JimDeadlock ฉันไม่คิดว่ามันจะฆ่าเดสก์ทอป แต่มันไม่ได้แสดง แอป Gui ทั้งหมดยังคงทำงานในพื้นหลังใช่ไหม
Eric Duminil

2
windows GUI ใช้หน่วยความจำบางส่วน แต่ไม่ได้ใช้ CPU มากนักเมื่อไม่ทำอะไรเลย ฉันไม่เห็นสาเหตุที่จะมีผลกระทบที่สำคัญใด ๆ
vidarlo

1
การสลับคอนโซลไปเป็น VT ที่แตกต่างกันไม่ได้ฆ่ากระบวนการใด ๆ @EricDuminil ถูกต้อง อาจหยุดสิ่งที่ใช้เวลา CPU ในการอัปเดตกราฟิกชั่วคราวเนื่องจากเซิร์ฟเวอร์ X รู้ว่าไม่มีการแสดงอีกต่อไป (และอาจไม่เสียเวลาในการประมวลผล OpenGL หรืออะไรก็ตาม) แต่ถ้าคุณเรียกใช้pstreeหรือps auxwเห็นได้ชัดว่ากระบวนการทั้งหมดยังมีชีวิตอยู่ (หรือtopกด M เพื่อจัดเรียงตามปริมาณการใช้หน่วยความจำ)
Peter Cordes

2
@MichaelEricOberlin: การเปลี่ยนเป็น VT ตัวอื่นจะไม่ส่งผลกระทบต่อ runlevel! เป็นเพียงคอนโซลข้อความที่ยังคงมีอยู่ในระดับที่เริ่มต้น GDM (และ BTW, runlevels นั้นเป็นเรื่องของอดีตsystemdไม่ทำงานเหมือน SysV initส่วนก่อนหน้าของความคิดเห็นนี้แกล้งทำเป็นว่าคุณกำลังใช้ Linux distro อายุ 5 หรือ 10 ปีพร้อมการinitตั้งค่าแบบโรงเรียนเก่า) แต่ใช่ การออกจากระบบเซสชัน X ของคุณและการหยุด X11 / GDM จะทำให้ทรัพยากรเพิ่มขึ้นโดยเฉพาะถ้าคุณไม่มีพื้นที่สว็อปหรือเดสก์ท็อปของคุณมีอึที่ตื่นขึ้นมาบ่อยๆแม้เมื่อ "ว่าง"
Peter Cordes

1
@MichaelEricOberlin: ความคิดเห็นของคุณค่อนข้างผิดปกติ คุณจะโปรดพิจารณาลบมันได้หรือไม่
Eric Duminil

1

ฉันไม่รู้ว่าสิ่งนี้จะส่งผลกระทบต่อการจำลองของคุณโดยเฉพาะหรือไม่ แต่อาจ:

WSL ไม่ใช้ RAM สำหรับหน่วยความจำที่แชร์! มันใช้ดิสก์!

ซึ่งหมายความว่าหากการจำลองของคุณใช้หน่วยความจำที่แชร์ (คิดว่า/dev/shm) อาจจะช้าและ / หรือทำให้อุปกรณ์เก็บข้อมูลของคุณเสื่อมสภาพ! และประสิทธิภาพการลงโทษมาจากหลายชั้น:

  • ไดรเวอร์ระบบไฟล์

  • ไดรเวอร์เก็บข้อมูล

  • สื่อจัดเก็บข้อมูล

แต่ถ้ามันไม่ทำเช่นนั้นประสิทธิภาพควรจะคล้ายกับที่อยู่บน Ubuntu โลหะเปลือย (สมมติว่าไม่มี I / O อื่น ๆ ตามที่คนอื่นพูดถึง)


ดีจริงๆที่จะรู้ว่ามัน!
ABCDEMMM
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.