Lumidan

32bitový systém vs. 64bitový systém

Když jsem přibližně před 2ma měsíci koupil nový počítač, řekl jsem si, že si nainstaluju 64bitový systém, a to i přes to, že mi na něm nepůjde bankovnictví od Komerční banky (hlavně mě nekamenujte, mám u ní totiž hypotéku). Kvůli výkonu, kvůli rychlosti, protože 64 bitů má budoucnost a také proto, abych bez úprav kernelu mohl používat celé 4GiB RAMky....
ares952 20.10.2008 v 18:56
Záměrem tohoto článku není ani tak srovnávat 32bitové a 64bitové systémy co do funkčnosti, ale spíše co do výkonu.
Tak nějak jsem si skoro všude přečetl, že výkon je takřka nulový, že to není znát a tak dále a tak dále. Protože jsem od přírody člověk nedůvěřivý, zvláště, když někdo napíše dovětek "a to je prostě fakt" bez jakéhokoliv zdůvodnění, řekl jsem si, že si výkon jednoduše porovnám.
Jak jsem testoval
Nejprve něco napíšu k metodě testování. Začnu poněkud netradičně výpisem skriptu a následným komentářem:

#!/bin/bash
#
 
rm benchfile.urandom.unpack >> /dev/null 2>&1
rm /media/data-movie/benchmark/benchfile.urandom.pack.tar >> /dev/null 2>&1
rm test-output.file >> /dev/null 2>&1
rm /media/data-movie/benchmark/benchfile-small.urandom.pack.tar >> /dev/null 2>&1
 
MD5="md5sum"
SHA1="sha1sum"
#MD5="md5"
#SHA1="sha1"
 
echo "MDA5 check:"
$MD5 benchmark.sh
echo "SHA1 check:"
$SHA1 benchmark.sh
 
FILE="ubuntu-clear-amd64-output"
#FILE="ubuntu-amd64-output"
#FILE="ubuntu-i386-output"
#FILE="archlinux-amd64-output"
#FILE="archlinux-i686-output"
#FILE="debian-amd64-output"
#FILE="debian-i386-output"
 
echo > $FILE
 
echo "Enable full speed"
dd if=/dev/urandom of=/dev/null bs=1048576 count=16 >> /dev/null 2>&1
 
uname -a >> $FILE 2>&1
 
echo "1GiB /dev/urandom test"
echo "" >> $FILE
echo "1GiB /dev/urandom test" >> $FILE
time (dd if=/dev/urandom of=test-output.file bs=1048576 count=1024 && sync) >> $FILE 2>&1
 
echo "4GiB pack test"
echo "" >> $FILE
echo "4GiB pack test" >> $FILE
time (tar --bzip2 -cvvf /media/data-movie/benchmark/benchfile.urandom.pack.tar benchfile.urandom) >> $FILE 2>&1
 
echo "4GiB unpack test"
echo "" >> $FILE
echo "4GiB unpack test" >> $FILE
time (tar --bzip2 -x -O -vvf /media/data-movie/benchmark/benchfile.urandom.pack.tar >> benchfile.urandom.unpack) >> $FILE 2>&1
 
echo "4GiB original md5 checksum test"
echo "" >> $FILE
echo "4GiB original md5 checksum test" >> $FILE
time ($MD5 benchfile.urandom >> $FILE) >> $FILE 2>&1
 
echo "4GiB unpack md5 checksum test"
echo "" >> $FILE
echo "4GiB unpack md5 checksum test" >> $FILE
time ($MD5 benchfile.urandom.unpack >> $FILE) >> $FILE 2>&1
 
echo "4GiB original sha1 checksum test"
echo "" >> $FILE
echo "4GiB original sha1 checksum test" >> $FILE
time ($SHA1 benchfile.urandom >> $FILE) >> $FILE 2>&1
 
echo "4GiB unpack sha1 checksum test"
echo "" >> $FILE
echo "4GiB unpack sha1 checksum test" >> $FILE
time ($SHA1 benchfile.urandom.unpack >> $FILE) >> $FILE 2>&1
echo "Reading md5.benchfile.test"
 
dd if=md5-benchfile.urandom of=/dev/null
 
echo "2GiB md5 memory checksum test"
echo "" >> $FILE
echo "2GiB md5 memory checksum test" >> $FILE
time ($MD5 md5-benchfile.urandom >> $FILE) >> $FILE 2>&1
 
echo "2GiB sha1 memory checksum test"
echo "" >> $FILE
echo "2GiB sha1 memory checksum test" >> $FILE
time ($SHA1 md5-benchfile.urandom >> $FILE) >> $FILE 2>&1
 
echo "Reading benchfile-small.urandom"
dd if=benchfile-small.urandom of=/dev/null
 
echo "1GiB pack test from memory"
echo "" >> $FILE
echo "1GiB pack test from memory" >> $FILE
time (tar --bzip2 -cvvf /media/data-movie/benchmark/benchfile-small.urandom.pack.tar benchfile-small.urandom) >> $FILE 2>&1
 
echo "1GiB unpack test to memory"
echo "" >> $FILE
echo "1GiB unpack test to memory" >> $FILE
time (tar --bzip2 -x -O -vvf /media/data-movie/benchmark/benchfile-small.urandom.pack.tar >> /dev/null) >> $FILE 2>&1
 
rm benchfile.urandom.unpack
rm /media/data-movie/benchmark/benchfile.urandom.pack.tar
rm test-output.file
rm /media/data-movie/benchmark/benchfile-small.urandom.pack.tar
Na začátek upozorním, že v adresáři, kde se nachází skript, jsem vytvořil několik souborů potřebných pro benchmark (výstup zařízení /dev/urandom). 4GiB soubor benchfile.urandom, 2GiB md5-benchfile.urandom, a 1GiB benchfile-small.urandom. Tyto soubory jsou pro všechny testy identické.
Protože výstup programu time jde na STDERR, musí být přesměrován chybový výstup do souboru (2>&1).
Test je vcelku jednoduchý. Nejprve smažu nepotřebné benchmark soubory. Smazání je důležité z hlediska porovnávání výkonu. Pokud bych totiž soubor nesmazal, došlo by k tomu, že při prvním zápisu do souboru pomocí dd by se nejprve soubor odstranil a pak by se do něj zapisovalo. To je nežádoucí, protože takový 4GiB soubor se maže celkem dlouho.
Proměnné MD5 a SHA1 jsou příkazy pro spuštění programů md5sum (někde jen md5) a sha1sum (někde jen sha1) a následně proběhne otestování jejich přítomnosti hned na začátku testu. Například v archlinuxu není md5 a sha1 přítomen hned po nainstalování, je potřeba je doinstalovat (pacman -Sy mhash).
Proměnná FILE obsahuje výstupní soubor, který se vždy na začátku testu vymaže. Aby nebyly ovlivněny první sekundy testu v některých distribucích (v mém případě se to týká pouze ubuntu), je nejprve proveden zátěžový test, aby se frekvence procesoru dostala na nominál.
1GiB urandom test
Při tomto testu se kopíruje 1GiB do souboru na disku z /dev/urandom. Relevantní je výsledný čas testu. Test je zaměřen primárně na procesor, ale díky ukládání na disk a závěrečnému sync je v testu obsažen také výkon disku.
4GiB pack test
Metodou bzip2 a programem tar je komprimován soubor benchfile.urandom na jiný diskový oddíl na druhém disku. Původně jsem chtěl provést komprimaci 16GiB, ale 2 hodiny čekání je moc, tak jsem test zkrátil na 4GiB, což je také více než dost. Bohužel pack test jsem prováděl pouze na výstupu urandom, což není zcela relevantní. Zvážím proto ještě test komprimace na nějakém širším vzorku souborů.
4GiB unpack test
Zabalený soubor je zpět dekomprimován na původní diskový oddíl a to přesměrováním na STDOUT, který je přesměrován do souboru benchfile.urandom.unpack.
4GiB MD5 a SHA1 testy
Na první pohled zcela průzračné 4 testy. Jsou provedeny MD5 a SHA1 sumy na souborech benchfile.urandom a benchfile.urandom.unpack (které jsou na stejném oddíle). Původním záměrem bylo pouze porovnání sum, zda nedošlo během komprimace a dekomprimace k chybě, ale jak se ukázalo (a důvod pro mi zatím není jasný), tak doba výpočtu md5 (stejně tak sha1) je různá pro oba dva identické soubory a to i když jsou na stejném oddíle. Zatím nevím proč.
2GiB MD5 a SHA1 testy v paměti
Soubor md5-benchfile.urandom je zkopírován do paměti a následně je na něm provedena md5 a sha1. 2 GiB zvoleny proto, že tato paměť je dostupná i v 32bitovém systému a soubor tak může být nacacheován.
1GiB pack test v paměti
Soubor benchfile-small.urandom je načten do paměti, zabalen do souboru na jiném disku a následně rozbalen nikam (/dev/null).
 
Nakonec jsou dočasné soubory opět smazány.
 
Výsledky testů
(jednotlivé výsledky jsou v [s], srovnání potom v [%])
 

32bit



archlinux debian ubuntu avg
1GiB urandom test
190,924 204,493 195,548 196,99
4GiB tar bzip2 pack test sda2->sdb9
1967,567 1884,146 1977,750 1943,15
4GiB tar bzip2 unpack test sdb9->sda2
728,854 748,675 771,843 749,79
4GiB (original) md5sum na sda2
41,168 40,770 40,836 40,92
4GiB (unpack) md5sum na sda2
45,017 44,992 44,944 44,98
4GiB (original) sha1sum na sda2
40,794 40,905 40,753 40,82
4GiB (unpack) sha1sum na sda2
45,154 45,117 44,881 45,05
2GiB memory md5sum
6,270 22,266 6,748 6,51
2GiB memory sha1sum
12,793 22,333 11,667 12,23
1GiB tar bzip2 pack test mem->sdb9
492,159 477,619 496,667 488,82
1GiB tar bzip2 unpack test mem->mem
178,049 185,219 185,166 182,81
 



64bit

1GiB urandom test
archlinux debian ubuntu avg
4GiB tar bzip2 pack test sda2->sdb9
163,527 161,020 147,329 157,29
4GiB tar bzip2 unpack test sdb9->sda2
1834,692 1829,075 1750,041 1804,6
4GiB (original) md5sum na sda2
700,236 679,645 708,624 696,17
4GiB (unpack) md5sum na sda2
40,904 40,728 40,862 40,83
4GiB (original) sha1sum na sda2
44,805 48,026 44,974 45,94
4GiB (unpack) sha1sum na sda2
40,768 40,741 40,736 40,75
2GiB memory md5sum
44,789 44,965 44,816 44,86
2GiB memory sha1sum
6,150 6,443 6,172 6,26
1GiB tar bzip2 pack test mem->sdb9
9,347 10,391 10,115 9,95
1GiB tar bzip2 unpack test mem->mem
456,493 461,108 432,112 449,9


168,726 169,035 166,968 168,24
 
 


avg 64bit vs. 32Bit vaha v*avg
1GiB urandom test
25,24 2 50,47
4GiB tar bzip2 pack test sda2->sdb9
7,68 5 38,39
4GiB tar bzip2 unpack test sdb9->sda2
7,70 5 38,51
4GiB (original) md5sum na sda2
0,23 1 0,23
4GiB (unpack) md5sum na sda2
-2,07 1 -2,07
4GiB (original) sha1sum na sda2
0,17 1 0,17
4GiB (unpack) sha1sum na sda2
0,43 1 0,43
2GiB memory md5sum
4,06 1 4,06
2GiB memory sha1sum
22,90 1 22,9
1GiB tar bzip2 pack test mem->sdb9
8,65 2 17,3
1GiB tar bzip2 unpack test mem->mem
8,66 2 17,32
AVG


8,53
 
Závěr
Pro jednotlivé testy jsem si zvolil váhu, jakou pro mě test má a následně spočítal vážený průměr a dostal se tak k magickému výsledku, o kolik je 64 bitů lepších než 32 bitů :-). O 8,53%. Samozřejmě se jedná o imaginární číslo, které s realitou nemusí mít nic společného.
32bitový debian byl v případě memory md5 a sha1 sumy v nevýhodě. Nevím proč, ale nebyl jsem schopen donutit systém vidět více paměti, než 1GiB, proto po přečtení 2GiB souboru nebylo možné jej načíst celý do souborové cache. Do průměrné hodnoty proto není debian 32 v tomto testu započten.
Všechny systémy byly testovány s čistou instalací, bez jakýchkoliv upgradů, kromě 64bitového ubuntu, které je plně aktuální. Protože rozdíl byl celkem velký, rozhodl jsem se provést ten samý test na 64bitovém ubuntu v neaktualizovaném stavu a výsledek byl téměř identický (rozdíly v řádu maximálně desetin procenta nepočítám).
Neříkám, že můj tets je správný, jen jsem si chtěl udělat alespoň nějaký obrázek a srovnat dvě různé platformy. Na výsledky má také jistě velký vliv použité jádro, které bylo u každé distribuce jiné.
 
Identifikace systémů
32 archlinux:
Linux myhost 2.6.27-ARCH #1 SMP PREEMPT Sun Oct 12 15:16:25 CEST 2008 i686 AMD Athlon(tm) Dual Core Processor 4850e AuthenticAMD GNU/Linux
32 debian:
Linux debian 2.6.18-6-486 #1 Tue Jun 17 20:57:16 UTC 2008 i686 GNU/Linux
32 ubuntu:
Linux misko-desktop 2.6.24-19-generic #1 SMP Wed Jun 18 14:43:41 UTC 2008 i686 GNU/Linux
64 archlinux:
Linux myhost 2.6.27-ARCH #1 SMP PREEMPT Sun Oct 12 14:48:42 CEST 2008 x86_64 AMD Athlon(tm) Dual Core Processor 4850e AuthenticAMD GNU/Linux
64 debian:
Linux debian 2.6.18-6-amd64 #1 SMP Mon Jun 16 22:30:01 UTC 2008 x86_64 GNU/Linux
64 ubuntu:
Linux misko-desktop 2.6.24-21-generic #1 SMP Mon Aug 25 16:57:51 UTC 2008 x86_64 GNU/Linux
(resp. čistá instalace Linux misko-desktop 2.6.24-19-generic #1 SMP Wed Jun 18 14:15:37 UTC 2008 x86_64 GNU/Linux)
 
 

Komentáře

Zobrazit vše Počet příspěvků: 2 , poslední 30.06.2009 19:26:13
Re:Užitečné ares952 30.06.2009 19:26:13
Užitečné Petr 30.06.2009 03:20:19
 Přidat komentář 
Uživatelské jméno

Heslo


Zaregistrovat


S-Rank
Google PageRank
WebRank

Jaký operační systém především používáte na svém počítači.
Windows
Windows
GNU/Linux
GNU/Linux
Mac OS
Mac OS
Unix
Unix
Jiný
Jiný
Na těchto stránkách bych uvítal více ...
Politiky
Politiky
Zábavy
Zábavy
Praktických linuxových rad
Praktických linuxových rad
Něco jiného (napíšu to do questbooku)
Něco jiného (napíšu to do questbooku)

TOPlist

optimalizace PageRank.cz
vokno - vyhledávací server s lokalizací místní i na mapách ČR od Geodézie ČS
Toplink - katalog odkazů
klikni.cz
alfa.elchron.cz

Svobodni.cz

Creative Commons License