piątek, grudnia 19, 2008

Benchmarki VM c.d

Tym razem hostem jest laptop z procesorem AMD Athlon X2 QL-60, 2GB pamięci RAM, grafiką GeForce 9100M G a testowym systemem jest 64-bitowy Windows Server 2008 EE. Dla działającego realnie Windowsa zostały zmierzone wyniki PCMark05 w trybie oszczędzania energii (obniżenie do połowy taktowania CPU, spowolnienie grafiki itd.) i w trybie wydajności -obydwa testy wykonywane na jednym rdzeniu CPU (żeby można było porównywać wyniki maszyn wirtualnych, które raczej mają jeden VCPU) i tryb wydajności na obu rdzeniach.
V100 to VMWare Server 2.0 + 1 VCPU + W2K8 768MB RAM, V200 to ta sama konfiguracja ale na dwóch wirtualnych procesorach. VB to VirtualBox 2.1.
VM2 i VB2 to VMWare i VirtualBox z W2K8 na 1 CPU i zmniejszoną pamięcią do 512MB. Oprogramowanie do wirtualizacji było w 64-bitowych wersjach, zainstalowane na OpenSUSE 11.1 64-bit, jedna partycja / na XFS-ie.









Jakie z tego wnioski?
  • Cache'owanie systemu plików w Linuksie i Windowsie 2008 (wow) jest ładnie zrobione i jak jedno zgra się z drugim to mamy system wirtualny szybszy od rzeczywistego
  • VirtualBox gdyby miał dobre narzędzia do zarządzania mógłby być produktem serwerowym
  • Nie ma sensu wybierać Xen-a, bo wirtualizacja z patchowaniem strumienia instrukcji jest szybsza
  • Zamiast VMotion można zrobić wirtualizację usług, jeśli mamy do czynienia z WebService'ami to wystarczy Apache 2.2.10 i mod_proxy_balancer
  • Powinienem na Oracle'u 11 wystawić jako WebService'y jakieś operacje w schemacie hr i wtedy można by mieć jakieś sensowne życiowe testy



Jeśli wyeliminujemy wyniki grafiki 2D to można przyjąć, że mamy 20% spadku wydajności. Ale... 20% per CPU. Jeśli na kilkurdzeniowym serwerze mamy uruchomioną maszynę z jednym wirtualnym procesorem to... patrz przypadek 'AVG Performance 2CPU'. Powiedzmy, że ten spadek wydajności rekompensujemy sobie stawiając równolegle pare maszyn, usługa w nich uruchomiona moze być balansowana - czy teraz też będziemy mieć 20% per CPU? Pewnie więcej...

czwartek, grudnia 18, 2008

Prawie się zakochałem...



  • Ideał dziewczyny ma tytuł magistra inżyniera z informatyki na EiTI PW

  • Napisała, i to pod Windowsem, i to bardzo ładnym kodem (wszystkie formatowanie perfect, czyta się jak książkę Clancy'ego), kawałek softu sprawdzający, czy działamy węwnątrz sprzętowo akcelerowanej maszyny wirtualnej. Robi się to tak, przy wyłączonych przerwaniach: (1) czyszczenie TLB (czyli przeładowanie rejestru CR3), (2) sprawdzenie za pomocą źródła czasu TSC i operacji dostępu do pamięci, ile cykli robi procesor przy istniejącym mapowaniu adresu wirtualnego na fizyczny, (3) sprawdzenie tego samego ze wsadzeniem po środku instrukcji vmexit. Jeśli jesteśmy wewnątrz maszyny wirtualnej instrukcja wyjścia z niej spowoduje wywołanie handlera po stronie nadzorcy maszyny wirtualnej i zanim wrócimy minie sporo cykli procka. Czyli czas(3) - czas(2) będzie większy od zera.

  • Napisała rootkita, który obchodzi w/w detektor...

Gdyby jeszcze nie paliła... (nie wiem czy pali). Fajnie się ubierała na niektórych konferencjach - na czarno-biało, tak w stylu profesjonalnej hackerki.

Wracając do badań Pani Rutkowskiej, można napisać takiego rootkita, który wsadzi działający system operacyjny do maszyny wirtualnej (w locie, odpalamy rootkita i ziuum, a nawet szybciej) i z wnętrza maszyny wirtualnej nie będzie można tego wykryć. Matrix. System działa w wirtualnym świecie i nic o tym nie wie. I nie przyjdzie do niego żadna Trinity od firmy Symantec i nie powie, że to co widzi to ułuda.

Swoją drogą, czy ścigający się AMD i Intel, tworząc sprzętową wirtualizację pomyśleli o bezpieczeństwie, czy nie mieli czasu? Nie twierdzę, że HVM jest złe, bo sam na 32-bitowym Gentoo miałem 64-bitowego Solarisa, ale przy takim komercyjnym wyścigu dużych graczy o kasę*, może ktoś zapomniał zastanowić się nad bezpieczeństwem.

*technologię wirtualizacji ma EMC/VMware, Citrix, Oracle, Novell, RedHat, Sun i Microsoft (z tym, że to coś Microsoftu w wersji beta umie tylko "coś tam, coś tam" i po instalacji na moim laptopie z Athlonem X2 QL-60 blokuje sprzętową wirtualizację totalnie tak, że narzędzie od AMD mówi, że jej nie ma).

wtorek, grudnia 09, 2008

hpscan.tgz

Dzisiaj musiałem zeskanować siebie z dowodu. Mam w domu skaner HP 3530c, który jest obsługiwany przez kookę (której nie ma na Fedorze 10, ale jest na OpenSUSE 11.1) - niestety zeskanowane obrazki mają dziwnie podbitą korekcję gamma (są za jasne). Wygooglałem hpscan.tgz, rozpakowałem, pod GCC 4.3 się nie chciało skompilować, ale całe szczęscie w pakiecie była binarka. Binarka wymaga dostępu do pliku urządzenia - najprościej odpalić ją jako root. Udało się: 'Please wait, warming up...', brrrrm, brrrm, iyyyyy, 'head is returning' i mam obrazek w formacie PPM. Z tym hpscan.tgz to było tak, że dawno temu kiedy byłem piękny i młody miałem sobie kupić na imieniny skaner HP. Ale kupiłem takiej jednej Ance pierścionek i odłożyłem zakup skanera na następne imieniny. Niestety w następnym roku pojawiła się nowa seria skanerów HP niekompatybilna z Linuksem, a starych już nie było. Kupując HP 3530c byłem święcie przekonany, że skaner będzie działał mi z Linuksem (w 2001 roku chyba używałem już Gentoo). A okazało się, że no way i w wakacje męczyłem się nad programem w C, którym mógłbym coś wydobyć ze skanera. Sterowanie ruchem głowicy trochę jest do kitu (odgłosy są straszne), ale generalnie program działa. Dzisiaj Anka jest prawdpodobnie gruba i brzydka (a na pewno nosi okulary), a skaner HP 3530c nadal wygląda (po starciu kurzu) jak nowy.

środa, grudnia 03, 2008

Prosty skrypt do przyrostowego monitorowania logów

#!/bin/sh
function check_log() {
logfile="$1"
pattern="$2"
if [[ -z $pattern ]] ; then
echo "Wzorzec do wyszukiwania nie moze byc pusty"
return 1
fi
if [[ -f $logfile ]] ; then
size=`LC_ALL=C stat ${logfile} | grep Size | cut -d" " -f4 2>/dev/null`
old_size=`cat $logfile.size 2>/dev/null`
diff=`expr $size - $old_size 2>/dev/null`
if [[ -z $diff ]] ; then
diff=$size
fi
if [[ $diff -lt 0 ]] ; then
diff=$size
fi
if [[ $diff -gt 0 ]] ; then
echo "Plik zmodyfikowany, roznica $diff bajtow"
tail -c $diff $logfile | grep -A 20 -B 5 -e "${pattern}" 2>/dev/null 1> $logfile.err
cat $logfile.err
else
echo "Plik bez zmian, rozmiar $size"
fi

echo "$size" > $logfile.size
else
echo "Nie ma takiego pliku $logfile"
fi
}

logfile="/home/weblogic/bea/domains/WebPortal/servers/WebPortalServer1/logs/WebPortalServer1.out"
pattern="Exception"
check_log $logfile $pattern

wtorek, grudnia 02, 2008

Intel Core i7 i TLB

Translacja adresów wirtualnych na fizyczne jest w x86 tak zrobiona, że mamy drzewiastą strukturę tablic stron (jedna tabelka na najwyższym poziomie z elementami wskazującymi na tabelkę na drugim poziomie, a elementy w tabelce drugiego poziomu wskazują na tabelkę trzeciego poziomu, ..., w tablicy czwartego poziomu mamy odowołania do fizycznych ramek pamięci).
Pierwsza cześć adresu wirtualnego (ileś tam bitów) stanowi indeks dla pierwszej tabelki, druga część dla drugiej tabelki itd. Trick jest taki, że element w tabelce pierwszego poziomu może wskazywać na swoją tabelkę, i taka referencja do własnej tabelki może zajść 3 razy pod rząd.
Procesor bierze adres wirtualny, przechodzi po drzewku i na końcu uzyskuje adres fizyczny.
Takie chodzenie jest kosztowne dlatego pary [adres wirtualny, adres fizyczny] są cache'owane w buforze TLB. W Core i7 TLB ma cache dwupoziomowy: level 1 - 64 pozycje, level 2 - 512 pozycji, takiego dużego TLB procesory jeszcze nie miały - powinno to dać dużego kopa (i daje, co widać w benchmarkach).
Manual Intela mówi, że jeżeli ta sama fizyczna ramka pamięci jest używana w N mapowaniach, to wyczyszczenie cache'u TLB dla tej ramki powinno być wykonane N razy, czyli N razy musi być wykonana instrukcja INVLPG. Jeśli za mało razy zawołamy INVLPG, to procesor pamięta złe mapowanie i coś złego się stanie, bo użyje złego adresu pamięci fizycznej, w najlepszym przypadku BSOD. Manual mówi też, że jeśli są robione tricki z wskazywaniem elementu tablicy na swoją własną tablicę M razy, to INVLPG musi być zawołane M-1 razy. A wszyscy myśleli, że INVLPG działa raz a dobrze...

Balancer, failover i wdrożenia zero-downtime

#################################
# INSTANCJA 443
#################################
<VirtualHost _default_:443>
ServerRoot "/etc/httpd"
ProxyPass /svc balancer://svcCluster443 stickysession=JSESSIONID

<Proxy balancer://svcCluster443>
BalancerMember http://10.70.10.2:8080/svc route=instance0 loadfactor=99
BalancerMember http://10.70.10.3:8080/svc route=instance1 loadfactor=1
BalancerMember http://localhost/maintenance route=maintenance loadfactor=1 status=+H
</Proxy>

<Location /balancer-manager>
Order Deny,Allow
Deny from all
Allow from 192.168.2.33
SetHandler balancer-manager
</Location>

</VirtualHost>


Apache 2.2.10 ma bardzo fajnego wbudowanego balancera. Załóżmy, że serwowana przez nas usługa ma być uaktualniona. Zestawiamy całe środowisko na instance1 i za pomocą balance managera zmieniamy wagi instance0 i instance1 - bieżące operacje zostaną dokończone na aktywnej instancji 0, a nowe będą wykonane przez instancję 1. Całkowicie transparentnie dla użytkownika końcowego. Żeby przełączanie działało tak jak chcemy musimy tylko wyedytować plik źródłowy httpd-2.2.10/modules/proxy/mod_proxy.c i zmienić ograniczenia na lbfactor (np. na zakres 1-1000000). Apache'a konfigurujemy następująco:

./configure --prefix=/usr/local/apache_balancer --enable-static-support --enable-mods-shared=all --enable-deflate=shared --enable-logio=shared --enable-mime-magic=shared --enable-expires=shared --enable-headers=shared --enable-usertrack=shared --enable-proxy=shared --enable-proxy-connect=shared --enable-proxy-ftp=shared --enable-proxy-http=shared --enable-proxy-balancer=shared --enable-ssl=shared --enable-http --enable-rewrite=shared

Gdyby usługa na instance0 zespuła się możemy zaserwować statyczną odpowiedź o awarii serwisu, służy do tego route=maintenance ze statusem ustawionym na +H (hot standby).
Hot standby nie działa na RedHacie 5.1/5.2 i SLES 10 SP2, które mają starszego Apache'a.

czwartek, listopada 06, 2008

Obrazek prawie jak z IT Crowd


(C)2008 Andrzej S.

środa, listopada 05, 2008

WJMX i WebLogic 10

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=8888
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false

service:jmx:rmi:///jndi/rmi://192.168.1.100:8888/jmxrmi

poniedziałek, października 20, 2008

A ja tam uważam, że Palikot jest OK

sobota, października 11, 2008

Logitech NX-50 i NX-20

Nie ma już w sprzedaży myszek NX-20 (rewelacyjna mała i lekka myszka do laptopa). Są zamiast nich modele NX-50. Rzucająca się w oczy rożnica jest taka, że te nowe nie mają oddzielnych kawałków plastiku na przyciski lewy, prawy. Przez to myszka musi się trochę dotrzeć, żeby mieć takie samo miękkie klikanie jak NX-20. Nową myszką NX-50 nie można już sobie świecić w nocy na czerwono, odkładając wyłączonego laptopa na miejsce - stara była optyczna, nowa jest laserowa.



NX-50 jest czarny, NX-20 srebrny. Ze starym NX-em zdarzał się problem z jeżdżeniem po wypolerowanym drewanianym biurku. Rozwiązaniem było podłożenie kartki A4.

Acer Aspire 5715

Z tym laptopem działa LiveDVD Hackett Linux, a to dzięki temu, że laptop jest jak najbardziej standardowy. Procesor dwurdzeniowy Intela T2370 2x1,73 GHz, 2x512KB cache L2, chipset 965 Express ze zintegrowaną grafiką. Matryca AU Optronics, na oko taka sama jak Quanta Display (jakiś czas temu ta pierwsza firma połączyła się z drugą). W porównaniu z LG Philips kolory są normalne - ładne i soczyste. Na czymś takim można już używać Paint Shop Pro bez zabawy z kolorymetrem.


Przy zimnym włączeniu komputera i nie rozgrzanych świetłówkach widać trochę nierównomierne podświetlenie. Wrażenie być może bardziej rzuca się w oczy z powodu ograniczoych, jak w każdym LCD typu TN, kątów widzenia.


Na zdjęciu tego aż tak nie widać, ale matryca AUO ma lepszą maksymalną jasność i lepsze kolory w porównaniu do LG Philips (ta dodatkowo ma wyregulowany kontrast [0,133 / 48%] i korekcję gamma [ 0,833 / 48%]).




Klawiatura jest biała i "cyka" jak we wszystkich Acerach. Kwestia przyzwyczajenia.
Przyciski u góry klawiatury (włącznik, WiFi, głośność) i lewy port USB mogły by być lepiej spasowane. Mamy jedno USB z prawej strony zaraz na samym początku od strony użytkownika. Z lewej strony są 2 porty USB jeden na drugim. Wsadzanie Kingstona do tego górnego grozi porysowaniem końcówki (co sprawdziłem po fakcie). Tańszym chińskim flashem można dogiąć ten port. Z lewej strony przed portami USB jest S-Video, za nimi jest RJ-45, a na samym końcu gniazdo VGA i wejście na Kensingtona. Równolegle z prawej strony mamy w tym miejscu RJ-11.
Z prawej strony mamy napęd DVD+-RW. Ma on jeszcze 3 cm do portu USB, więc nie przeszkadza w używaniu pendrive'ów. Producentem napędu jest LG. Sprzęt nie czyta plików z rocznych płyt Tesco... (nigdy więcej kupowania płyt razem z kolacją). Sprawdziłem na Acerze 4530 z Vistą i TSST, że z tą samą płytą też jest problem... Ale Acer 3690 też z TSST przeczytał płytę. Gdzie Windows nie może, tam Linuks daje radę.


Laptop nie grzeje się, wentylatorek jest bardzo cichy (bardziej już słychać dysk 160GB Hitachi, ale można mu to wybaczyć, bo jest szybki). Przy jasności ekranu 50% i włączonym WiFi Windows wytrzymuje 2h 50 minut na jednym ładowaniu baterii. Przy maksymalnie przyciemnionej matrycy są to 3 godziny.


Parę słów o głosnikach: Głośniki testuję puszczając z iTunes kawałek Evenascence "Bring me to life". Na idealnych głośnikach słychać wszystkie dźwięki, a przy maksymalnej głośności obudowa nie wpada w rezonans (hard rock rulez). W modelu 5715 zakres dźwięków jest obrobinę gorszy i mniej przestrzenny niż w 4530, ale za to obudowa nie wpada w rezonans. Całkiem prawodopodobne, że w obu modelach są te same głosniki, z tą różnicą, że w 4530 jest nad nimi dziurkowany fragment obudowy i przez to dźwięk się lepiej propaguje.

Parę słów o wydajności: laptop ma 2GB RAM-u, zainstalowany na nim Oracle 11 chodzi przyzwoicie. Pamiętam instalowanie Oracle'a 10 na Asusie A6K z Turionem TL30 -tam było słychać i czuć (co określa się stwierdzeniem "laptop Ci odlatuje"), że baza jest stawiana skryptem, tutaj - nic z tych rzeczy.
Need For Speed 6 w natywnej rozdzielczości 1280x800 chodzi (jeździ) raczej dobrze. Na sterowniku z września 2008 trzeba ustawić 'Memory' na 'high' i zrestartować system, w przeciwnym razie NFS zamiast pobocza będzie miał szare płaszczyzny w miejscu brakujących tekstur, których nie udało załadować się do pamięci.

Tak na dobrą sprawę laptop z dwurdzeniowym Intel Pentium Dual-Core jest w zasadzie wystarczający do wszystkiego, nawet dla programisty. Dlaczego Intel i sprzedawca w pięknym salonie koło Feminy wmawiają nam, że lepiej kupić Core 2 Duo T9300 z 8MB cache'u?
Zamiast coraz szybszego procesora użytkownik końcowy wolałby działającą 12 godzin baterię...

Cena laptopa Acer Aspire 5715 to około 1500 złotych. Do testów dostarczył Reset Kraków.

Update: Pod Linuksem (OpenSUSE 11) działa nawet kamera.



Powertop on linux 2.6.27-rc7 before and after enabling C1 accounting, CPU is AMD Athlon X2 QL60

USB and WiFi drivers were unloaded, every powertop's hint was executed.
And still only 2 hours with almost everything disabled comparing to 3:11h on Vista while browsing Internet.






--- kernels/linux-2.6.27-rc8/drivers/acpi/processor_idle.c 2008-09-30
00:24:02.000000000 +0200
+++ linux/drivers/acpi/processor_idle.c 2008-10-06 00:24:19.000000000 +0200
@@ -501,7 +501,7 @@
* ------
* Invoke the current Cx state to put the processor to sleep.
*/
- if (cx->type == ACPI_STATE_C2 || cx->type == ACPI_STATE_C3) {
+ if (cx->type >= ACPI_STATE_C1) {
current_thread_info()->status &= ~TS_POLLING;
/*
* TS_POLLING-cleared state must be visible before we
@@ -523,12 +523,17 @@
* Use the appropriate idle routine, the one that would
* be used without acpi C-states.
*/
+
+ t1 = jiffies;
+
if (pm_idle_save) {
pm_idle_save(); /* enables IRQs */
} else {
acpi_safe_halt();
local_irq_enable();
}
+
+ t2 = jiffies;

/*
* TBD: Can't get time duration while in C1, as resumes
@@ -538,8 +543,7 @@
* Note: the TSC better not stop in C1, sched_clock() will
* skew otherwise.
*/
- sleep_ticks = 0xFFFFFFFF;
-
+ sleep_ticks = ticks_elapsed(t1, t2);
break;

case ACPI_STATE_C2:
@@ -642,12 +646,13 @@
return;
}
cx->usage++;
- if ((cx->type != ACPI_STATE_C1) && (sleep_ticks > 0))
+ if (sleep_ticks > 0)
cx->time += sleep_ticks;

next_state = pr->power.state;

#ifdef CONFIG_HOTPLUG_CPU
+
/* Don't do promotion/demotion */
if ((cx->type == ACPI_STATE_C1) && (num_online_cpus() > 1) &&
!pr->flags.has_cst && !(acpi_gbl_FADT.flags &
ACPI_FADT_C2_MP_SUPPORTED)) {
@@ -811,8 +816,11 @@
if (!pr)
return -EINVAL;

+ /* Newer dual-core CPUs use C1E instead of C2 and C3 and
+ * usually do not have _CST definitions or PBLK entries.
+ * ACPI specification allows for that so return zero here */
if (!pr->pblk)
- return -ENODEV;
+ return 0;

/* if info is obtained from pblk/fadt, type equals state */
pr->power.states[ACPI_STATE_C2].type = ACPI_STATE_C2;
@@ -852,6 +860,11 @@
pr->power.states[ACPI_STATE_C1].type = ACPI_STATE_C1;
pr->power.states[ACPI_STATE_C1].valid = 1;
pr->power.states[ACPI_STATE_C1].entry_method =
ACPI_CSTATE_HALT;
+ snprintf(pr->power.states[ACPI_STATE_C1].desc,
ACPI_CX_DESC_LEN, "ACPI HLT");
+ if (!pr->power.states[ACPI_STATE_C1].latency)
+ pr->power.states[ACPI_STATE_C1].latency = 1;
+ if (!pr->power.states[ACPI_STATE_C1].power)
+ pr->power.states[ACPI_STATE_C1].power = 1000;
}
/* the C0 state only exists as a filler in our array */
pr->power.states[ACPI_STATE_C0].valid = 1;
@@ -1191,12 +1204,11 @@
memset(pr->power.states, 0, sizeof(pr->power.states));

result = acpi_processor_get_power_info_cst(pr);
- if (result == -ENODEV)
- result = acpi_processor_get_power_info_fadt(pr);
-
if (result)
- return result;
+ result = acpi_processor_get_power_info_fadt(pr);

+ /* No valid _CST and FADT, but C1 must be supported,
+ * so here we go */
acpi_processor_get_power_info_default(pr);

pr->power.count = acpi_processor_power_verify(pr);
@@ -1216,13 +1228,13 @@
#endif

/*
- * if one state of type C2 or C3 is available, mark this
+ * if one state of type C1(e), C2 or C3 is available, mark this
* CPU as being "idle manageable"
*/
for (i = 1; i < ACPI_PROCESSOR_MAX_POWER; i++) {
if (pr->power.states[i].valid) {
pr->power.count = i;
- if (pr->power.states[i].type >= ACPI_STATE_C2)
+ if (pr->power.states[i].type >= ACPI_STATE_C1)
pr->flags.power = 1;
}
}
@@ -1455,7 +1467,7 @@
static int acpi_idle_enter_c1(struct cpuidle_device *dev,
struct cpuidle_state *state)
{
- u32 t1, t2;
+ u32 t1, t2, elapsed;
struct acpi_processor *pr;
struct acpi_processor_cx *cx = cpuidle_get_statedata(state);

@@ -1482,7 +1494,10 @@

local_irq_enable();
cx->usage++;
-
+ elapsed = ticks_elapsed(t1, t2);
+ if (elapsed > 0)
+ cx->time += elapsed;
+
return ticks_elapsed_in_us(t1, t2);
}

Sunia pilnuje laptopa




Jak wygląda matryca po spotkaniu z podłogą

- Cześć jestem matryca.
- Cześć jestem podłoga. (didaskalia: I sru).



czwartek, października 09, 2008

DPD - nie korzystajcie z usług tej firmy

Nie wiem czy robienie sobie jaj z klienta jest regułą, czy może tylko trafiłem na beznadziejnego kuriera. Ze śledzenia przesyłki dowiedziałem się, że był u mnie w domu o godz. 14, kiedy byłem w pracy. Wcale do mnie nie zadzwonił, żeby ustalić godzinę odbioru. Zadzwoniłem do biura obsługi klienta, nie mogli się do niego dodzwonić, zadzwoniłem drug raz, to samo. Przypadkiem na
ulicy natrafiłem na samochód innego kuriera, ten zadzwonił do działu
handlowego i ustalił numer kuriera i jego komórkę (WA2 GPR, 791 563 111).
Dzwoniłem z paru różnych telefonów i albo było zajęte albo człowiek nie
odbierał. Jak jutro do południa nie dostanę paczki, to chyba pojadę osobiście
do masterlinka i komuś zrobię krzywdę. Takich cudów jeszcze nie widziałem.
Proponowałbym wysyłanie paczek UPS-em, z nimi nigdy nie miałem problemów.

niedziela, września 21, 2008

Acer Aspire 4530

Laptop ma 14-calowy ekran, waży 2,4kg i wyposażony jest w procesor AMD Athlon X2 QL-60 1,9GHz o TDP 35W oraz zintegrowane GPU GeForce 9100 (MCP77). Notebook jest ładny i ma nowoczesny wygląd. Obudowa jest jakościowo lepsza od tej dwie generacje wstecz. Klawiatura taka sama jak w poprzednich Acerach (trzeba się do niej przyzwyczaić, mankamentem jest to, że ją mocno słychać - cyka), touchpad też ten sam - Synaptics. Nowością są głośniki - są naprawdę porządne. Puszczając muzykę z iTunes 8 byłem mile zaskoczony - na pierwszy rzut ucha brzmiały tak samo jak głośniki desktopowe. Dźwięk jest przestrzenny, nie przytłumiony, słychać więcej tonów niż w "zwykłych" głośnikach laptopowych. Obudowa znana z modelu 4520 jest dość wysoka - klawiatura znajduje się na wysokości 3 cm od blatu biurka, w starszych laptopach było to 2,5 cm. W rezultacie chcąc na niej pisać należy dostosować sobie miejsce pracy zgodnie z zasadami BHP - przesiadając się z Acera Aspire 3860 należy podnieść w górę siedzisko fotela.



Ekran wydaje się mniejszy i smuklejszy niż w starszych modelach, ale to tylko wrażenie spowodowane zaokrągleniem rogów obudowy, przez co wygląda na węższą.



Z prawej strony mamy sprawdzone DVD TSST (Toshiba Samsung Storage Technology), wejście USB na myszkę i wejście zasilania.



Z tyłu jest tylko wylot powietrza z systemu chłodzenia. W trakcie pisania tego tekstu obudowa w tym miejscu jest ciepła, ale wydmuchiwane powietrze jest chłodne. Laptop grzeje się najwięcej z powodu używania grafiki od NVidii.



Z lewej strony mamy wyjście VGA, gniazdo RJ45 karty Broadcom NetXtreme Gigabit Ethernet, gniazdo RJ11, dwa gniazda USB i wejścia/wyjścia audio (te ostatnie w starszych Acerach były z przodu, może było to odrobinę wygodniejsze). Przeniesienie gniazd USB na boki trzeba ocenić na plus, już nie trzeba trafiać na czuja w tył obudowy, żeby podłączyć myszkę.



Laptop jest oznaczony logiem SignalUp, co przeważnie przekłada się na to, że wyposażony jest w kartę Atherosa. Tak jest z modelem 4530, w którym zamontowano Atherosa 5007EG - bardzo ładnie pokazuje wszystkie sieci w okolicy, deklasując inne karty WiFi. Laptop ma zainstalowaną Vistę Home Premium. Przed skasowaniem jej zdążyłem zrobić windowsowy benchmark wydajności: procesor 4.9, grafika do Aero 4.1, gry 4.7, dysk powyżej 5-tki (Hitachi 250GB - czuć, że jest szybki, ale trochę go słychać, bardziej niż Caviara 60GB). Na laptop trafił Windows 2008 Server, który chodzi płynnie, wcale nie czuć, żeby system był ociężały (czego po Viscie można się spodziewać).



Jeszcze o obudowie: fajnie, że wyłącznik przeniesiono na środek, teraz przy przenoszeniu laptopa nie istnieje ryzyko chwycenia go tak, że przy okazji zostanie wciśnięty power-off.



Mimo (zdawałoby się) mało mobilnego sprzętu Windows przy włączonym WiFi i ekranie ustawionym na 40% jasności działa 3 godziny. Bardzo dobry wynik.



Z Linuksem jest gorzej, nie działają stany uśpienia C2, C3 ani C1 ani C1e (performance monitor pod Windows pokazuje powyżej 90% w stanie C1, sądząc po 3h działania musi być to C1e). Teoretycznie mają prawo nie działać, bo w DSDT nie ma definicji bloku power w FADT (P_LVL1*, P_LVL2* - opóźnienia i adresy rejestrów, których czytanie powoduje sen), ani nie ma sekcji _CST. Przez to Linuks wytrzymuje na bateri 1,5 - 2h i mocno grzeje sprzęt. Najwidoczniej Windows NT 6.0 ma sterowniki Cool'n'Quite, które radzą sobie bez poprawnych definicji zarządzania energią w BIOSie.



Dla Solarisa procesor jest za nowy (AMD 11h) i nie wie, jak nim zarządzać, żeby oszczędzać prąd. Ale OpenSolaris 2008.11 rozpoznaje automatycznie grafikę i ma do niej dość świeże sterowniki od NVidii.




Największą wadą laptopa jest matryca - jest taka sama jak w obecnych Lenovo czy Dellach - LG Philips - czyli dość nijaka. Kolory są blade i zupełnie nie soczyste, chyba też za bardzo niebieskie. W porównaniu do ekranu Quanta Display z Acera Aspire 3680, ten jest naprawdę low-endowy. Jeśli laptopa używamy do przeglądania sieci i programowania nie będziemy mieli z tego powodu mocno negatywnych odczuć, ale jeśli obrabiamy grafikę w Photoshopie, to będziemy musieli sobie skalibrować profil ICC.

    Plusy
  • Wydajny i jednocześnie oszczędny procesor
  • CPU wspiera sprzętową wirtualizację
  • Normalna grafika, czyli NVidia
  • Ładny design
  • Poręczny i lekki
  • Dobre głośniki
  • Dobra karta WiFi
  • dobra cena

    Minusy
  • NVidia potrafi się grzać
  • Problem z oszczędzaniem energii pod Linuksem
  • Matryca ma blade kolory, wymaga kalibracji ICC.

poniedziałek, września 15, 2008

Po czym poznać źle napisane strony WWW

Wystarczy zmienić deklarację typu dokumentu HTML i zobaczyć czy strona się rozjedzie:

  • strict: <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">

  • quirk: <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">

  • standard: <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">

wtorek, września 02, 2008

Yet another Konqueror for Windows

Mamy może mało popularne, ale porządnie sportowane Safari 3.1 dla Windowsa, mamy Konquerora z KDE 4.1 (winkde.org), a od dzisiaj mamy kolejną przeglądarkę z silnikiem KHTML - Google Chrome. Firmy wykorzystujące w swojej działalności Internet, jeśli wcześniej szanowały wybór klientów używających MacOS-a lub KDE, teraz mogą z dumą obwieścić, że ich strona jest kompatybilna z Googlem. Przykładem iPKO.

Po co Google'owi własna przeglądarka będąca Safari? Mając własną przeglądarkę z zaawansowanym silnikiem JavaScript mogą tworzyć Web 3.0. Prawda jest taka, że w DHTML-u można zrobić sporo byleby miało to sensowną wydajność. I jeszcze jedno spostrzeżenie: ludzie z Google'a używają MacBook-ów, na których mają Safari, więc przeglądarka Google na WebKit-cie to coś naturalnego.

piątek, sierpnia 22, 2008

WebLogic 10.1 MP1

Dziesiątka nie jest tak niezawodna jak dziewiątka. Przy co drugiej instalacji AdminServera zdarzają się takie błędy:

####<Aug 22, 2008 12:50:36 PM CEST> <Info> <ServletContext-/bea_wls_internal> <wls.domain.com> <AdminServer> <[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'> <<anonymous>> <> <> <1219402236024> <BEA-000000> <HTTPClntLogin: Login rejected with code: 'Failed', reason: java.net.ProtocolException: HTTP tunneling is disabled

at weblogic.rjvm.http.HTTPServerJVMConnection.acceptJVMConnection(HTTPServerJVMConnection.java:88)

at weblogic.rjvm.http.TunnelLoginServlet.service(TunnelLoginServlet.java:80)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)

at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:226)

at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:124)

at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283)

at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)

at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3395)

at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)

at weblogic.security.service.SecurityManager.runAs(Unknown Source)

at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2140)

at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2046)

at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1366)

at weblogic.work.ExecuteThread.execute(ExecuteThread.java:200)

at weblogic.work.ExecuteThread.run(ExecuteThread.java:172)

Workaround: Zaznaczamy w 'Server -> Protocol -> General': [*] enable tunnelling, a zakładce Channels dodajemy nowy kanał o nazwie AdminServer: protokół http, kanał ma być wyłączony, adres nasłuchu: podajemy zewnętrzny IP, port nasłuchu: -1, adres publiczny: ten sam IP, port publiczny: -1; dodatkowo zaznaczamy enable tunnelling i http tunnelling.
Po restarcie serwer powinien zachowywać się normalnie i sam nie składać.

środa, sierpnia 20, 2008

JCall - wołaj funkcje C z Javy

W środowiskach korporacyjnych króluje Java, w nich też używa się czasem wirtualizacji np. VMWare Servera. Fajnie by było, gdyby pewne operacje na maszynach wirtualnych zautomatyzować za pomocą jakiegoś własnego oprogramowania. EMC dostarcza API VIX w wydaniach dla C i Perla, ale nie ma Java bindings. Chciałem coś takiego zrobić samemu, ale z Javy nie można tak łatwo dostać się do C jak w .NET-cie. Są biblioteki np. J/Invoke, ale są płatne i zamknięte. No to napisałem swoją własną biblioteczkę - pomysł jest taki, że pobieramy adres funkcji z biblioteki so, wrzucamy go do eax-a, wrzucamy argumenty na stos i wołamy eax-a. Tak, tak, używamy assemblera :). Okazuje się, że jak się ma fajne gcc pod Windows i zrobi parę makrodefinicji, to ten sam kod napisany pod Linuksa, da się skompilować i uruchamiać pod Windows. Całość wrzuciłem na systest.googlecode.com.

piątek, lipca 25, 2008

Oszczędzanie energii

  • Przyciemniony ekran
  • Czarne tło pulpitu
  • Wyładowane sterowniki od USB, WiFI, LAN-u i dźwięku
  • Wyłączony NetworkManager, dhcdbd, arts, dbus
  • acpi_osi="Windows 2006" /*w laptopie mam BIOS do Visty*/
  • notsc clocksource=hpet
  • kernel 2.6.25 z NOHZ i WMI


Na koniec trzeba dodać, że przedmiotem eksperymentu był Acer Aspire 3680 z Celeronem M 420, w konsoli udało się zjechać nawet do 14,8W i 11 wybudzeń. Przy standardowej pracy z użyciem myszki USB i włączonym WiFi laptop pobiera 18W.

Intel 2D w X11

Sterownik xf86-video-intel na X serwerze 1.3 (i nowszym) domyślnie używa architektury akceleracji EXA (xf86-video-i810 używał XAA), co powoduje tragiczną wydajność 2D - widać to podczas przewijania strony WWW w przeglądarce, a zwłaszcza strony z Flashami (libflashplayer.so w wersji 9+ wiesza się czasem); eclipse chodzi wolno. Rozwiązania są 2:
  • Wrócić do XAA (Option "AccelMethod" "XAA")
  • albo dodać: Option "AccelMethod" "EXA", Option "MigrationHeuristic" "greedy", Option "ExaNoComposite" "false"

W celu przyśpieszenia glxgears można dodać zmienną środowiskową INTEL_BATCH=1.

środa, lipca 23, 2008

JConsole i WebLogic

JConsole z JDK 1.6 ma problemy przy odczycie danych, wypada używać wersji 1.5. Adres jest typu: 'service:jmx:iiop:///jndi/iiop://wlserver:7001/weblogic.management.mbeanservers.runtime'.

wtorek, lipca 22, 2008

VisualVM od Sun-a













Dostępny w JDK 1.6.07 albo oddzielnie.

piątek, lipca 18, 2008

Tylko 50% polskich internautów używa IE

Opublikowano najświeższe statystyki Gemius SA.

niedziela, lipca 13, 2008

Poprawki dla 2.6.25.10-rt7

Siadłem nad tym kernelem i doprowadziłem go do stanu używalności na moim laptopie:

libata: fix locking for kmap_atomic

pm_qos_params: change spinlock to rwlock

no i oczywiście żeby się kompilowało w kernel/sched.c trzeba dodać:

static inline u64 global_rt_runtime()
{
if (sysctl_sched_rt_period < 0)
return RUNTIME_INF;

return (u64)sysctl_sched_rt_runtime * NSEC_PER_USEC;
}
Tak przy okazji - mocny motyw:

piątek, lipca 11, 2008

Jak profilować WebLogic-a

Ściągamy YourKit Java Profiler, wgrywamy bibliotekę agenta na maszynę z WLS i w zakładce ServerStart podajemy '-agentpath:/home/weblogic/ykjprofiler/libyjpagent.so=port=9999'

poniedziałek, lipca 07, 2008

Oracle BEA - i wszystko jasne

http://blogs.oracle.com/otn/2008/07/blogging_the_oracle_fusion_mid.html
http://www.oracle.com/products/middleware/docs/oracle-middleware-strategy-briefing-072008.pdf

Oracle z marszu zamierza przestawić się z OC4J na WebLogic'a; eclipse-owe narzędzie BEA zostaną przerzucone do Oracle Eclipse Pack, a domyślnym IDE będzie JDeveloper. AquaLogic Service Bus będzie połączony z Oracle ESB i rozwijany jako Oracle Service Bus.

Tak na marginesie - te raporty Forrestera są naciągane...

piątek, lipca 04, 2008

Rzut okiem na Oracle SOA Suite 11

Funkcjonalność bardzo podobna do tej w NetBeans/OpenESB. Są aplikacje kompozytowe i procesy BPEL-owe (te ostatnie z trochę większą funkcjonalnością - można np. używać kodu Javy).


piątek, czerwca 27, 2008

Glassfish + Oracle... JDBC

czwartek, czerwca 26, 2008

SQL Module in details

It is quite OK to put user and pass in connection string. For SQL Module the connection string should be exactly the same as in Servers tab. Before generating WSDL you should call SQL probably with some given parameter (that is replace ? or :1 with some real values). When you see that query works do the right job.



For my example I have created nasty SQL function returning clob with XML inside.



As you can see the result from WebService doesn't look like real business function.
Let's try to fix it. First, create XSD schema for the output coming from DB.



Looking at the WebService WSDL we can see address for SQL-Engine handling our DB function.



To fix beauty (or the lack of) of our WebService BPEL Module will be needed.



From the left there is Partner Link from more business friendly WSDL (that we created on the side), some magic inside, and Partner Link for SQL-Engine WSDL.

First obvious action - pass input of left Partner Link to SQL-Engine and Invoke it.



That was easy, but what's up with mangled XML string? We need to get some real XML nodes from it. OK, create variable of type covered by schema generated from db output.



Do unmarshall on XML string (output of operation might require manual edition of BPEL's source: from and to parameters - if drag-and-drop doesn't work; probably NetBeans sees foreign namespace 'http://sys.one.pl/db1' of XSD schema and refuses to use it).



Now we have XML tree and can take some data from it and put into 'beatifull' WS result.



Let's drop in BPEL module into CompositeApp and make connections. Here it is:



CompositeApp with 2 WebServices: one beautifull and one ugly.

We can see business accepted output in test of 2nd WS.





To sum up:
  • SQL module for wrapping SQL command

  • EnterpriseApp for deploying JDBC connections

  • WebApp for nothing (EnterpriseApp cannot be empty and needs to have WebApp at least)

  • BPEL module for transforming ugly WS (SQL-Engine based) into beautifull WS

  • CompositeApp for hosting and linking modules