Blog (4)
Komentarze (450)
Recenzje (0)

Porównanie wydajności Windows Server 2012 i Linux Debian testing

@rm7Porównanie wydajności Windows Server 2012 i Linux Debian testing29.12.2012 18:27

Jak obiecałem proste porównanie wydajności najpopularniejszych technologii webowych (php i mysql) w realizacji Windows i Linux. Wszystko na możliwie domyślnych ustawieniach, opis instalacji jest w poprzednich wpisach mojego blogu.

PHP

Użyłem tego skryptu.

Windows

--------------------------------------
|        PHP BENCHMARK SCRIPT        |
--------------------------------------
Start : 2012-12-29 16:24:43
Server : 10.1.1.9@
PHP version : 5.4.9
Platform : WINNT
--------------------------------------
test_math                 : 2.487 sec.
test_stringmanipulation   : 4.039 sec.
test_loops                : 1.363 sec.
test_ifelse               : 0.926 sec.
--------------------------------------
Total time:               : 8.815 sec.

--------------------------------------
|        PHP BENCHMARK SCRIPT        |
--------------------------------------
Start : 2012-12-29 16:24:59
Server : 10.1.1.9@
PHP version : 5.4.9
Platform : WINNT
--------------------------------------
test_math                 : 2.607 sec.
test_stringmanipulation   : 4.039 sec.
test_loops                : 1.424 sec.
test_ifelse               : 0.953 sec.
--------------------------------------
Total time:               : 9.023 sec.

--------------------------------------
|        PHP BENCHMARK SCRIPT        |
--------------------------------------
Start : 2012-12-29 16:25:18
Server : 10.1.1.9@
PHP version : 5.4.9
Platform : WINNT
--------------------------------------
test_math                 : 2.581 sec.
test_stringmanipulation   : 3.936 sec.
test_loops                : 1.532 sec.
test_ifelse               : 0.957 sec.
--------------------------------------
Total time:               : 9.006 sec.

Linux

--------------------------------------
|        PHP BENCHMARK SCRIPT        |
--------------------------------------
Start : 2012-12-29 16:47:00
Server : 10.1.1.9@10.1.1.9
PHP version : 5.4.4-10
Platform : Linux
--------------------------------------
test_math                 : 1.537 sec.
test_stringmanipulation   : 1.526 sec.
test_loops                : 1.212 sec.
test_ifelse               : 0.867 sec.
--------------------------------------
Total time:               : 5.142 sec.

--------------------------------------
|        PHP BENCHMARK SCRIPT        |
--------------------------------------
Start : 2012-12-29 16:47:13
Server : 10.1.1.9@10.1.1.9
PHP version : 5.4.4-10
Platform : Linux
--------------------------------------
test_math                 : 1.532 sec.
test_stringmanipulation   : 1.541 sec.
test_loops                : 1.212 sec.
test_ifelse               : 0.867 sec.
--------------------------------------
Total time:               : 5.152 sec.

--------------------------------------
|        PHP BENCHMARK SCRIPT        |
--------------------------------------
Start : 2012-12-29 16:47:21
Server : 10.1.1.9@10.1.1.9
PHP version : 5.4.4-10
Platform : Linux
--------------------------------------
test_math                 : 1.571 sec.
test_stringmanipulation   : 1.568 sec.
test_loops                : 1.218 sec.
test_ifelse               : 0.867 sec.
--------------------------------------
Total time:               : 5.224 sec.

Widać znaczącą, prawie dwukrotną różnicę. Ciekawe, że jest ona głównie spowodowana operacjami na ciągach tekstowych.

MySQL

Żeby mieć dostęp do MySQL z osobnego komputera który wykonywał test, chwilowo wyłączyłem zaporę Windows, w Linuksie zmienił adres bindowania na używany przez serwer adres IP:

jak również zezwoliłem na dostęp do MySQL z tego komputera:

mysql> GRANT ALL ON *.* to root@'10.0.0.11' IDENTIFIED BY 'your-mysql-root-password'; 

mysql> FLUSH PRIVILEGES;

Test wykonano przy użyciu sysbench w następujący sposób:

sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --mysql-password=5t6y7u* prepare --mysql-host=10.1.1.9

sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --mysql-password=5t6y7u* --max-time=60 --oltp-read-only=on --max-requests=0 --num-threads=8 --mysql-host=10.1.1.9 run 

sysbench --test=oltp --mysql-db=test --mysql-user=root --mysql-password=5t6y7u* --mysql-host=10.1.1.9 cleanup 

Windows

$ sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --mysql-password=5t6y7u* --max-time=60 --oltp-read-only=on --max-requests=0 --num-threads=8 --mysql-host=10.1.1.9 run 
sysbench 0.4.12:  multi-threaded system evaluation benchmark

No DB drivers specified, using mysql
Running the test with following options:
Number of threads: 8

Doing OLTP test.
Running mixed OLTP test
Doing read-only test
Using Special distribution (12 iterations,  1 pct of values are returned in 75 pct cases)
Using "BEGIN" for starting transactions
Using auto_inc on the id column
Threads started!
Time limit exceeded, exiting...
(last message repeated 7 times)
Done.

OLTP test statistics:
    queries performed:
        read:                            86324
        write:                           0
        other:                           12332
        total:                           98656
    transactions:                        6166   (102.69 per sec.)
    deadlocks:                           0      (0.00 per sec.)
    read/write requests:                 86324  (1437.67 per sec.)
    other operations:                    12332  (205.38 per sec.)

Test execution summary:
    total time:                          60.0445s
    total number of events:              6166
    total time taken by event execution: 480.1353
    per-request statistics:
         min:                                 30.02ms
         avg:                                 77.87ms
         max:                                638.93ms
         approx.  95 percentile:             176.30ms

Threads fairness:
    events (avg/stddev):           770.7500/8.36
    execution time (avg/stddev):   60.0169/0.01

$ sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --mysql-password=5t6y7u* --max-time=60 --oltp-read-only=on --max-requests=0 --num-threads=8 --mysql-host=10.1.1.9 run 
sysbench 0.4.12:  multi-threaded system evaluation benchmark

No DB drivers specified, using mysql
Running the test with following options:
Number of threads: 8

Doing OLTP test.
Running mixed OLTP test
Doing read-only test
Using Special distribution (12 iterations,  1 pct of values are returned in 75 pct cases)
Using "BEGIN" for starting transactions
Using auto_inc on the id column
Threads started!
Time limit exceeded, exiting...
(last message repeated 7 times)
Done.

OLTP test statistics:
    queries performed:
        read:                            92540
        write:                           0
        other:                           13220
        total:                           105760
    transactions:                        6610   (110.09 per sec.)
    deadlocks:                           0      (0.00 per sec.)
    read/write requests:                 92540  (1541.29 per sec.)
    other operations:                    13220  (220.18 per sec.)

Test execution summary:
    total time:                          60.0405s
    total number of events:              6610
    total time taken by event execution: 480.0557
    per-request statistics:
         min:                                 31.50ms
         avg:                                 72.63ms
         max:                                575.66ms
         approx.  95 percentile:             150.75ms

Threads fairness:
    events (avg/stddev):           826.2500/7.07
    execution time (avg/stddev):   60.0070/0.01

Linux

$ sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --mysql-password=5t6y7u* --max-time=60 --oltp-read-only=on --max-requests=0 --num-threads=8 --mysql-host=10.1.1.9 run 
sysbench 0.4.12:  multi-threaded system evaluation benchmark

No DB drivers specified, using mysql
Running the test with following options:
Number of threads: 8

Doing OLTP test.
Running mixed OLTP test
Doing read-only test
Using Special distribution (12 iterations,  1 pct of values are returned in 75 pct cases)
Using "BEGIN" for starting transactions
Using auto_inc on the id column
Threads started!
Time limit exceeded, exiting...
(last message repeated 7 times)
Done.

OLTP test statistics:
    queries performed:
        read:                            105588
        write:                           0
        other:                           15084
        total:                           120672
    transactions:                        7542   (125.61 per sec.)
    deadlocks:                           0      (0.00 per sec.)
    read/write requests:                 105588 (1758.53 per sec.)
    other operations:                    15084  (251.22 per sec.)

Test execution summary:
    total time:                          60.0432s
    total number of events:              7542
    total time taken by event execution: 480.1444
    per-request statistics:
         min:                                 27.44ms
         avg:                                 63.66ms
         max:                               1148.64ms
         approx.  95 percentile:             104.79ms

Threads fairness:
    events (avg/stddev):           942.7500/9.23
    execution time (avg/stddev):   60.0180/0.01

$ sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --mysql-password=5t6y7u* --max-time=60 --oltp-read-only=on --max-requests=0 --num-threads=8 --mysql-host=10.1.1.9 run 
sysbench 0.4.12:  multi-threaded system evaluation benchmark

No DB drivers specified, using mysql
Running the test with following options:
Number of threads: 8

Doing OLTP test.
Running mixed OLTP test
Doing read-only test
Using Special distribution (12 iterations,  1 pct of values are returned in 75 pct cases)
Using "BEGIN" for starting transactions
Using auto_inc on the id column
Threads started!
Time limit exceeded, exiting...
(last message repeated 7 times)
Done.

OLTP test statistics:
    queries performed:
        read:                            27202
        write:                           0
        other:                           3886
        total:                           31088
    transactions:                        1943   (32.35 per sec.)
    deadlocks:                           0      (0.00 per sec.)
    read/write requests:                 27202  (452.87 per sec.)
    other operations:                    3886   (64.70 per sec.)

Test execution summary:
    total time:                          60.0660s
    total number of events:              1943
    total time taken by event execution: 480.2274
    per-request statistics:
         min:                                 50.11ms
         avg:                                247.16ms
         max:                                931.82ms
         approx.  95 percentile:             531.09ms

Threads fairness:
    events (avg/stddev):           242.8750/1.05
    execution time (avg/stddev):   60.0284/0.01

Tu również mamy drobną różnicę na korzyść Linuksa, choć mniejszą niż w przypadku PHP. Ciekawe, że choć przeciętne czasy Linuks ma lepsze, w obu testach maksymalnego czasu wygrywa Windows.

Wnioski

Wszystkie testy zostały wykonane na tym samym komputerze i według mnie dowodzą pewnej przewagi Linuksa. Oczywiście, możliwe jest poprawianie konfiguracji tak PHP jak i MySQL w celu osiągnięcia lepszych wyników, ale nie robiłem tego, jako że znam Linuksa zdecydowanie lepiej i mogła by wyjść pewna "stronniczość". Czy zatem Linuksa należy używać na każdym serwerze? Niekoniecznie. Różnice choć duże nie powinny być znaczące w skali pojedynczych serwerów, zaś cześć administratorów bardziej znających Windowsa może lepiej wykorzystać swój czas niż na poznawanie innego systemu. Ponadto, na Windows Server możemy uruchomić różne środowiska, jak PHP, Python, ASP.NET (jak dobreprogramy.pl :), czego nie możemy powiedzieć o Linuksie, na którego chyba nie istnieją dobre serwery technologii Microsoftu.

Wybrane dla Ciebie
Node JS Training in Chennai
18 lip 2023sureshbalaji16510
Szanowna Użytkowniczko! Szanowny Użytkowniku!
×
Aby dalej móc dostarczać coraz lepsze materiały redakcyjne i udostępniać coraz lepsze usługi, potrzebujemy zgody na dopasowanie treści marketingowych do Twojego zachowania. Twoje dane są u nas bezpieczne, a zgodę możesz wycofać w każdej chwili na podstronie polityka prywatności.

Kliknij "PRZECHODZĘ DO SERWISU" lub na symbol "X" w górnym rogu tej planszy, jeżeli zgadzasz się na przetwarzanie przez Wirtualną Polskę i naszych Zaufanych Partnerów Twoich danych osobowych, zbieranych w ramach korzystania przez Ciebie z usług, portali i serwisów internetowych Wirtualnej Polski (w tym danych zapisywanych w plikach cookies) w celach marketingowych realizowanych na zlecenie naszych Zaufanych Partnerów. Jeśli nie zgadzasz się na przetwarzanie Twoich danych osobowych skorzystaj z ustawień w polityce prywatności. Zgoda jest dobrowolna i możesz ją w dowolnym momencie wycofać zmieniając ustawienia w polityce prywatności (w której znajdziesz odpowiedzi na wszystkie pytania związane z przetwarzaniem Twoich danych osobowych).

Od 25 maja 2018 roku obowiązuje Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 (określane jako "RODO"). W związku z tym chcielibyśmy poinformować o przetwarzaniu Twoich danych oraz zasadach, na jakich odbywa się to po dniu 25 maja 2018 roku.

Kto będzie administratorem Twoich danych?

Administratorami Twoich danych będzie Wirtualna Polska Media Spółka Akcyjna z siedzibą w Warszawie, oraz pozostałe spółki z grupy Wirtualna Polska, jak również nasi Zaufani Partnerzy, z którymi stale współpracujemy. Szczegółowe informacje dotyczące administratorów znajdują się w polityce prywatności.

O jakich danych mówimy?

Chodzi o dane osobowe, które są zbierane w ramach korzystania przez Ciebie z naszych usług, portali i serwisów internetowych udostępnianych przez Wirtualną Polskę, w tym zapisywanych w plikach cookies, które są instalowane na naszych stronach przez Wirtualną Polskę oraz naszych Zaufanych Partnerów.

Dlaczego chcemy przetwarzać Twoje dane?

Przetwarzamy je dostarczać coraz lepsze materiały redakcyjne, dopasować ich tematykę do Twoich zainteresowań, tworzyć portale i serwisy internetowe, z których będziesz korzystać z przyjemnością, zapewniać większe bezpieczeństwo usług, udoskonalać nasze usługi i maksymalnie dopasować je do Twoich zainteresowań, pokazywać reklamy dopasowane do Twoich potrzeb. Szczegółowe informacje dotyczące celów przetwarzania Twoich danych znajdują się w polityce prywatności.

Komu możemy przekazać dane?

Twoje dane możemy przekazywać podmiotom przetwarzającym je na nasze zlecenie oraz podmiotom uprawnionym do uzyskania danych na podstawie obowiązującego prawa – oczywiście tylko, gdy wystąpią z żądaniem w oparciu o stosowną podstawę prawną.

Jakie masz prawa w stosunku do Twoich danych?

Masz prawo żądania dostępu, sprostowania, usunięcia lub ograniczenia przetwarzania danych. Możesz wycofać zgodę na przetwarzanie, zgłosić sprzeciw oraz skorzystać z innych praw wymienionych szczegółowo w polityce prywatności.

Jakie są podstawy prawne przetwarzania Twoich danych?

Podstawą prawną przetwarzania Twoich danych w celu świadczenia usług jest niezbędność do wykonania umów o ich świadczenie (tymi umowami są zazwyczaj regulaminy). Podstawą prawną przetwarzania danych w celu pomiarów statystycznych i marketingu własnego administratorów jest tzw. uzasadniony interes administratora. Przetwarzanie Twoich danych w celach marketingowych realizowanych przez Wirtualną Polskę na zlecenie Zaufanych Partnerów i bezpośrednio przez Zaufanych Partnerów będzie odbywać się na podstawie Twojej dobrowolnej zgody.