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.

środa, grudnia 30, 2009

Avatar

Kiedyś efekty specjalne robiło się na maszynach SGI z systemem operacyjnym Irix na bardzo wydajnym systemie plików XFS z dziennikiem (XFS został sportowany na Linuksa i do tej pory w testach potrafi skopać tyłek ext4, nie mówiąc już o ext3). Ludzie z SGI stworzyli cplusplusowego STL-a. Na sprzęcie SGI powstał Park Jurajski. Filmy renderowało się też na Linuksie z Alphami EV6 (świetny procesor; ludzie którzy go konstruowali ratowali się ucieczką do AMD i stworzyli 64-bitowego Athlona). Wszystkie sympatyczne filmy Disneya wyprodukowane przez Pixar (np. Potwory i spółka) powstały na Mac-ach G5 (Apple ma świetne narzędzia do obliczeń rozproszonych MPI). Avatara zrobiono na GPU Nvidia Tesla. Już pierwsze ujęcia maszynerii w bazie ukazują wyrenderowany świat, który wygląda dużo realistyczniej niż jakikolwiek z 3DMarków. Pamiętacie 3DMark 03 Demo Nature, kiedy byliśmy w szoku, że tak pięknie można wyrenderować świat? Teraz mamy las w Avatarze.

Jakie jest przesłanie filmu? Ludzkość używa postępu technologicznego do niszczenia dobra i piękna. Żądza posiadania, żądza władzy. Wszystko, co stoi na drodze, zostanie zniszczone.

"Jeśli do umacniania rozwoju potrzebni są coraz to liczniejsi technicy, to o wiele bardziej potrzebni są ludzie mądrzy; zdolni do wnikliwej refleksji, poszukujący nowego humanizmu, dzięki któremu ludzie naszych czasów poprzez przyjęcie najszlachetniejszych wartości (...) mogliby odnaleźć samych siebie." "Aby [postęp] był prawdziwy, powinien on być zupełny, to znaczy winien przyczyniać się do rozwoju każdego człowieka i całego człowieka" (Populorum progressio)

Czy Avatar bedzie filmem przełomowym? Matrix był filmem przełomowym. Kojarzycie ujęcie - replay w Aniołkach Charliego, kiedy Drew Barrymore wypada z okna. To właśnie jest tzw. efekt Matriksa. 

Dla informatyków bez zmian: kultowym filmem numer jeden nadal pozostaje Matrix; Matrix był UNIX-em, a Trinity przy hackowaniu używała nmap-a. Matriksa ogłądało się także na BeOS-ie - był kodek 3vix do Media Playera i na Linuksie, gdzie na Debianie przez modem ściągało się GCC, żeby przekompilować mplayer-a z flagami dla K6-3...

Mogliby grzać w tej Feminie, trochę zmarzłem przez te 2 godziny.

niedziela, grudnia 27, 2009

D-Link G624

Spalił się switch ethernetowy Infineon ADM6996M za 10$ i po ruterze...


czwartek, grudnia 24, 2009

Lies, damn lies and benchmarks

Chcemy porównywać jakieś produkty występujące na różne systemy operacyjne. Ponieważ jesteśmy nowocześni używamy wirtualizacji. Jeden produkt wpakujemy do Ubuntu JeOS ze wsparciem dla parawirtualizacji (VMware: vmi.present ="True" na starszych Xenonach lub Opteronach) a drugi do zwykłego Windows-a.


Zaglądając do pliku paravirt.h widzimy funkcje związane z obsługą stronicowania, przerwań, mierzenia czasu. Jeśli zamiast emulacji w tych dziedzinach będziemy mieli bezpośrednie wywołania kodu hipervisor-a wirtualizowany system operacyjny powinien być sporo szybszy. Czyli jeśli testowany produkt zachowywałby się tak samo na Linuksie jak i Windowsie, to w wirtualnym środowisku będzie szybszy na Ubuntu JeOS (wygra benchmarki).

Inna bajka jest z wirtualizacją 2.0 (nested paging): tu wszystkie maszyny wirtualne mogą śmigać.

środa, grudnia 23, 2009

GlassFish na produkcji

Po zainstalowaniu GlassFish działa na ustawieniach odpowiednich do dewelopmentu. Przed wypuszczeniem go na produkcję, gdzie oczekuje się od niego pewnej wydajności, trzeba pozmieniać parę rzeczy.









piątek, grudnia 18, 2009

Non-standard BizTalk/Oracle example





It really works...

wtorek, grudnia 08, 2009

No (distributed) transactions in BizTalk

Database insert to different data sources. Atomic doesn't work in Visual Studio, so change transaction type to Long Running.

Now it doesn't work in real life.

BizTalk and WCF-SQL Send Ports

Add -> New generated item -> Consume WCF Service, orchestration looks reasonably.


We deploy it and run and... it doesn't work. Orchestration is dehydrated and in Event Viewer we see 'action not understood'.

Fix is to change Action in WCF Send Port configuration from XML fragment to text

- or -

change port operation name to Action name.

sobota, grudnia 05, 2009

OpenESB revisited

We're going to create simple transactional process inserting data into tables of two XA data sources. Let's create design time JDBC connections.


The type of Database Service Engine operation is table. Here we can see generated artifacts.


Now, we have to remember that this configuration has been generated using design time JDBC connection. To use it with runtime we need to change JNDI location of database.


Presented BPEL process on the left side has got PartnerLink connected with generated by us abstract WSDL (its name should match process name). On the right side there are Partner Links from mssql1 and mssql2 bindings. The process is transactional.




To see input and output port of BPEL JBI module we have to rebuild Composite App.


We can add different bindings to our BPEL orchestration (SOAP, JMS, WCF, Quart Scheduler ...).




After JDBC data source setup and app deployment, we can check that our composite app works fine.


Having modified db schema for table tab1 in second data source we can se that new data is not inserted to tab1 in first data source - our BPEL process is transactional.