sobota, stycznia 26, 2008

Dlaczego VirtualBox jest lepszy od VMWare'a

Po pierwsze dlatego, że jest zrobiony w Qt a nie GTK ;)
Trochę wyników z SiSoft Sandry, hostem jest laptop z Celeronem 420 na i945 + Hackett Linux 2008.0, natomiast gościem W2K3:


VMWare

Floating point: Dhrystone ALU 5101 MIPS
Floating point: Whetstone iSSE3 3769 MFLOPS

Multimedia: Integer x8 iSSE2 11724 it/s
Multimedia: Float x4 iSSE2 15637 it/s

Memory bandwidth: Int iSSE2 2501 MB/s
Memory bandwidth: Float iSSE2 2568 MB/s

Cache and memory: Combined index 4864 MB/s
Cache and memory: Speed factor 11.4

Memory latency: Random 203 ns
Memory latency: Speed factor 90.2

VirtualBox

Floating point: Dhrystone ALU 5089 MIPS
Floating point: Whetstone iSSE3 3725 MFLOPS

Multimedia: Integer x8 iSSE2 11599 it/s
Multimedia: Float x4 iSSE2 15717 it/s

Memory bandwidth: Int iSSE2 2438 MB/s
Memory bandwidth: Float iSSE2 2440 MB/s

Cache and memory: Combined index 4742 MB/s
Cache and memory: Speed factor 10.2

Memory latency: Random 216 ns
Memory latency: Speed factor 92.4

Tak na oko wyniki są zbliżone z delikatnym wskazaniem na VMWare'a.
Ale spójrzmy na obrazki z Memory Latency:





And the winner is... VirtualBox.
Jeśli obejrzycie dokładnie dwa obrazki, to widać, że VirtualBox na obszarze pamięci o szerokości 4MB operuje z opóźnieniami
w cyklach procesora na poziomie 75. Tymczasem VMWare oferuje takie opóźnienie
tylko dla 512KB. To by tłumaczyło dlaczego wszelkie operacje graficzne na VirtualBox-ie są szybsze - wszak operujemy na bitmapach w pamięci.
Rezultat: w VirtualBox-ie daje się używać programów graficznych takich jak Paint Shop Pro
i Photoshop. No i nawet płynnie działają teledyski z onetu :)

poniedziałek, stycznia 21, 2008

AMD robi clean-up sterowników ATI pod Linuksa

Dzisiaj próbowałem zainstalować ati-drivers-8.443.1 pod kernelem 2.6.24-rc8-rt1-itd i jak zwykle kompilacja się wyłożyła i zajrzałem do firegl_public.c - a tam pięknie: kod ładnie rozłożony, pokomentowany sensownie, funkcje blokujące napisane. Żeby się skompilowało trzeba tablicę locków w device_t zmienić z spinlock_t na raw_spinlock_t a lock = SPINLOCK_UNLOCKED zmienić na RAW_SPINLOCK_UNLOCKED(lock).

niedziela, stycznia 20, 2008

glibc_malloc vs alloca => 166197 / 1536 = ~100


localhost systest_modules # ./malloc
Ustawianie maski procesorow na 1

-- SYSTEM INFO -------------------

localhost: Linux 2.6.24-rc7 #6 SMP PREEMPT Mon Jan 14 16:50:37 CET 2008

Ustawianie priorytetu dla SCHED_OTHER na 0 (zwykly proces) dla 29488
*** TIMED: Instrukcja: 'tab[++i] = malloc_sbrk(100);'
*** TIMED: 0sec 9357nsec +- 1nsec
Addr: 804c000

*** TIMED: Instrukcja: 'tab[++i] = malloc_mmap(100);'
*** TIMED: 0sec 8449nsec +- 1nsec
Addr: b7f0e000

*** TIMED: Instrukcja: 'tab[++i] = malloc_stos(100);'
*** TIMED: 0sec 1536nsec +- 1nsec
Addr: bf806550

*** TIMED: Instrukcja: 'tab[++i] = malloc_libc(100);'
*** TIMED: 0sec 166197nsec +- 1nsec
Addr: 804c070

Ustawianie priorytetu dla SHED_FIFO na 99 (zakres 1-99) dla 29488
*** TIMED: Instrukcja: 'tab[++i] = malloc_sbrk(100);'
*** TIMED: 0sec 5446nsec +- 1nsec
Addr: 806d000

*** TIMED: Instrukcja: 'tab[++i] = malloc_mmap(100);'
*** TIMED: 0sec 6495nsec +- 1nsec
Addr: b7f0d000

*** TIMED: Instrukcja: 'tab[++i] = malloc_stos(100);'
*** TIMED: 0sec 1396nsec +- 1nsec
Addr: bf806550

*** TIMED: Instrukcja: 'tab[++i] = malloc_libc(100);'
*** TIMED: 0sec 1816nsec +- 1nsec
Addr: 804c070

A kod wyglądał tak:


#include "framework.h"
#include

inline void* malloc_sbrk(int size) {
/* Poszerzenie przestrzeni adresowej programu */
void *addr = sbrk(size);
if (addr == (void*)-1)
addr = NULL;
return addr;
}

inline void* malloc_mmap(int size) {
/* Alokacja pamieci za pomoca mmap */
void *addr = mmap(0, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
if (addr == (void*)-1)
addr = NULL;
return addr;
}

inline void* malloc_stos(int size) {
/* Alokacja pamieci na stosie */
return alloca(size);
}

inline void* malloc_libc(int size) {
return malloc(size);
}

void test_malloc(int rt) {
int i = 0;
void* tab[10];

RT_ON(rt);
#define CHECK_OK() do { \
printf("Addr: %x\n\n",(unsigned int)tab[i]); \
if (tab[i] == NULL) SHOW_ERR(); \
} while(0);


TIMED(
tab[++i] = malloc_sbrk(100);
);
CHECK_OK();

TIMED(
tab[++i] = malloc_mmap(100);
);
CHECK_OK();

TIMED(
tab[++i] = malloc_stos(100);
);
CHECK_OK();

TIMED(
tab[++i] = malloc_libc(100);
);
CHECK_OK();

free(tab[i]);
}

int main(int argc, char **argv) {
one_cpu();
uname_info();
test_malloc(0);
test_malloc(1);
return 0;
}

sobota, stycznia 19, 2008

Systest 20080119

Poprawiłem wreszcie systest, żeby dawał sensowne rezultaty na systemach z więcej niż jednym procesorem. Jest to zestaw programów wykorzystujących API POSIX 1.b mierzący np. czas przełączania sie dwóch procesów
używających tego samego semafora.

Z tej samej beczki: Intel wypuścił narzędzie do badania opóźnień w systemie - http://www.latencytop.org. Nazwa nawiązuje do powertopa mierzącego przez jak długi czas procesor znajduje się w danym stanie snu (C1, C2, C3...) i co go budzi. U mnie procesor przeważnie jest budzony przez ndiswrappera. LatencyTOP wymaga linuksa 2.6.24-rc7 (na razie są patche tylko na to jądro).

Z podobnej beczki: Jak ktoś ogląda commity od 2.6.24 rc, to widać, że ludzie używają inftrastruktury RT, którą do jądra wrzucił Ingo Molnar, a pozwala ona odnaleźć błędy, które siedziały w kernelu latami. Tak więc przy okazji robienia jądra realtime zyskują wszyscy.

czwartek, stycznia 17, 2008

Konrad mnie namawia...

http://www.novell.com/poland/konferencja/wirtualizacja/. Wszyscy mają Xena: Novell, RedHat, Oracle (Oracle VM), Sun (xVM). Jeszcze tylko Microsoftu brakuje.

Waldemar Pawlak naszym bohaterem jest

Oprócz tego, że ma gromadkę dzieci, z których co drugie ma inną mamę, płaci alimenty, działa w Ochotniczej Straży Pożarnej to jeszcze zna się na Linuksie. "5.Swoboda przepływu wiedzy i informacji" jest ważnym punktem i tutaj premiera popieramy w 100%.

środa, stycznia 16, 2008

Sun kupił MySQL AB (1 mld USD), a Oracle BEA (8.5 mld USD)

Nexenta Core Platform 1.0 RC2

No i mamy bardzo fajego GNU/OpenSolarisa. Z apt-getem i nano. ISO Core Platform ma trochę powyżej 400MB, po instalacji na ZFSie systemu jest trochę poniżej 800MB.

Ten build (Nevada 80 + patche 81-82) ma wbudowaną w jądro obsługę protokołu SMB. Widać to także w próbnikach dtrace -a (dtrace -l | grep smb).

Update: Żeby zainstalować JDK od Suna (.sh), trzeba zrobić tymczasowo mv /usr/bin/sum /usr/bin/sum.disabled i skopiować /usr/lib/libCrun.so.1 z Solarisa

wtorek, stycznia 15, 2008

Apple is comming to Poland

Sort of. Domeny apple.com.pl i apple.pl nie kierują już do stron SAD sp. z o.o., ale na będącą w budowie podstronę apple.com/pl. Różnica w cenie najtańszego MacBooka dostępnego w Polsce od SADu do ceny w Stanach wynosi prawie 52%. Bezczelność. Miejmy nadzieję, że Apple Inc. wykosi firmę mieszczącą się przy Mangalii 4 (chodzą plotki, że nie przedłuży im licencji na sprzedaż swoich produktów).

Apple zrobił swietnego laptopa 13.3'' ważącego mniej niż butelka cisowianki - 1.36kg.
Apple Macbook Air.

sobota, stycznia 12, 2008

Zrób to sam: Apache Directory Studio pod Solarisa

Nie ma wersji Apache Directory Studio pod Solarisa, ale można ją zrobić samemu. Ściągamy zwykłego Eclipse'a (pod x86 ciężko będzie go znaleźć, chyba najlepiej zainstalować Blastwave'a (pkgadd -d http://www.blastwave.org/pkg_get.pkg) a potem /opt/csw/bin/pkg-get -i eclipse)). Następnie ściągamy ADS 1.0.1 pod Linuksa, rozpakowujemy i kopiujemy {plugins,features}/org.apache.directory.studio* do solarisowego Eclipse'a.

Pod Eclipsem zmieniamy perspektywę na LDAP i mamy to samo co w Apache Directory Studio.

Problem wynika z tego, że Eclipse używa SWT wymagającego natywnej biblioteki w C.
Pod Windowsem SWT korzysta z WinAPI, pod Linuksem z GTK, pod OSX z Cocoa.
Prawda też jest taka, że Eclipse chodzi najszybciej pod Windowsem i OSX.

Autostart DSEE

Żeby serwer LDAP ładnie wstawał przy starcie systemu (zwłaszcza na słabszej maszynie) trzeba zrobić tak:
  • /usr/sbin/cacao enable
  • /usr/sbin/smcwebserver enable
  • /opt/SUNWdsee/ds6/bin/dsadm enable-service /var/opt/SUNWdsee/dscc6/dcc/ads (włączy DCC)
  • /opt/SUNWdsee/ds6/bin/dsadm enable-service /instancja-naszego-serwera
  • svccfg -s svc:/application/sun/ds, a następnie editprop i zmienić timeouty przy startowaniu i zamykaniu (start/timeout_seconds, stop/timeout_seconds)
I to cała magia.

Gnome + LDAP czyli ciąg dalszy zabawy z DSEE

Po NFSie wystawiany katalogi domowe (/etc/dfs/dfstab + shareall) na serwerze. W DSEE dodajemy auto_master (/home auto_home -nobrowse)
i auto_home (* svr:/export/home/&) - obydwie pozycje z klasy automap. Możemy jeszcze dodać cn=mailhost,ou=hosts,dc=... z klasy ipHost. Na kliencie należy pamiętać o włączeniu svcadm-em serwisów svc:/network/nfs/client:* i autofs.

czwartek, stycznia 10, 2008

Skrócony tutorial jak zrobić SSH z autoryzacją LDAP

Potrzebujemy: 1 x Solaris 10, 1 x Sun Directory Server Enterprise Edition 6.x
(z pakietu Sun Communication Suite), 1 x Apache Directory Studio
(świetny produkt oparty na Eclipsie).

Po skonfigurowaniu serwera DNS (tutaj na hoscie 192.168.8.15) instalujemy CommSuite'a.
Konfiguracja autoryzacji po LDAPie jest zrobiona w zonie 192.168.8.150.