Elektroda.pl
Elektroda.pl
X
Servizza
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Porównanie wydajności C# Raspberry Pi pod Linuxem i Windowsem 10

ghost666 25 Maj 2015 13:21 4158 9
  • Autorowi tłumaczonego artykułu udało się, jak dużej ilości osób, zainstalować Windowsa 10 na Raspberry Pi 2. Następnie stworzył on prostą aplikację w C# na tą platformę pod Windowsem. Zaciekawiło go jaka jest różnica wydajności, pomiędzy Windowsem 10 IoT a Raspbianem, uruchomionymi na tej samej platformie sprzętowej. W tym celu napisał on prostą aplikację w C#, która pozwolić ma na porównanie wydajności

    Kod

    Przeprowadzane będą w kilku wątkach proste obliczenia w pętli. Liczba wątków równa jest 4, ponieważ Raspberry Pi 2 ma 4 rdzenie CPU - pozwoli to w pełni obciążyć procesor.

    Pamiętać należy, że test został zrealizowany z delikatnie różnym kodem (na Windowsie nie da się uruchamiać aplikacji w C# w trybie konsolowym) i przy wykorzystaniu różnych kompilatorów.

    Raspbian

    Kompilator Mono JIT w wersji 4.0.1

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Kompilacja:
    Code:
    mcs /debug- /optimize+ /platform:arm bench.cs


    Windows 10

    Aplikacja napisana w Microsoft .net 4.5

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Natomiast interfejs użytkownika:

    Kod: html5
    Zaloguj się, aby zobaczyć kod


    Do skompilowania aplikacji wykorzystano Visual Studio 2015 w trybie Release.

    Jak łatwo zauważyć do obliczeń (metody DoStuf i Iterate) wykorzystano zmienne statyczne, co zapobiegnie ich opymalizacji przez kompilator.

    Wyniki

    Każdy program został uruchomiony na RPi 10 razy i obliczono średni czas jego realizacji. Dla porównania sprawdzono też jego działanie na komputerze osobistym (Intel Core i5-4590). Wyniki są dosyć zaskakujące (im krótszy czas tym lepiej).

    Porównanie wydajności C# Raspberry Pi pod Linuxem i Windowsem 10


    Jak łatwo zauważyć czas realizacji zadania jest pięć razy większy na Raspbianie niż na Windowsie. Czemu? czy coś jest nie tak z programem, albo może to wynik optymalizacji kodu przez kompilator? Aby to rozwiązać autor sprawdził kod IL. Metody Iterate i DoStuf kompilują się do takiego samego kodu:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Wywołania programów także są podobne w obu przypadkach. Autor przeprowadził także podobny test z wykorzystaniem tylko jednego wątku i rezultaty były takie same.

    Źródło:

    http://druss.co/2015/05/raspberry-pi-2-benchmark-linux-vs-windows/


    Fajne! Ranking DIY
  • Servizza
  • #2 26 Maj 2015 06:37
    vmario
    Poziom 14  

    Co to za stek bzdur? To się kwalifikuje do zgłoszenia do moderatora, zwłaszcza, że zaśmieca główną! Gość pisze program w C#, odpala to pod Mono i natywnym .NET i dziwi się, że jest różnica w wydajności mimo tego samego kodu w Intermediate Language? Czasem naprawdę warto się zastanowić zanim coś się wrzuci...

  • Servizza
  • #3 26 Maj 2015 09:13
    gulson
    Administrator Systemowy

    Dodałem do tematu C#, aby nie było wątpliwości, że chodzi konkretnie o ten język. Wiadomo, że Mono jest do kitu. Ale jak można inaczej uruchomić C# pod Linuxem? Autorowi pomysłu zapewne chodziło właśnie o C#. Więc jeśli chcemy używać C# na malince, warto jednak udać się niestety w stronę Windowsa.

  • #4 26 Maj 2015 09:16
    kasjo
    Poziom 25  

    Temat powinien raczej brzmieć "Porównanie wydajności C#..."

  • #5 26 Maj 2015 09:20
    vmario
    Poziom 14  

    gulson napisał:
    Autorowi pomysłu zapewne chodziło właśnie o C#. Więc jeśli chcemy używać C# na malince, warto jednak udać się niestety w stronę Windowsa.


    Autor pisze wyraźnie:

    Cytat:
    Now, I am curious what is the difference in performance between Windows 10 IoT Core and Raspbian.


    Pisze też:

    Cytat:
    I know that I am using different CLRs and different compilators, but I am doing this just for fun


    Nie wiem zatem, po co ten bezsensowny news, z poprawionym, co prawda, tytułem, ale wciąż z obrazkiem, który sugeruje, że chodzi o porównanie Linuksa i Windowsa.

    gulson napisał:
    Więc jeśli chcemy używać C# na malince, warto jednak udać się niestety w stronę Windowsa.


    Do tego nie trzeba benchmarków. Mono jest do kitu i wszyscy o tym wiedzą, tak samo jak o tym, że .NET wcale nie jest przenośny, wbrew temu, co zapowiadano.

  • #6 26 Maj 2015 23:20
    ostrytomasz
    Poziom 22  

    Wykres zupełnie jak na potrzeby sondaży przedwyborczych - niby przypadkiem ktoś chciał zaoszczędzić 10% w pionie.

  • #7 27 Maj 2015 13:44
    Dexter77
    Poziom 28  

    Jak dla mnie jeszcze bardziej ciekawie wygląda porównanie malinki z desktopowym procesorem o TDP kilkadziesiąt razy większym.... Różnica wydajności tylko 50%, różnica w poborze energii znacznie bardziej znacząca...

  • #8 27 Maj 2015 17:45
    n6210
    Poziom 15  

    No to autor testu pokazał, że nie umie robić testów :) przynajmniej jeżeli na prawdę interesowała go różnica wydajności systemów :)

  • #9 27 Maj 2015 19:35
    horik
    Poziom 13  

    Zgadzam się z przedmówcami - odkrycie na miarę Ameryki, że "mielenie liczb" lepiej jest przeprowadzić na systemie, którego .NET jest częścią, a nie do którego jest dodatkiem. Jeszcze rozumiem testy na Windows 2000 albo XP (ale to oczywiście nie pod RPi), gdzie ten .NET trzeba było doinstalować i mieliśmy kolejną, obok Javy, platformę uruchomieniową, osobną "przystawkę".

    To już lepiej było porównać wyniki pod Javą - i na Windows i na Linux wymagana jest osobna maszyna wirtualna i mamy tę dodatkową warstwę, zachowującą się podobnie w obu systemach. Ale .NET i Mono?

    W dodatku - co to miało na celu? Co będzie uruchamiane pod RPi? Jakaś aplikacja wstępnie przetwarzająca dane? Jakiś dedykowany system obliczeniowy, użytkowy? Nie róbmy z RPi konkurenta dla serwerów aplikacji. To jest mały, lekki komputerek pod robotykę, kontrolowanie procesów, rejestrowanie danych, usługi sieciowe, urządzenia informacyjne (kioski informacyjne, czytniki cen), czy wreszcie - terminal końcowy. A do tego nie potrzeba Mono. Ani Javy.

    A jeśli chce się ich użyć, to wtedy, gdy nie trzeba "mielić" megabajtów liczb w krytycznym czasie.

    Mono jako takie wcale nie jest złe. Jestem programistą "typowych bazodanowych systemów użytkowych" typu "wybierz, zatwierdź, poczekaj, odczytaj odpowiedź". Od kilku ładnych lat piszemy w firmie większe systemy tzw. "biznesowe" pod .NET i Mono w konfiguracji z Apachem i Debianem w oparciu o ASP.NET MVC, czyli serwer usług + warstwa widoku + przeglądarkowi klienci (na live-linuksowych terminalach uruchamianych z USB).

    I nawet przy największym projekcie (średnio 200 użytkowników pracujących równocześnie w trybie "spokojnym", ~30 w trybie "szybkim" na sekcji call center; niewielka, 70GB baza PostgreSQL na osobnej maszynie) wyrabialiśmy się poniżej wskaźników (czas od wysłania żądania z przeglądarki po wysłanie do niej odpowiedzi przez serwer i ogólnie rozumiana "płynność pracy") narzuconych przez klienta. A my nie dość, że poszliśmy w ORM, to jeszcze cyt. "jakieś te wasze nowoczesne RESTowe usługi, serwisy, warstwy, kontenery IoC, Bóg jeden wie co tam pchają teraz te 'nowoczesne' programisty". No i pomimo tego całego "nowoczesnego zła", w dodatku pod Mono pod Linuksem, nadal okazało się, że czas reakcji użytkownika jest dłuższy, niż serwis potrzebował na wygenerowanie odpowiedzi.

    I w takim układzie Mono pod Linuksem sprawdza się świetnie, oczywiście o ile ma się doświadczenie w pisaniu przenośnych aplikacji. Ale to dotyczy każdego języka, nawet C++.

    I teraz do czego miałbym chcieć użyć tego Mono pod RPi?
    - Jako punkt dostępowy do jakiegoś systemu? No to bym zrobił kanapkę RPi + LCD dotykowy, uruchomił pełnoekranową przeglądarkę - i łączył się po sieci z serwerem aplikacji. Nie potrzeba Mono.

    - A może jako jakiś serwer usług "biznesowych"? No ale to przecież nie na RPi, tylko normalny, pełnowymiarowy serwer!

    - A może samodzielne stanowisko do wstępnego przetwarzania danych? No to wtedy używam C++

    - A może jakaś niezależna np. stacja pogodowa z super GUI? A może system kontroli pieca CO, akwarium, procesu itp, itd? OK, ale wtedy prędkość działania Mono nie jest krytyczna.

    Podsumowując - wyniki testu oczywiste. Cel przeprowadzania testu - dla mnie cokolwiek niejasny.

  • #10 03 Cze 2015 13:43
    sstasinek
    Poziom 12  

    Jazgoczecie jakby wam słoń na paluszek nadepnął.

    vmario napisał:
    Co to za stek bzdur? Czasem naprawdę warto się zastanowić zanim coś się wrzuci...


    Dotyczy to również komentarzy.

    n6210 napisał:
    No to autor testu pokazał, że nie umie robić testów


    Z niecierpliwością czekam na Twój.

    Cytat:
    ...jeżeli na prawdę interesowała go różnica wydajności systemów


    Nie sądzę by interesowała go różnica wydajności systemów ale wydajność i programów napisanych w C# i uruchomionych w maszynie wirtualnej na obu systemach. W obu systemach mamy do czynienia z maszyną wirtualną przetestował proste obliczenia więc przetestował maszynę wirtualną. Nie testował funkcji które w Windows odwołując się w sposób bezpośredni do odpowiedników kernela a w Linuksie mogą się składać z szeregu odwołań (w szczególności WinForms).

    Gdyby CE nie został uśmiercony można by dodać do testu CE. Jedyna forma przenośności jaka się doczekała oficjalnej realizacji. Windows RT i Windows Phone 7 bazował przecież na CE, malina to przecież armv6 - korzeniami sięga epoki panowania Microsoftu w Mobile.

    horik napisał:
    Zgadzam się z przedmówcami - odkrycie na miarę Ameryki, że "mielenie liczb" lepiej jest przeprowadzić na systemie, którego .NET jest częścią, a nie do którego jest dodatkiem. Jeszcze rozumiem testy na Windows 2000 albo XP (ale to oczywiście nie pod RPi), gdzie ten .NET trzeba było doinstalować i mieliśmy kolejną, obok Javy, platformę uruchomieniową, osobną "przystawkę".


    Bzudra.
    Przykładowo kernel Win9x odszedł do lamusa w momencie premiery .NET 1.0, nie miał preinstalowenego .NET'a ale nie ma znaczenia czy .NET trzeba doinstalować czy jest preinstalowane. Jest ono tak samo! dodatkiem w każdym z systemów CE,9x,2000,XP,Vista,7 i Linksie natomiast w 8,10 nie można wprost nazwać dodatkiem mimo że jest dodatkiem! ponieważ wiele narzędzi obsługi(panel sterowania) systemu dostało swoje "wirtualne" odpowiedniki a system mocno nim przesiąknął ale tak czy owak jest wyłącznie maszyną wirtualną i sądzę że dałoby się ją usunąć bez uszczerbku na działaniu. Trudno byłoby usunąć IE bo explorer korzysta z jego bibliotek podobnie WMP ale .NET... ono jest wszyte w system na podobnej zasadzie jak Java mogłaby być. Czy jest ona preinstalowana czy trzeba ją doinstalować nie ma wielkiego znaczenia!

  Szukaj w 5mln produktów