czwartek, grudnia 31, 2009

Benchmarki z wirtualizacją

Platforma integracyjna wystawia WebService opakowujący select i procedurę noop na bazie Oracle. System fizyczny to 64-bitowy Windows 2008 R2 na dwurdzeniowym procesorze AMD 2,3GHz + Oracle 11g, 4GB RAM-u, windowsowy RAID0 na dwóch Seagate-ach. System wirtualny ma jeden wirtualny procesor i 2GB RAM-u. Platforma A to Sun GlassFish ESB 2.1, platforma B to MS BizTalk 2009. Pomiar za pomocą SOAP-UI dla jednego wątku w ciągu 60 sekund, czas w milisekundach.


VMware dla 32-bitowych gości używa binarnej translacji (BT). Średni czas systemu out-of-box to 2344 ms. Po zmianie parametru MaxReceiveInterval z 500 na 50 mamy 1066 ms (tuning Low Latency wg dokumentacji producenta). Przeniesienie redo logu bazy danych obsługującej platformę na inny dysk daje przyśpieszenie 17ms.




32-bitowy Windows (binarna translacja) ma podobną wydajność co 64-bitowy OpenSolaris (sprzętowa wirtualizacja) - około 10% narzutu na wirtualizację. VirtualBox wypada słabo - strata wynosi ponad 20%. JRockit jak zwykle wymiata, podmieniając Javę na wirtualizowanym Windowsie dostajemy -6%.

A teraz sprawdzimy 32-bitowe OpenSUSE 11.2 z kernelem 2.6.31 z obsługą VMI, system jest na XFS-ie z opcją noatime i z JRockit-em 6.0.


Wirtualka jest szybsza od rzeczywistej dwurdzeniowej konfiguracji! 350ms. W trybie BT 415ms.

Swoją drogą ten sam select w zwykłym kodzie Javy trwa odpowiednio 3 / 15/ 80 ms (w zależności czy PreparedStatement i Connection są reużywalne). Gdybym chciał mieć coś szybkiego i za darmo i z orkiestracją to wziąłbym Grailsy i zrobił w nich Service-y. Serwisy wewnętrznie można wołać natywnie, a zewnętrznie wystawić po SOAP-ie i JMS-ie.

0 komentarze: