Bře 02 2010

Compiling SysBench on Debian Lenny

Tag: Debian, English, HW Tunning, Linux, MySQLJens @ 23:00

SysBench is a system performance benchmark primarily written for MySQL server benchmarking. In actual version 0.4.12, SysBench supports different benchmark modes: file I/O performance, CPU and scheduler performance, memory allocation and transfer speed, threads implementation performance and database server performance. It’s widely used on Linux machines, especially for identifying bottlenecks on database servers (with using file I/O performance and MySQL database support).

There are no exists pre-compiled binary package on current stable Debian (Lenny). If you want to use SysBench on this version, there are at least two different options:

  1. use pre-compiled package from unstable (Squeeze) version,
  2. compile itself from source SysBench package.

With the first option, there are two problems, why it is not a good idea: 1) mixing stable and unstable packages and 2) unstable Debian package don’t contains last version of SysBench (currently contains version 0.4.10-1).

In compilation SysBench from source, they may occurs some problems:

  • Wrong machine/OS detection in compile configuration phase:
    # ./configure
    checking build system type... Invalid configuration `x86_64-unknown-linux-': machine `x86_64-unknown-linux' not recognized
    configure: error: /bin/sh config/config.sub x86_64-unknown-linux- failed
    
  • Unreachable binary mysql_config or undetectable location of MySQL libraries, which are required for SysBench MySQL support:
    ********************************************************************************
    ERROR: cannot find MySQL libraries. If you want to compile with MySQL support,
           you must either specify file locations explicitly using
           --with-mysql-includes and --with-mysql-libs options, or make sure path to
           mysql_config is listed in your PATH environment variable. If you want to
           disable MySQL support, use --without-mysql option.
    ********************************************************************************
    
    This could be easy solved with installing libmysqlclient15-dev debian package.
  • libtool error in compilation progress
    # make
    ... some lines cropped ...
    ../libtool: line 838: X--tag=CC: command not found
    ../libtool: line 871: libtool: ignoring unknown tag : command not found
    ../libtool: line 838: X--mode=link: command not found
    ../libtool: line 1004: *** Warning: inferring the mode of operation is deprecated.: command not found
    ../libtool: line 1005: *** Future versions of Libtool will require --mode=MODE be specified.: command not found
    ../libtool: line 2231: X-g: command not found
    ../libtool: line 2231: X-O2: command not found
    ../libtool: line 1951: X-L/usr/lib/mysql: No such file or directory
    ../libtool: line 2400: Xsysbench: command not found
    ../libtool: line 2405: X: command not found
    ../libtool: line 2412: Xsysbench: command not found
    ../libtool: line 2420: mkdir /.libs: No such file or directory
    ../libtool: line 2547: X-lmysqlclient_r: command not found
    ../libtool: line 2547: X-lrt: command not found
    ../libtool: line 2547: X-lm: command not found
    ../libtool: line 2629: X-L/root/sysbench-0.4.12/sysbench: No such file or directory
    ../libtool: line 2547: X-lmysqlclient_r: command not found
    ../libtool: line 2547: X-lrt: command not found
    ../libtool: line 2547: X-lm: command not found
    ../libtool: line 2629: X-L/root/sysbench-0.4.12/sysbench: No such file or directory
    ../libtool: line 2547: X-lmysqlclient_r: command not found
    ../libtool: line 2547: X-lrt: command not found
    ../libtool: line 2547: X-lm: command not found
    ../libtool: line 5162: Xgcc -pthread "" "" -o @OUTPUT@ sysbench.o sb_timer.o sb_options.o sb_logger.o db_driver.o  tests/fileio/libsbfileio.a tests/threads/libsbthreads.a tests/memory/libsbmemory.a tests/cpu/libsbcpu.a tests/oltp/libsboltp.a tests/mutex/libsbmutex.a drivers/mysql/libsbmysql.a -L/root/sysbench-0.4.12/sysbench -lmysqlclient_r -lrt -lm: No such file or directory
    ../libtool: line 5163: Xgcc -pthread "" "" -o @OUTPUT@ sysbench.o sb_timer.o sb_options.o sb_logger.o db_driver.o  tests/fileio/libsbfileio.a tests/threads/libsbthreads.a tests/memory/libsbmemory.a tests/cpu/libsbcpu.a tests/oltp/libsboltp.a tests/mutex/libsbmutex.a drivers/mysql/libsbmysql.a -L/root/sysbench-0.4.12/sysbench -lmysqlclient_r -lrt -lm: No such file or directory
    ../libtool: line 5168: X: command not found
    ../libtool: line 5172: : command not found
    ... some lines cropped ...
    

Compilation step-by-step

Prerequisites: gcc, make and automake for compilation, mysql-server and libmysqlclient15-dev for MySQL support.

# apt-get install gcc make automake mysql-server libmysqlclient15-dev

Obtaining source code (actual version may differ) and extract archive:

# wget http://downloads.sourceforge.net/project/sysbench/sysbench/0.4.12/sysbench-0.4.12.tar.gz
# tar xfz sysbench-0.4.12.tar.gz
# cd sysbench-0.4.12

Fixing wrong machine/OS detection in configuration phase: edit file config/config.sub and before line line 312 (or line, where is comment: # Object if more than one company name word.) add following lines (with respect your machine/distro, in our case x86_64-unknown-linux; ensured from error message).

x86_64-unknown-linux)
    basic_machine=x86_64-pc
    os=-linux
    ;;

Fixing libtool error via replacing ranlib in file configure.ca, at line 75 (change AC_PROG_LIBTOOL to AC_PROG_RANLIB) and recreate all automake utilities with autogen:

# sed -i configure.ac -e 's/AC_PROG_LIBTOOL/AC_PROG_RANLIB/'
# ./autogen.sh

Now, you should run classical compilation progress:

./configure
make
make install

That’s all, sysbench binary is created in sysbench directory (sysbench/sysbench), you can copy it into some PATH folder and use it as you wish:

# cp sysbench/sysbench /usr/bin/sysbench

Some useful links


Úno 10 2010

Linuxový repozitář aplikací od Googlu

Tag: Debian, LinuxJens @ 09:30

Na stánkách http://www.google.com/linuxrepositories/ lze najít návody a odkazy na repozitáře software od Googlu — a to pro různé linuxové distribuce: Debian, Ubuntu, Suse, Mandrivia, RedHat. Je zde popsán jak postup přidání repositáře preš „naklikání“ v GUI, tak pomocí příkazového řádku — například pro Debian s APT.

A jaké že to aplikace (je tam i několik knihoven) lze v repositáři nalézt?

  • google-chrome-beta – The web browser from Google
  • google-desktop-linux – Google Desktop: Personalize and organize your own computer
  • picasa – Image management application from Google

Moc toho není, ale komu se nechce složitě schánět/překládat třeba zrovna prohlížeč Google Chrome, může využít právě tuto nejjednodušší cestu.


Led 10 2010

Built-in Exception changes in PHP 5.3

Tag: English, PHPJens @ 23:00

What really changes in built-in Exception class in PHP 5.3?

It is useful to use Java like nesting exceptions in PHP. In following example, we catch data insert exception (in class which is inherited from Zend_Db_Table) and throws own defined (Jens_Db_Exception) exception. We have still full information about previous (Zend_Db_Exception) exception.

try {
    $this->insert($some_data);
}
catch ( Zend_Db_Exception $e ) {
    throw new Jens_Db_Exception('Insert failed'0$e);
}

In PHP 5.2, we can use simple extension of built-in Exception to provide functionality described above:

class Jens_Exception extends Exception
{
    /**
     * @var Exception
     */
    private $previous;

    /**
     * @param string $message
     * @param int $code
     * @param Exception $previous
     */      
    public function __construct($message$code 0Exception $previous null)
    {
        parent::__construct($message$code);

        if ( !is_null($previous) )
        {
            $this->previous $previous;
        }
    }

    /**
     * @return Exception
     */
    public function getPrevious()
    {
        return $this->previous;
    }
}

Led 08 2010

Ceny pevných disků po novém roce

Tag: HW Tunning, ZprávičkyJens @ 01:30

Pokud někdo odložil nákup nového disku na „po vánocích“ či dokonce „po novém roce“, tak by ho mohla zajímat následující tabulka. Jsou v ní uvedeny ceny přepočítané ceny disků na jejich kapacitu — tedy, kolik korun českých zaplatíte za 1GB kapacity (desetinný údaj v tabulce tedy udává Kč/1GB).

kapacita HDD 3.5″ (7200) HDD 3.5″ (5400) HDD 2.5″ (5400) USB 3.5″ (7200) USB 2.5″ (5400)
320 GB 2.99 3.85 5.22
500 GB 2.24 2.28 3.95 3.63 4.70
640 GB 2.16 2.07 3.73 4.30
750 GB 2.55 2.18 4.62 2.49 4.68
1000 GB 2.19 2.05 5.07 2.40 4.79
1500 GB 2.04 1.76 2.17
2000 GB 3.36 2.13 2.23

Disky jsem rozdělil do pěti kategorií:

  1. HDD 3.5″ (7200): interní 3.5″ pevný disk, SATA 2, 7200 otáček
  2. HDD 3.5″ (5400): interní 3.5″ pevný disk, SATA 2, 5400 otáček, úsporný (zde lze zvolit ještě levnější kousek od výrobce Samsung a dostanete se na bezkonkurenční cenu 1.55 Kč/1 GB)
  3. HDD 2.5″ (5400): interní 3.5″ pevný disk, SATA 1/2, 5400 otáček, do notebooku
  4. USB 3.5″ (7200): externí 3.5″ pevný disk, USB 2.0, 7200 otáček, přenosný (vlastní zdroj)
  5. USB 2.5″ (5400): externí 2.5″ pevný disk, USB 2.0, 5400/5200 otáček, ultra přenosný (napájení z USB)

A jak to dopadlo?

  • Vítězem v kategorii cena/kapacita se jednoznačně stává „zelený“, interní 3.5″ disk s kapacitou 1.5TB.
  • V kategorii výkon/kapacita je dobrou koupí rychlý interní, 3.5″ disk s kapacitou 1.5TB.
  • A v kategorii přenosných disků opět vede disk, s kapacitou 1.5TB a o rozměru 3.5″. Pokud zvažuje nákup opravdu kapesního disku, šáhněte po tom s kapacitou 640GB.

Vítězství dnes tedy patří kapacitě 1.5TB … Všechny disky jsou od výrobce Western Digital, ceny jsou přebrány z eshopu Alfacomp (platné k 8.1.2010). Pozn.: 1000GB = 1TB.


Lis 23 2009

MySQL: Hromadná kontrola tabulek

Tag: Debian, MySQLJens @ 10:00

V aktuální old-stable (Etch) a vyšších verzí debianu se při spouštění MySQL 5.x automaticky provádí kontrola tabulek (CHECK TABLE) a případně i oprava (REPAIR TABLE) poškozených tabulek. Toto má nastarosti skript /etc/mysql/debian-start a funkce check_for_crashed_tables (definovaná v /usr/share/mysql/debian-start.inc.sh). Občas je ale potřeba explicitně prověřit všechny databáze a tabulky, to lze nejjednodušeji udělat z příkazové řádku pomocí utility mysqlcheck:

/usr/bin/mysqlcheck --defaults-file=/etc/mysql/debian.cnf --verbose --all-databases

Konfigurační soubor /etc/mysql/debian.cnf je přístupný pouze pro roota (tedy výše zmíněný příkaz lze spustit pouze pod rootem) a jsou v něm uloženy autentizační údaje pro systémový učet Debianu (debian-sys-maint) do MySQL.


Lis 10 2009

PHP: break a goto řídící stuktury

Tag: PHPJens @ 23:50

Zase jsem se dnes naučil něco nového o PHP. Věděli jste, že klíčové slovo break může mít číselný argument? Já se přiznám že jsme to netušil a nikdy mě to ani nenapadlo. Kolega v práci to zřejmě běžně používá, takže díky Pauci za objev :) A jak to celé funguje a na co to je? Volitelný celočíselný argument udává, z jaké hloubky zanoření v řídící struktuře má vyskočit, implicitní je 1, podívejte se na příklad:

<?php
$i = 0;
while (++$i) {
    switch ($i) {
    case 5:
        echo "At 5<br />n";
        break 1;  /* vyskoci pouze ze switch. */
    case 10:
        echo "At 10; quitting<br />n";
        break 2;  /* vyskoci ze switch a while. */
    default:
        break;
    }
}
?>

Více přímo v manuálu PHP.

Další zajímavostí je řídící struktura goto. Ta je nově přidána od PHP 5.3, osobně si myslím ze goto je čisté zlo, ale určitě existuje případ, kdy se může hodit. Co mě ale zaujalo nejvíce, přímo v manuálové stránce PHP je naprosto překvapivě umístěn obrázek (s tím jsem se v manuálu PHP nikdy nesetkal), který je navíc pojatý jako komiks a zřejmě vyjadřuje názor autora(ů) manuálové stránky na přidání struktury goto do jazyka :)

goto

Zdroj obrázku: xkcd.


Říj 01 2009

Jak zjistit verzi Debianu? – lsb_release!

Tag: DebianJens @ 10:36

Jak nejjednodušeji zjistit, jakou verzi Debianu či Ubuntu zrovna používáte, případně jaká verze Linuxu je použita na systému, kde jste se zrovna přihlásili? Určite se dá nají nějaký ten vhodný objekt v /etc/ kde to vyčtete, ale tato informace (například v /etc/issue) není vždy úplně přesná či úplná. Řešením je příkaz lsb_release (Linux Standard Base and Distribution information):

franta:~# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 5.0.2 (lenny)
Release:        5.0.2
Codename:       lenny

Tuto utilitu obsahuje balíček lsb-release a tedy nemusí být vždy součástí dané instalace, často však bývá standardní součástí systému. Nicméně, pokud se podíváte hlouběji pod kapotu (cat /usr/share/pyshared/lsb_release.py), tak zjistíte že se jedná pouze o Python, který prochází různé soubory (např. /etc/debian_version) a detekuje z nich verzi.


Srp 26 2009

Robtex: Informace o doméná a doménových jménech

Tag: WebJens @ 22:00

Dnes jsem náhodou narazil na velmi zajímavý on-line nástroj, který nahradí spousty linuxových příkazů (whois, nslookup, host), chcete-li vybádat nějakou IP adresu nebo chcete-li získat informace o nějaké doméně a s ní svázané subdomény, emailové servery a podobně. Má velmi výstižný název swiss army knife internet tool. Do horního pole „hostname, IP or AS“ jen zadáte IP nebo doménu a už se jen kocháte, co lze rychle a efektivně zjistit jedním kliknutím, zkuste třeba http://www.robtex.com/dns/seznam.cz.html.


Srp 25 2009

Jak vypnout personalizované vyhledávání v Googlu

Tag: SEO, WebJens @ 21:20

Personalizované vyhledávání v Googlu je mnohdy dosti problematické a vrací „až moc personalizovaně chytré“ výsledky, které buď nejsou relevantní a nebo v tu chvíli nežádoucí. Nejjednoduším způsobem jak toto personalizované vyhledávaní vypnout je připad URL parametr pws=0, tedy ideálně na konec přidat vašeho URL dotazu přidat &pws=0. Jistě, existuje i klikací řešení vypnutí, ale než to člověk najde a nastaví, tak přidání parametru do URL je mnohem rychlejší, navíc nezáleží na tom zda je člověk přihlášen či nikoliv. Více o parametru pws přímo na blogu Googlu.

Jinak další zajímavostí, která nepřímo souvisí s předchozím tématem je i nový vyhledávací engine Caffeine (najdete ho na adrese http://www2.sandbox.google.com/), který Google nedávno pustil do testovacího provozu, rozhodně stojí zato vyzkoušet pozice a relevance vašich oblíbených frází a zkusit porovnat s aktuálními výsledky. Více se dozvíte v oznámení Help test some next-generation infrastructure přímo na blogu Googlu.


Srp 12 2009

Není RAID jako RAID – díl 1. Úvod

Tag: HW Tunning, Linux, RAIDJens @ 21:00

Tímto článkem bych chtěl odstartovat sérii několik článků, které budou věnovány diskovým polím RAID a konfiguraci souborového systému (filesystému) v Linuxu vzhledem k maximálnímu výkonu, dostatečné bezpečnosti a minimální ceně. V seriálu se zaměřím především na softwarový RAID vytvořený pomocí utility mdadm, jeho konfiguraci na úrovni fyzických disků a operačního systém, budou popsány metodiky testování a jednotlivé testy, kterým se bude daná konfigurace testovat. Dalším aspektem bude i výběr souborového systému a jeho nastavení – zde se bude volit mezi systémy ext3, ReiserFS a XFS.

Nebude zde popisovat základní typy RAIDu, to už udělali dávno jiní a lépe, viz třeba česká stránka na Wikipedii o RAID, nebo ještě lépe anglická Wikipedia a RAID a mnoho dalších. Zaměřím se spíše na konkrétní konfigurační postupy a testy, na základě kterých bude možné vybrat konkrétní variantu pro konkrétní aplikaci – tou aplikací bude v našem případě databázový server MySQL, jehož výkonnost je mimo jiné silně spjata s výkonem souborového systému úložiště tabulek a dočasných souborů.

Hardwarový RAID

Hardwarový RAID je speciální kus hardware, který umožní vašemu počítači konfigurovat a spravovat diskové pole bez nutnosti instalace jakýkoliv ovladačů a zcela nezávisle na operačním systému.
Hardwarový RAID lze definovat takto:

  • má vlastní speciální procesor a vlastní paměť (ta může být navíc zálohována speciální baterií pro případ výpadku napájení),
  • je naprosto nezávislý na ovladačích a operačním systému, pro operační systém se tváří jako jeden disk (případně více disků v případě konfigurace více logických RAID svazků),
  • jeho cena je typicky dosti vysoká a pohybuje se v našich končinách na spodní hranici kolem 10 tisíc Kč.

Pokud vám tedy někdo bude tvrdit, že jeho deska za 4 000 Kč má hardwarový RAID, tak se tomu můžete klidně zasmát, protože je to zcela jistě nesmysl. Současné desky totiž mají pouze jednoduchou RAID utilitu na definici RAID pole, nicméně bez ovladačů a operačního systému z toho opravdové diskové pole nikdy nedostanete. Navíc ovladače pro takovéto „fake RAIDy“ existují pouze pro Windows a to často ještě v podivné kvalitě. Integrovaný RAID přímo na desce tedy není nic jiného než marketingový tah a podvod na uživatele, kteří problému příliš nerozumí a jsou ochotní připlatit za něco, co dostanou pouze při splnění speciálních požadavků. Navíc v případě problému s ovladačem takovéhoto RAIDu se vám diskové pole rozpadne, v lepším případě přijdete o data, v horším pak ani do systému nenabootujete.

Opravdový hardwarový RAID je však sofistikovaný kus hardware, který obsahuje vlastní procesor pro výpočet paritních dat (které jinak počítá CPU), zajišťuje rozložení výkonu v rámci zvolené úrovně RAID na fyzické disky. Dále řeší sestavení, obnovu a rozšiřování diskového pole v případě přidání fyzického disku, případně v případě výpadku či havárie havarují disků atd. Dále obsahuje speciální paměť – takzvanou „read/write cache”, do které jsou ukládán data před fyzickým zápisem na disky v případě zápisu (operační systému si tak myslí, že data jsou skutečně zapsána na disku a posílá další, kdežto oni jsou ve skutečnosti pouze v rychlé paměti a zapíší se až v okamžiku, kdy má „fyzický disk volno“ – toto je velmi jednoduše řečeno, celé je to mnohem sofistikovanější a podstatně složitější) a v případě čtení jsou zde uloženy před-načtené bloky dat, u kterých se předpokládá že o ně systém požádá v rámci čtení většího bloku dat. Takováto vyrovnávací paměť řadiče je obvykle v rozmezí 64MB512MB a často bývá zálohována speciální baterií (obvykle volitelná komponenta řadiče), která je schopna data ve vyrovnávací paměti udržet i v případě výpadku napájení. To znamená, že data jsou po celou dobu v paměti udržována a v momentě kdy je počítač znovu spuštěn, řadič zajistí jejich zapsání na disk (ještě před zavedením systému).

Toto vše je schopen hardwarový RAID bez potřeby jakéhokoliv operačního systému nebo ovladače. Operační systém pak vidí celé diskové pole jako fyzický disk a není třeba žádných speciálních aplikací na jeho inicializaci a správu. Takovýto řadič se pak stává na operačním systému zcela nezávislý a je možné ho provozovat bez nutnosti podpory ovladačů od výrobce hardware.

Softwarový RAID

Do této kategorie patří tedy i řadiče pevných disků, které si na hardwarový RAID pouze hrají (a zdá se, že výrobcům těchto předražených „akcelerátorů“ tento trik poměrně vychází) a ve skutečnosti vyžadují speciální ovladače, které instaluje do operačního systému – nazývají se „fake RAID”. Bez nich vám diskové pole fungovat nebude a utilita, která se spouští typicky po ukončení BIOSu počítače tak slouží pouze k tomu, abyste do operačního systému poslali informaci o tom, jak by měl váš RAID vypadat.

Jedná se tedy konkrétně o řadiče/čipsety dodávané přímo na základní desce:

  • Intel: (jižní můstky) ICH7R, ICH8R, ICH9R a ICH10R
  • nVidia: (čipsety) nForce4, nForce 500, nForce 600
  • AMD: (jižní můstky) SB450 (čipsety Radeon Xpress 200, Radeon Xpress 1150), SB600 (čipsety AMD 480/570/580)

Dále se pak prodávají speciální karty (to už je však opravdu vrchol zlodějiny a podvodů na neznalé), především od firmy Adaptec (Adaptec jim říká „HostRAID”), které jsou jakési „hardwarové akcelerátory“ pro RAID pole – které však bez OS a speciálních ovladačů nefungují nebo pouze částečně, přičemž jejich cena je poměrně vysoká.

Jedná se konkrétně o tyto produkty:

  • Adaptec 1220SA (cca 1700 Kč),
  • Adaptec 1225SA (cca 1500 Kč),
  • Adaptec 1420SA a 1430SA (cca 3000 Kč),
  • Adaptec 2405 (cca 6-7 tis. Kč !!!)
  • Adaptec 2410SA a 2420SA (cca 7-8 tis. Kč !!!)

Další softwarové RAIDy, které se však vydávají za RAIDy hardwarové naleznete například na stránce Linux SATA RAID FAQ.

mdadm

Základem softwarového RAIDu pro Linux je utilita mdamd (dříve mdctl), která je součastí linuxového jádra od verze 2. Ta vytváří v systému „md“ (multiple devices) zařízení, které se skládají z jednotlivých blokových zařízení (především fyzických disků a jejich oddílů — /dev/hda, /dev/sda atd.). Tato utilita umí vytvářet (bez potřeby jakéhokoliv „fake RAIDu”) RAID 0, RAID 1, RAID 4, RAID 5, RAID 6 a RAID 10 (a další speciální režimy: LINEAR, MULTIPATH a FAULTY).

Další díly seriálů se budou věnovat především práci s utilitou mdamd, popíšu v nich jednotlivé použitelné režimy RAID pro dosažení našeho cíle (maximálnímu výkon, dostatečná bezpečnost a minimální cena), jejich konfiguraci a sestavení na konkrétním hardware pro který budeme diskové pole optimalizovat. To je pro dnešek vše, můžete se těšit na další pokračovaní, které na sebe nedá dlouho čekat.


Další stránka »