Uruchamianie symulacji na czystym Ubuntu vs. na Ubuntu w Windows (WSL)

15

Chciałbym zadać pytanie dotyczące testowania dużej symulacji CAE na tym samym komputerze w następujących dwóch sytuacjach.

  1. Czysty system Ubuntu
  2. System Ubuntu w Windows 10 (WSL)

Czy prędkości obliczeniowe w obu przypadkach są prawie takie same, czy różnią się?

ABCDEMMM
źródło
4
Bez znajomości natury symulacji nie można na nie odpowiedzieć.
muru
1
@muru: To nie jest tak niejasne. „Symulacja” jest przypuszczalnie intensywnym obliczeniowo zadaniem w tle, co powoduje, że jest ona związana z procesorem lub pamięcią. (We / wy dyskowe lub sieciowe może być również wąskim gardłem, ale ludzie piszący takie programy mają tendencję do unikania, a niektóre współczesne kody symulacyjne mogą nawet wykorzystywać GPU do obliczeń równoległych.) Można dość łatwo napisać (lub pobrać) test porównawczy który testuje wszystkie 2 do 5 możliwych wąskich gardeł i sprawdza, czy istnieje jakaś znacząca różnica między WSL a natywnym Ubuntu dla któregokolwiek z nich. Zrobiłbym to, ale nie mam dostępnego WSL (lub Windows 10).
Ilmari Karonen
3
@IlmariKaronen „przypuszczalnie”. W zależności od zapętlenia danych, równie dobrze może być intensywne we / wy, nawet jeśli procesor jest związany. Reszta twojego komentarza jest całkiem dobrym powodem, aby to zamknąć - nie mamy pojęcia, jaka jest możliwa tutaj kombinacja wąskich gardeł.
muru
1
Cóż, opublikowałem odpowiedź, ponieważ okazuje się, że odpowiednie testy porównawcze są już online . Oczywiście nie mogę powiedzieć na pewno, czy określony kod symulacji PO będzie działał wolniej na WSL, czy nie; ale w każdym razie odpowiedź na to pytanie i tak nie jest użyteczna dla nikogo oprócz PO. Na podstawie testów porównawczych mogę odpowiedzieć na pytanie, jakie typy kodu symulacyjnego mogą mieć uzasadnione różnice w wydajności między WSL a rodzimym Linuksem.
Ilmari Karonen
@muru, jest to symulacja CAE (Abaqus CAE).
ABCDEMMM

Odpowiedzi:

18

Oprogramowanie do symulacji najprawdopodobniej jest związane z procesorem lub pamięcią . W przypadku takich obciążeń nie można nie zauważyć żadnej znaczącej różnicy między uruchomieniem kodu na „bare metal” lub wewnątrz WSL (lub innej warstwie zgodności lub maszynie wirtualnej, która korzysta z wykonania natywnego), ponieważ w każdym przypadku system operacyjny jest po prostu podczas gdy kod symulacyjny działa bezpośrednio na CPU.

Jednak możliwe jest również, że twoja symulacja jest przynajmniej częściowo związana z I / O, i tam mogą pojawić się różnice. Najwyraźniej WSL (obecnie) ma dość powolną warstwę interfejsu systemu plików, która może znacznie spowolnić dyskowe operacje we / wy. * To powiedziawszy, chociaż dyskowe operacje we / wy mogą być głównym wąskim gardłem dla wielu rodzajów zadań przetwarzania danych masowych, „symulacja” zwykle nie powinien spędzać większości czasu na czytaniu i pisaniu plików. Jeśli tak, możesz rozważyć uruchomienie go z dysku RAM (np. Tmpfs w natywnym ** Linuksie), aby uniknąć niepotrzebnego dostępu do dysku fizycznego.

W każdym razie jedynym sposobem, aby się upewnić, jest przetestowanie symulacji w obu środowiskach i czasu, jaki zajmuje jej uruchomienie. Jednak zanim to zrobisz, możesz przyjrzeć się istniejącym testom porównawczym, takim jak WSL vs.Docker vs. VirtualBox vs. natywny test wydajności wydajności Linuksa autorstwa Phoronix od lutego 2018 r. I sprawdzić wyniki dla testów testujących te same komponenty systemu, podobnie jak twoja symulacja.

(FWIW, wyniki Phoronix wydają się w większości zgodne z ogólnymi zasadami, które przedstawiłem powyżej, chociaż istnieje kilka znaczących osobliwości, takich jak VirtualBox, najwyraźniej przewyższający natywnego Linuksa w kilku testach porównawczych we / wy, najwyraźniej z powodu jego wirtualnego dysku nie zawsze natychmiast synchronizującego dane na dysk fizyczny. Jednym z potencjalnie istotnych problemów, których nie zauważyłem powyżej, jest to, że testy porównawcze pokazują znaczące różnice w wielowątkowej wydajności OpenMP zarówno pomiędzy różnymi środowiskami hosta, jak i między różnymi dystrybucjami Linuksa, nawet gdy są uruchomione na gołym sprzęcie. Z perspektywy czasu nie jest to zbyt zaskakujące, ponieważ jądro obsługuje wątki i IPC. Sądzę, że duża różnica między dystrybucjami może sprowadzać się do różnych parametrów strojenia środowiska uruchomieniowego i / lub kompilacji czasu).


*) Zgodnie z tym postem na blogu MSDN z 2016 roku, w rzeczywistości istnieją WSL dwa komponenty interfejsu systemu plików w WSL: VolFs, który ściśle emuluje natywną semantykę systemu plików Linux nad NTFS i jest używany do montowania np. /I /homeoraz DrvFs, który zapewnia głównie semantykę podobną do Windows i jest używany do uzyskiwania dostępu do dysków systemu Windows za pośrednictwem /mnt/citp. Jeśli twoje oprogramowanie nie wymaga specyficznych funkcji systemu plików Linux, takich jak wiele twardych linków do tego samego pliku, skonfigurowanie go do przechowywania plików danych w folderze DrvFs może poprawić wydajność dostępu do plików na WSL.

**) Zgodnie z tym wątkiem Reddit z maja 2017 r. „Tmpfs jest obecnie emulowany przy użyciu dysku” na WSL. O ile coś się nie zmieniło w ciągu ostatniego roku, prawdopodobnie oznacza to, że używanie tmpfs na WSL nie daje żadnej korzyści w zakresie wydajności w porównaniu do używania normalnego systemu plików na dysku.

Ilmari Karonen
źródło
Być może nie tylko dostrajanie parametrów, ale także opcje kompilatora (np -O3 -march=haswell. Czy coś. Nie wiem, co Clear Linux faktycznie wykorzystuje do budowy swoich jąder, ale może BMI2 / popcnt/ cokolwiek, co może mieć mierzalną różnicę w glibc i jądrze. (Jądro wygrało nie skorzysta z AVX, ponieważ jądro unika dotykania rejestrów FPU, z wyjątkiem określonego kodu, takiego jak dane korekcji błędów w oprogramowaniu RAID5 / 6).
Peter Cordes
12

Ubuntu w systemie Windows (WSL - 2017 Fall Creators Update) jest zdecydowanie wolniejszy niż „Pure” Ubuntu w środowisku Linux.

Na przykład malowanie ekranu trwa wiele razy dłużej w systemie Windows 10 w porównaniu z Ubuntu 16.04, tzn. Można zobaczyć ruch kursora w systemie Windows 10:

WSL bash startup.gif

Malowanie ekranu powitalnego WSL Bash zajmuje około 5 sekund. Dla porównania, ten sam ekran powitalny w Ubuntu 16.04 wynosi około 1 1/2 sekundy:

Terminal Ubuntu splash.gif


Benchmarking procesora

Pierwsza sekcja pokazuje, jak powolny jest ekran I / O, ale co z testowaniem procesora?

Z tego pytania Zapytaj Ubuntu Pytania i odpowiedzi: narzędzie do testowania procesorów w systemie Linux , przeprowadziłem testy na Ubuntu 16.04 w systemie Linux i Windows. W systemie Linux około 24 sekund, w wersji Windows 10 1709 około 31 sekund. Linux jest o 6 sekund szybszy lub około 25% szybszy. Jednak właśnie uaktualniłem system Windows 10 do wersji 1803 (aktualizacja Redstone 4, czyli Spring Creators April 2018) i zajęło to 24 sekundy, czyli tyle samo, co Linux.

Ubuntu 16.04 w systemie 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 na 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 na Windows 10 kompilacja 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

UWAGA: wiosenna aktualizacja systemu Windows 10 na 2018 r. (Nazwana Redstone 4 ) pojawiła się 9 maja (4 dni temu) i wkrótce ją zainstaluję, aby sprawdzić ulepszenia. Bez wątpienia jest ich wiele. Wiem, że mnie to interesuje, to możliwość uruchamiania cronzadań podczas uruchamiania. Potrzebuję tego do codziennych automatycznych kopii zapasowych na gmail.com.

UWAGA 2: Właśnie zainstalowałem Windows 10 Build 1803 (wiosenna aktualizacja dla twórców AKA Redstone 4 z kwietnia 2018 r.), A malowanie ekranu jest znacznie szybsze. Teraz jest tylko 3 sekundy zamiast 5 sekund, aby wyświetlić ekran powitalny Bash. Benchmark procesora jest teraz na równi z Linuksem.

WinEunuuchs2Unix
źródło
8
Zauważ, że jest to mylące - nie rozróżnia to wydajności We / Wy od innych wydajności obliczeniowych. Wiadomo, że WSL działa wolno dla I / O (patrz np. Testy porównawcze Phoronix). Nie mówi to nic o tym, czy obliczenia OP można wykonać równie szybko w WSL.
muru
6
Jestem szczerze zaskoczony, że rysowanie ekranu powitalnego nie jest efektywne natychmiast w obu przypadkach. Twój komputer (prawdopodobnie) chętnie wykonuje znacznie bardziej złożone aktualizacje ekranu w ciągu kilku milisekund, np. Podczas odtwarzania wideo. I ostatni raz widziałem terminal tak wolny, jak w twoim pierwszym nagraniu, na początku lat 90., kiedy łączyłem się z BBS na moim modemie 2400 bps.
Ilmari Karonen
Co rozumiesz przez „Ubuntu in Linux”?
Jon Bentley
3
Szczerze mówiąc, ten rodzaj testu porównawczego jest całkowicie bezużyteczny dla każdego realistycznego programu, jak każdy test porównawczy, który zasadniczo mierzy prędkość malowania konsoli. Albo wąskim gardłem twojego programu jest We / Wy konsoli (które jest notorycznie wolne nawet w Linuksie z większością emulatorów terminali), lub nie jest to wiarygodna miara niczego przydatnego.
Matteo Italia
2
@ WinEunuuchs2Unix Z tego, co widzę, jest niewiele obliczeń. ale wiele I / O: pobieranie gdzieś pogody, czytanie daty i godziny, drukowanie w formacie, czytanie informacji o systemie itp. W każdym razie, czy kiedykolwiek używałeś Abaqus? Podobne oprogramowanie do symulacji lub Ansys lub Simulink nie są powiązane z ekranami We / Wy podczas uruchamiania rzeczywistej symulacji, chyba że wymusisz taką symulację. Jest całkowicie możliwe, aby pokazały one wyniki końcowe w zależności od wykonanej symulacji.
muru
7

Pomyśl o tym - w WSL na twoim komputerze działa pełny graficzny system Windows (przede wszystkim straszny świnia zasobów) plus podsystem Ubuntu. W natywnym Ubuntu działa tylko Ubuntu.

JimDeadlock
źródło
1
@JimDeadlock Naprawdę nie sądzę, że zabija pulpit, po prostu go nie wyświetla. Każda aplikacja GUI nadal działa w tle, prawda?
Eric Duminil
2
Interfejs GUI systemu Windows zużywa trochę pamięci, ale nie zajmuje dużo procesora, gdy nic nie robi. Nie rozumiem, dlaczego miałoby to mieć tak znaczący wpływ?
vidarlo
1
Przełączenie konsoli na inny VT nie zabija żadnych procesów; @EricDuminil jest poprawny. Może to wstrzymywać rzeczy, które wykorzystywały czas procesora do aktualizacji grafiki, ponieważ serwer X wie, że nie jest już wyświetlany (a zatem nie może tracić czasu na przetwarzanie OpenGL itp.). Ale jeśli uruchomisz pstreelub ps auxw, oczywiste jest, że wszystkie procesy są nadal aktywne. (Lub topnaciśnij M, aby posortować według zużycia pamięci).
Peter Cordes
2
@MichaelEricOberlin: Zmiana na inny VT nie wpływa na poziom działania! Po prostu konsole tekstowe są nadal dostępne na poziomie uruchamiania, który uruchamia GDM. (A tak przy okazji, poziomy uruchamiania są w zasadzie przeszłością; systemdnie działa jak SysV init. Wcześniejsza część tego komentarza udaje, że prowadziłeś 5 lub 10-letnią dystrybucję Linuksa z oldschoolową initinstalacją.) Ale tak , wylogowanie się z sesji X i zatrzymanie X11 / GDM zwolni zasoby, szczególnie jeśli nie masz przestrzeni wymiany lub na pulpicie występują bzdury, które budzą się często, nawet gdy są „bezczynne”.
Peter Cordes
1
@MichaelEricOberlin: Twój komentarz jest po prostu błędny. Czy możesz to rozważyć?
Eric Duminil
1

Nie wiem, czy wpłynie to w szczególności na twoją symulację, ale może:

WSL NIE używa pamięci RAM do pamięci współdzielonej! Używa dysku!

Oznacza to, że jeśli twoja symulacja korzysta z pamięci współdzielonej (pomyśl /dev/shm), może być wolna i / lub zużywać twoje urządzenie pamięci! A kara wydajności pochodzi z kilku warstw:

  • Sterownik systemu plików

  • Sterownik pamięci

  • Nośnik pamięci

Ale jeśli tak się nie stanie, wydajność powinna być podobna do tej na Ubuntu bez systemu operacyjnego (zakładając, że nie ma żadnych innych operacji wejścia / wyjścia, jak wspomnieli inni).

użytkownik541686
źródło
naprawdę dobrze to wiedzieć!
ABCDEMMM