Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Новости и флейм из мира *nix (http://forum.oszone.net/forumdisplay.php?f=33)
-   -   Тестирование быстродействия файловых систем. (http://forum.oszone.net/showthread.php?t=79565)

Igor_I 19-02-2007 00:17 552149

Тестирование быстродействия файловых систем.
 
Есть статья сравнивающая быстродействие файловых систем http://www.posix.ru/system/test_free_vs_linux/ написана в 2004 году. Но ведь все течет, все изменяется. Какова ситуация сейчас?
Сваял скриптик. За ошибки - извиняйте :) Неопытен еще.
Код:

#!/bin/sh

bigfile=/tmp/Lynda.com.3ds.Max.9.Essential.Training-MOJO.rar
newbigfile=/var/tmp/test.file

date >> /tmp/testfs.log
echo Test copy bigfile - 703 Mb
echo Test copy bigfile - 703 Mb >> /tmp/testfs.log
start=`date +%s`

        cp $bigfile $newbigfile &&
       
end=`date +%s`
timetest=`expr $end - $start`
echo $timetest >> /tmp/testfs.log
date >> /tmp/testfs.log

date >> /tmp/testfs.log
echo Test clear bigfile - 703 Mb
echo Test clear bigfile - 703 Mb >> /tmp/testfs.log
start=`date +%s`

        rm -Rf $newbigfile &&
       
end=`date +%s`
timetest=`expr $end - $start`
echo $timetest >> /tmp/testfs.log
date >> /tmp/testfs.log

date >> /tmp/testfs.log
echo Test untar file - 89.471 file
echo Test untar file - 89.471 file >> /tmp/testfs.log
start=`date +%s`

        tar xzf /tmp/ports.tar.gz &&
       
end=`date +%s`
timetest=`expr $end - $start`
echo $timetest >> /tmp/testfs.log
date >> /tmp/testfs.log

dirsm=/tmp/ports
newdirsm=/var/tmp/ports

date >> /tmp/testfs.log
echo Test copy smalldir - 89.471 file=174.115.356 byte
echo Test copy smalldir - 89.471 file=174.115.356 byte >> /tmp/testfs.log
start=`date +%s`

        cp -fR $dirsm $newdirsm &&
       
end=`date +%s`
timetest=`expr $end - $start`
echo $timetest >> /tmp/testfs.log
date >> /tmp/testfs.log

date >> /tmp/testfs.log
echo Test clear smalldir - 89.471 file=174.115.356 byte
echo Test clear smalldir - 89.471 file=174.115.356 byte >> /tmp/testfs.log
start=`date +%s`

        rm -Rf $newdirsm &&
       
end=`date +%s`
timetest=`expr $end - $start`
echo $timetest >> /tmp/testfs.log
date >> /tmp/testfs.log

dirbig=/tmp/software
newdirbig=/var/tmp/software

date >> /tmp/testfs.log
echo Test copy bigdir - 1.707 file=1.018.867.378 byte
echo Test copy bigdir - 1.707 file=1.018.867.378 byte >> /tmp/testfs.log
start=`date +%s`

        cp -fR $dirbig $newdirbig &&
       
end=`date +%s`
timetest=`expr $end - $start`
echo $timetest >> /tmp/testfs.log
date >> /tmp/testfs.log

date >> /tmp/testfs.log
echo Test clear bigdir - 1.707 file=1.018.867.378 byte
echo Test clear bigdir - 1.707 file=1.018.867.378 byte >> /tmp/testfs.log
start=`date +%s`

        rm -Rf $newdirbig &&
       
end=`date +%s`
timetest=`expr $end - $start`
echo $timetest >> /tmp/testfs.log
date >> /tmp/testfs.log

В итоге получили вот что
Цитата:

понедельник, 19 февраля 2007 г. 00:02:46 (MSK)
Test copy bigfile - 703 Mb
50
понедельник, 19 февраля 2007 г. 00:03:36 (MSK)
понедельник, 19 февраля 2007 г. 00:03:36 (MSK)
Test clear bigfile - 703 Mb
0
понедельник, 19 февраля 2007 г. 00:03:36 (MSK)
понедельник, 19 февраля 2007 г. 00:03:36 (MSK)
Test untar file - 89.471 file
124
понедельник, 19 февраля 2007 г. 00:05:40 (MSK)
понедельник, 19 февраля 2007 г. 00:05:40 (MSK)
Test copy smalldir - 89.471 file=174.115.356 byte
236
понедельник, 19 февраля 2007 г. 00:09:36 (MSK)
понедельник, 19 февраля 2007 г. 00:09:36 (MSK)
Test clear smalldir - 89.471 file=174.115.356 byte
72
понедельник, 19 февраля 2007 г. 00:10:48 (MSK)
понедельник, 19 февраля 2007 г. 00:10:48 (MSK)
Test copy bigdir - 1.707 file=1.018.867.378 byte
88
понедельник, 19 февраля 2007 г. 00:12:16 (MSK)
понедельник, 19 февраля 2007 г. 00:12:16 (MSK)
Test clear bigdir - 1.707 file=1.018.867.378 byte
1
понедельник, 19 февраля 2007 г. 00:12:17 (MSK)
Может еще кто поделиться своими тестами. Нету у меня ничего больше, кроме как UFS2.
И вот еще, что меня интересует. Чем может ограничиватся быстродействие компьютера, кроме как процессором и скоростью диска, измеряемой в мегабайтах.

kaEwituS 19-02-2007 09:40 552256

Цитата:

Чем может ограничиватся быстродействие компьютера, кроме как процессором и скоростью диска, измеряемой в мегабайтах.
Ёмкостью и скоростью Вашей ОЗУ... если на Вашу машину ходят и по сети то и Скоростью Сетевой карты..

ruslandh 19-02-2007 09:49 552260

Для определения скорости чтения вполне подходит hdparm


PS Статья интересная, но "неправильная" - не пришло ещё время выбирать файловую систему по бысьродеёствию - гораздо болееее важна надежность, и тут ext2/ext3 нет равных :)

Igor_I 19-02-2007 19:51 552573

kaEwituS
Про сеть пока речи нет. А вот насчет ОЗУ посмотрим.

ruslandh
Говорит - команда не найдена :)
Если только dd

Цитата:

и тут ext2/ext3 нет равных
То есть это можно расценивать как ответ на мой предыдущий вопрос?

Значит циферок я не дождусь :)

ruslandh 19-02-2007 21:56 552624

Значит установить надо :)

Насчёт цифорок - они должны быть соизмеримы, а как этого достичь, если помимо файловой системы на скорость работы с диском влияет и
скорость процессора и конкретный контроллер и жёсткий диск и драйвера (версия ядра и какой модуль используется) ? Плюс настройки безопасности (используется-ли SeLinux, а если используется, то в каком режимею. В частности, забиваются-ли нулями удаляемые файлы или просто удаляются с диска).

Igor_I 20-02-2007 23:07 553141

Это все отмазки :)
Ну нет, так нет...
А вот как узнать скорость работы ОЗУ - вопрос ... Как впрочем и частоту на которой она работает.

ruslandh 21-02-2007 00:16 553169

Поставьте hardinfo, может понравится.


http://hardinfo.berlios.de/web/HomePage

Igor_I 22-02-2007 23:22 554147

Не буду :)
Более чем уверен, что во FreeBSD оно не заработает. Поскольку использует (наверняка) системные вызовы, /dev & etc.
Нашел еще одну статейку
http://linuxgazette.net/122/piszcz.html
Действия для тестирования
Цитата:

001] Create 10,000 files with touch in a directory.
002] Run 'find' on that directory.
003] Remove the directory.
004] Create 10,000 directories with mkdir in a directory.
005] Run 'find' on that directory.
006] Remove the directory containing the 10,000 directories.
007] Copy kernel tarball from other disk to test disk.
008] Copy kernel tarball from test disk to other disk.
009] Untar kernel tarball on the same disk.
010] Tar kernel tarball on the same disk.
011] Remove kernel source tree.
012] Copy kernel tarball 10 times.
013] Create 1GB file from /dev/zero.
014] Copy the 1GB file on the same disk.
015] Split a 10MB file into 1000/1024/2048/4096/8192 byte pieces.
016] Copy kernel source tree on the same disk.
017] Cat a 1GB file to /dev/null.
Решил повторить :)
Но вот возникли вопросы по программированию.
Как сделать split?

ruslandh 22-02-2007 23:56 554155

man split вам в помощь :)
Цитата:

SPLIT(1) User Commands SPLIT(1)

NAME
split - split a file into pieces

SYNOPSIS
split [OPTION] [INPUT [PREFIX]]

DESCRIPTION

Igor_I 23-02-2007 00:12 554158

В шелле tcsh есть внутрення команда - time. Как изменить ее формат представление времени с умолчального на нужный?

Igor_I 23-02-2007 00:40 554169

Hardware
COMPUTER: Самосбор
CPU: Thorton 2200+ (1500МГц) (machdep.tsc_freq: 1.503.416.373)
RAM: 512MB
SWAP: 800MB
CONTROLLER: nForce2
DRIVES USED: 1] Samsung 1203N ATA/133 2MB CACHE 7200RPM

OS: FreeBSD 6.2-STABLE

Igor_I 23-02-2007 13:57 554284

Тестирование быстродействия
Объяснение команды time (это внутренняя команда tcsh)
`%Uu %Ss %E %P %X+%Dk %I+%Oio %Fpf+%Ww'
%U The time the process spent in user mode in cpu seconds.
%S The time the process spent in kernel mode in cpu seconds.
%E The elapsed (wall clock) time in seconds.
%P The CPU percentage computed as (%U + %S) / %E.
%X The average amount in (shared) text space used in Kbytes.
%D The average amount in (unshared) data/stack space used in Kbytes.
%I The number of input operations.
%O The number of output operations.
%F The number of major page faults (page needed to be brought from disk).
%W Number of times the process was swapped.

001-1
Вначале протестируем скорость выполнения скрипта командным интерпретатором. Простой цикл изменяющий значение от 10000 до 20000.
Скрипт исполняющий:
PHP код:

#!/bin/sh
#001
dir=/tmp/test/test1
mkdir $dir
cd $dir
i
=10000
end
=20000
while [ "$i" != "$end" ]
do
    
i=`expr $i + 1`
done 

Скрипт запускающий:
PHP код:

#!/bin/tcsh

set timefs=`time /tmp/test10000
echo 
$timefs >> /tmp/testfs.log 


Запускаем: time /tmp/test10000
Результат:
1) 7.179u 24.393s 0:37.95 83.1% 56+185k 0+0io 0pf+0w
4) 7.586u 23.898s 0:34.77 90.5% 54+184k 0+0io 0pf+0w
5) 7.348u 24.172s 0:34.81 90.5% 54+185k 0+0io 0pf+0w

Запускаем: /tmp/testfs
Результат:
2) 7.202u 24.354s 0:34.88 90.4% 55+184k 0+0io 0pf+0w
3) 7.270u 24.384s 0:34.95 90.5% 56+185k 0+0io 0pf+0w
6) 7.330u 24.240s 0:36.15 87.3% 55+183k 0+0io 0pf+0w

001-2
Добавляем команду есно, выводящую значение переменной на экран.
PHP код:

#!/bin/sh
#001
dir=/tmp/test/test1
mkdir $dir
cd $dir
i
=10000
end
=20000
while [ "$i" != "$end" ]
do
    echo 
$i
    i
=`expr $i + 1`
done 

Запускаем: time /tmp/test10000
Результат:
1) 7.893u 25.120s 0:39.75 83.0% 57+187k 0+0io 0pf+0w
3) 7.448u 25.555s 0:41.01 80.4% 57+186k 0+0io 0pf+0w
5) 7.710u 25.326s 0:42.94 76.9% 60+188k 0+0io 0pf+0w

Запускаем: /tmp/testfs
Результат:
2) 7.340u 24.591s 0:36.84 86.6% 56+187k 0+0io 0pf+0w
4) 7.652u 24.271s 0:36.84 86.6% 56+187k 0+0io 0pf+0w
6) 7.402u 24.504s 0:36.83 86.6% 56+186k 0+0io 0pf+0w


001-3
Просто создание файла нулевой длины
PHP код:

#!/bin/sh
#001
dir=/tmp/test/test1
mkdir $dir
cd $dir
i
=10000
end
=20000
while [ "$i" != "$end" ]
do
     
touch "$i"
    
i=`expr $i + 1`
done 

Запускаем: time /tmp/test10000
Результат:
1) 12.111u 43.326s 1:04.79 85.5% 54+180k 157+0io 0pf+0w
3) 12.007u 43.196s 1:05.69 84.0% 56+182k 158+0io 0pf+0w
5) 12.030u 43.177s 1:02.33 88.5% 55+182k 0+0io 0pf+0w

Запускаем: /tmp/testfs
Результат:
2) 12.405u 42.744s 1:02.26 88.5% 54+181k 9+0io 0pf+0w
4) 12.402u 42.678s 1:02.07 88.7% 54+182k 0+0io 0pf+0w
6) 12.049u 42.993s 1:03.47 86.7% 55+182k 0+0io 0pf+0w

001-4
Запись некоторого текста в файл, если его не существует - он создается.
PHP код:

#!/bin/sh
#001
dir=/tmp/test/test1
mkdir $dir
cd $dir
i
=10000
end
=20000
while [ "$i" != "$end" ]
do
    echo    
'And this file (' $i ') was generated ' `date`  >> $i
    i
=`expr $i + 1`
done 

Запускаем: time /tmp/test10000
Результат:
1) 14.642u 48.725s 1:12.49 87.4% 55+184k 0+0io 0pf+0w
3) 14.953u 48.294s 1:13.42 86.1% 55+183k 0+0io 0pf+0w
5) 14.465u 48.775s 1:12.24 87.5% 54+184k 0+0io 0pf+0w

Запускаем: /tmp/testfs
Результат:
2) 14.954u 48.323s 1:15.24 84.0% 55+184k 0+0io 0pf+0w
4) 14.932u 48.448s 1:12.51 87.3% 55+184k 0+0io 0pf+0w
6) 14.736u 48.387s 1:12.24 87.3% 55+184k 0+0io 0pf+0w


001-4
Запись два раза некоторого текста в файл, если его не существует - он создается.
PHP код:

#!/bin/sh
#001
dir=/tmp/test/test1
mkdir $dir
cd $dir
i
=10000
end
=20000
while [ "$i" != "$end" ]
do
    echo    
'And this file (' $i ') was generated ' `date`  >> $i
    
echo   `env` >> $i
    i
=`expr $i + 1`
done 

Запускаем: time /tmp/test10000
Результат:
1) 21.137u 68.812s 1:42.95 87.3% 58+184k 0+0io 2pf+0w
3) 21.057u 68.592s 1:43.86 86.3% 56+184k 0+0io 0pf+0w
5) 21.176u 68.506s 1:41.04 88.7% 56+183k 0+0io 0pf+0w

Запускаем: /tmp/testfs
Результат:
2) 20.695u 68.710s 1:42.00 87.6% 56+184k 0+0io 0pf+0w
4) 21.164u 68.392s 1:40.73 88.9% 57+184k 0+0io 0pf+0w
6) 20.559u 69.249s 1:42.35 87.7% 57+184k 0+0io 0pf+0w


001-5
Сначала создаем файл, потом в него пишем информацию.
PHP код:

#!/bin/sh
#001
dir=/tmp/test/test1
mkdir $dir
cd $dir
i
=10000
end
=20000
while [ "$i" != "$end" ]
do
    
touch "$i"
    
echo    'And this file (' $i ') was generated ' `date`  >> $i
    
echo   `env` >> $i
    i
=`expr $i + 1`
done 

Запускаем: time /tmp/test10000
Результат:
1) 25.683u 86.701s 2:08.34 87.5% 56+183k 0+0io 0pf+0w
3) 25.445u 87.655s 2:08.24 88.1% 57+183k 0+0io 0pf+0w
5) 25.141u 87.789s 2:09.79 87.0% 56+183k 0+0io 0pf+0w

Запускаем: /tmp/testfs
Результат:
2) 25.946u 86.947s 2:09.46 87.1% 56+183k 0+0io 0pf+0w
4) 25.513u 87.211s 2:08.09 88.0% 57+183k 0+0io 0pf+0w
6) 25.594u 87.748s 2:10.48 86.8% 57+183k 0+0io 0pf+0w


Отлично? Отлично!
А теперь Perl :)

Простой цикл.
PHP код:

#!/usr/bin/perl
$dir="/tmp/test/test1";
mkdir $dir,0777;
$i=10000;
while (
$i 20000)
        {
#        $newfile = "/tmp/test/test1/$i";
#        print "$newfile\n";
#        open (INFO, ">$newfile"); # Открыть файл для записи
#        print INFO "And this file (", $i, ") was generated ", localtime, "\n";
#        close (INFO);
        
++$i;    # Увеличиваем счетчик на 1
        


0.000u 0.010s 0:00.01 100.0% 0+0k 0+0io 0pf+0w


Цикл выводящий информацию на экран
PHP код:

#!/usr/bin/perl
$dir="/tmp/test/test1";
mkdir $dir,0777;
$i=10000;
while (
$i 20000)
        {
        
$newfile "/tmp/test/test1/$i";
        print 
"$newfile\n";
#        open (INFO, ">$newfile"); # Открыть файл для записи
#        print INFO "And this file (", $i, ") was generated ", localtime, "\n";
#        close (INFO);
        
++$i;    # Увеличиваем счетчик на 1
        


0.044u 0.011s 0:00.43 11.6% 8+268k 0+0io 0pf+0w

Цикл записывающий в файл
PHP код:

#!/usr/bin/perl
$dir="/tmp/test/test1";
mkdir $dir,0777;
$i=10000;
while (
$i 20000)
        {
        
$newfile "/tmp/test/test1/$i";
        
open (INFO">$newfile"); # Открыть файл для записи
        
print INFO "And this file ("$i") was generated "localtime"\n";
        
close (INFO);
        ++
$i;    # Увеличиваем счетчик на 1
        


0.440u 0.970s 0:02.47 57.0% 10+359k 0+1io 0pf+0w

Цикл записывающий в файл два раза.
PHP код:

#!/usr/bin/perl
$dir="/tmp/test/test1";
mkdir $dir,0777;
$i=10000;
while (
$i 20000)
        {
        
$newfile "/tmp/test/test1/$i";
        
open (INFO">$newfile"); # Открыть файл для записи
        
print INFO "And this file ("$i") was generated "localtime"\n";
        
close (INFO);
        
open (INFO">$newfile"); # Открыть файл для записи
        
print INFO "And this file ("$i") was generated "localtime"\n";
        
close (INFO);
        ++
$i;    # Увеличиваем счетчик на 1
        


0.838u 1.732s 0:03.79 67.5% 10+343k 0+0io 0pf+0w

Igor_I 24-02-2007 11:43 554567

Слово reboot в скобках означает попытку сделанную сразу после перезагрузки.
002-1
Поиск файла
/tmp/find
PHP код:

#!/bin/sh
#002
find /tmp/test/test1 -type f -name 19650 -print 

0.006u 0.072s 0:00.09 77.7% 72+2495k 0+0io 0pf+0w


0.028u 0.038s 0:00.06 83.3% 50+2300k 0+0io 0pf+0w (reboot)

Поиск строки в файле
002-2
/tmp/findstring
PHP код:

#!/bin/sh
#002
find /tmp/test/test1 -type f -name 19* -print | grep 19880 

0.016u 0.066s 0:00.08 87.5% 56+1920k 0+0io 0pf+0w
--------------------------------------------------------------------------

003-1
Удаление файлов

# time rm -r /tmp/test/test1

0.014u 0.237s 0:00.26 92.3% 17+3187k 0+0io 0pf+0w

0.039u 0.180s 0:00.23 91.3% 16+3093k 1+0io 0pf+0w (reboot)

Igor_I 24-02-2007 11:56 554574

004-1
Создание 10.000 директорий
/tmp/mkdir
PHP код:

#!/bin/sh
#004
dir=/tmp/test/test1
mkdir $dir
cd $dir
i
=10000
end
=20000
while [ "$i" != "$end" ]
do
    
mkdir "$i"
    
i=`expr $i + 1`
done 

12.307u 42.858s 1:03.41 86.9% 53+183k 150+8io 0pf+0w

11.556u 40.468s 0:56.87 91.4% 54+181k 160+10io 0pf+0w (reboot)

Создание 10.000 директорий
/tmp/perlmkdir
PHP код:

#!/usr/bin/perl
$dir="/tmp/test/test1";
mkdir $dir,0777;
$i=10000;
while (
$i 20000)
        {
        
$newdir "/tmp/test/test1/$i";
        
mkdir $newdir;
        ++
$i;    # Увеличиваем счетчик на 1
        


0.037u 0.687s 0:03.13 22.6% 10+364k 23+140io 0pf+0w

Создание 100.000 директорий

0.375u 3.428s 0:24.80 15.2% 10+336k 108+11505io 0pf+0w

Вот здесь то и работает диск на всю. А процессор простаивает.
-------------------------------------------
005
Поиск директории
PHP код:

#!/bin/sh
#002
find /tmp/test/test1  -name 19950 -print 

# time /tmp/find

0.072u 0.493s 0:00.59 94.9% 45+1685k 0+0io 0pf+0w (????)

# time find /tmp/test/test1 -name 19950 -print
0.096u 0.792s 0:55.92 1.5% 49+1882k 10000+0io 0pf+0w (первый запуск после reboot)

# time find /tmp/test/test1 -name 19650 -print
0.083u 0.464s 0:00.61 88.5% 48+1800k 10+0io 0pf+0w (второй запуск, спустя минуту)

-------------------------------------
006
Удаление директорий

# time rm -r /tmp/test/test1

0.347u 9.961s 0:16.26 63.3% 14+3289k 6702+0io 0pf+0w


0.130u 1.450s 0:56.98 2.7% 15+3397k 10000+0io 0pf+0w (reboot)

Igor_I 24-02-2007 13:05 554593

009
Распаковка архива на этот же диск

# time tar xzf /tmp/ports.tar.gz

4.737u 12.657s 1:41.15 17.1% 59+427k 24842+303io 0pf+0w


4.987u 16.189s 1:46.95 19.7% 60+2034k 13907+629io 0pf+0w (reboot)

-----------------
Создание архива
# time tar -czf ports2.tar.gz /tmp/ports

26.322u 11.424s 3:26.16 18.3% 59+661k 117542+284io 7pf+0w

25.188u 9.738s 1:34.12 37.0% 60+683k 113663+284io 2pf+0w (reboot)

(перепроверить)

---------------------
011
Удаление распакованного архива

# time rm -r /tmp/ports

0.485u 5.302s 0:45.61 12.6% 14+439k 15221+9io 0pf+0w

0.468u 5.150s 0:41.57 13.4% 15+452k 12698+12io 0pf+0w (reboot)

-------------------------


Igor_I 24-02-2007 13:34 554610

013
Создание 1 Gb файла из /dev/zero

# time dd if=/dev/zero of=/tmp/test/test1gb bs=1024 count=1024024

1048600576 bytes transferred in 24.572345 secs (42674013 bytes/sec)

0.231u 11.386s 0:24.70 47.0% 25+185k 15+8006io 0pf+0w

1048600576 bytes transferred in 24.291338 secs (43167675 bytes/sec)
0.341u 11.259s 0:24.31 47.6% 25+190k 17+8002io 0pf+0w (reboot)


Model Family: Seagate Barracuda 7200.8 family
Device Model: ST3250823A
Serial Number: 5ND26VCP
Firmware Version: 3.06
User Capacity: 250 059 350 016 bytes
ATA Version is: 7

1048600576 bytes transferred in 20.434582 secs (51315000 bytes/sec)
0.483u 11.367s 0:20.45 57.8% 25+189k 24+8000io 0pf+0w

------------------

014
Копирование 1 Гб файла на другой диск (ad0 > ad3)

# time cp /tmp/test/test1gb /mnt/Umor/test

0.062u 9.185s 0:29.41 31.4% 20+272k 8067+8000io 1pf+0w

0.055u 8.629s 0:27.91 31.0% 20+268k 8074+8000io 0pf+0w (reboot)

----------------

017
Копирование 1 Гб файла в /dev/null

# time cp /tmp/test/test1gb /dev/null

0.024u 3.711s 0:25.27 14.7% 20+269k 8034+0io 0pf+0w

# time cat /tmp/test/test1gb > /dev/null
0.047u 3.748s 0:25.05 15.0% 10+189k 8040+0io 0pf+0w

0.033u 3.682s 0:24.99 14.8% 9+179k 8040+0io 0pf+0w (reboot)

Model Family: Seagate Barracuda 7200.8 family
Device Model: ST3250823A
Serial Number: 5ND26VCP
Firmware Version: 3.06
User Capacity: 250 059 350 016 bytes
ATA Version is: 7

0.046u 3.658s 0:20.36 18.1% 10+194k 8051+0io 0pf+0w

Igor_I 24-02-2007 13:50 554613

015
Разбиение 10 Мб файла на части по 1000/1024/2048/4096/8192 байт

# time split -a 6 -b 1000 /tmp/test/test10mb
0.032u 1.006s 0:02.35 43.8% 10+275k 0+1io 0pf+0w

# time split -a 6 -b 1024 /tmp/test/test10mb
0.033u 0.954s 0:02.16 45.3% 9+264k 1+18io 0pf+0w

# time split -a 6 -b 2048 /tmp/test/test10mb
0.016u 0.482s 0:01.00 49.0% 9+268k 0+8io 0pf+0w

# time split -a 6 -b 4096 /tmp/test/test10mb
0.000u 0.271s 0:00.44 61.3% 10+285k 0+8io 0pf+0w

# time split -a 6 -b 8192 /tmp/test/test10mb
0.000u 0.155s 0:00.36 41.6% 10+278k 0+9io 0pf+0w

Ну вот и что мы померяли? Не знаю. В одном случае - быстродействие шелла, в другом - скорость винчестера. А где же быстродействие файловой системы? Если только при работе с архивами. Да поиск.
Продолжение следует ....

Igor_I 28-02-2007 22:12 556582

В качестве продолжения взят другой винчестер

=== START OF INFORMATION SECTION ===
Model Family: Western Digital Caviar SE family
Device Model: WDC WD2500JB-00GVC0
Serial Number: WD-WCAL76603272
Firmware Version: 08.02D08
User Capacity: 250 059 350 016 bytes
ATA Version is: 6
ATA Standard is: Exact ATA specification draft version not indicated


******* Working on device /dev/ad4 *******
parameters extracted from in-core disklabel are:
cylinders=7752336 heads=1 sectors/track=63 (63 blks/cyl)

Figures below won't work with BIOS for partitions not in cyl 1
parameters to be used for BIOS calculations are:
cylinders=7752336 heads=1 sectors/track=63 (63 blks/cyl)

Media sector size is 512
Warning: BIOS sector numbering starts with sector 1
Information from DOS bootblock is:

The data for partition 1 is:
sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
start 63, size 20972385 (10240 Meg), flag 80 (active)
beg: cyl 1/ head 0/ sector 1;
end: cyl 95/ head 0/ sector 63

The data for partition 2 is:
sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
start 20972448, size 446274864 (217907 Meg), flag 0
beg: cyl 96/ head 0/ sector 1;
end: cyl 815/ head 0/ sector 63

The data for partition 3 is:
sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
start 467247312, size 21149856 (10327 Meg), flag 0
beg: cyl 816/ head 0/ sector 1;
end: cyl 655/ head 0/ sector 63


то есть разбит на 10(ad4s1a)+217(ad4s2a)+10(ad4s3a)

1) скорость на запись
time dd if=/dev/zero of=/mnt/ad41/test/file bs=16384 count=65000
1064960000 bytes transferred in 18.790220 secs (56676292 bytes/sec)
0.031u 4.332s 0:18.81 23.1% 25+228k 23+8160io 0pf+0w

time dd if=/dev/zero of=/mnt/ad42/test/file bs=16384 count=65000
1064960000 bytes transferred in 19.721640 secs (53999566 bytes/sec)
0.039u 4.649s 0:19.74 23.6% 25+226k 35+8160io 0pf+0w

time dd if=/dev/zero of=/mnt/ad43/test/file bs=16384 count=65000
1064960000 bytes transferred in 31.197468 secs (34136104 bytes/sec)
0.066u 4.589s 0:31.25 14.8% 27+245k 36+8165io 0pf+0w

тут еще за бортом остаются такие параметры как "килобайт на транзакцию" и "количество транзакций в секунду".
Тоже весьма любопытный параметр

Igor_I 04-03-2007 01:04 557708

Примерно с какими параметрами надо монтировать разделы в Линуксе - ext3, reiserFS
Может подскажете.

ruslandh 04-03-2007 08:28 557755

Igor_I
1 Напишите-к Вы статью на Wiki - будет какая-то польза остальным :)
2 вопрос задан некорректно :)
Не понятно что значит надо - параметры могут быть любыми :)
man mount
man fstab

Igor_I 04-03-2007 10:57 557785

ruslandh
Так не со всеми параметрами сразу.
Вот у тебя лично, как смонтированны разделы?

ruslandh 04-03-2007 11:27 557789

UUID=c845af3e-51ed-4b08-b342-f91fa348609c / ext3 defaults 1 1
UUID=7a485083-3512-47f9-ba61-f75122a8c2bb /boot ext3 defaults 1 2
UUID=a1bacb74-b1eb-4da8-88ba-bfb1fe63f613 /home ext3 defaults 1 2
/dev/sda2 /mnt/win_c1 vfat iocharset=cp1251,quiet,codepage=866,umask=0 0 0
/dev/sda3 /mnt/win_c2 vfat iocharset=cp1251,quiet,codepage=866,umask=0 0 0
/dev/sda5 /mnt/win_d vfat iocharset=cp1251,quiet,codepage=866,umask=0 0 0
/dev/sda6 /mnt/win_e vfat iocharset=cp1251,quiet,codepage=866,umask=0 0 0
/dev/sda7 /mnt/win_f vfat iocharset=cp1251,quiet,codepage=866,umask=0 0 0
/dev/sda9 /mnt/win_g vfat iocharset=cp1251,quiet,codepage=866,umask=0 0 0
/dev/sdb5 /mnt/win_h ntfs defaults,quiet,umask=0,nls=cp1251 0 0

UUID=6d77db04-154b-442b-be08-336f0952c1a1 swap swap defaults 0 0
UUID=2acf0afc-14f4-42f6-a222-4f492b2e4e4b /arhiv ext3 defaults 1
UUID=b34fdc30-ded1-45b2-80fd-8c197b40cbf9 /mnt/arhiv ext3 defaults 0

Igor_I 04-03-2007 11:58 557796

спасибо
:)

Igor_I 04-03-2007 20:30 557914

Вопрос, как можно нагрузить диск на чтение, если создается 20 директорий по 200 файлов.
Если все - много, да и последовательное чтение быстрее проходит, чем случайное.

ruslandh 05-03-2007 09:28 558044

Обрати внимание на
apt-cache search Bonnie++
bonnie++ - Программа для определения скорости работы жестких дисков и файловых систем
bonnie - Unix filesystem performance benchmark

http://www.rpmfind.net/linux/rpm2htm...p?query=bonnie


Igor_I 07-03-2007 23:06 559058

это наверно синтетика
хотя у меня тоже надуманный тест, но все же, потом посмотрим
из чего состоит тест
создание 20 директорий, в каждой директории по 200 файлов одного размера
размер файлов от 2 до 1024 кб
чтение - тут еще не определился, есть подозрение что system в Perl медленный, только как проверить.

Igor_I 08-03-2007 23:11 559362

Вложений: 1
вот результат некоторой работы. критика приветствуется

PHP код:

#!/bin/tcsh

# определение лог-файлов
mkdir 0777 /tmp/test/log
set filesuffix
=`date "+%Y.%m.%d-%H.%M.%S"`
set iostatlog="/tmp/test/log/log.$filesuffix.iostat.log"
set filelog="/tmp/test/log/log.$filesuffix.mkdir.log"
set tablelog="/tmp/test/log/log.$filesuffix.table.log"
# определение слайса
set slice=ad4s1a
set mount
="/mnt/ad41"
set start = `date +%s

echo 
"#######################################################" >> $filelog
date 
>> $filelog 

# создание виртуального диска 8 мб
mdconfig --t malloc -s 8m -u 3 > /dev/null
newfs 
/dev/md3 > /dev/null
mount 
/dev/md3 /mnt/test

# создание на виртуальном диске временных файлов для теста
set i=2
set e
=1025
while ( $i $e )
    
dd if=/dev/zero of=/mnt/test/original-$i bs=1024 count=$i >> /dev/null
    set i
=`expr $i \* 2`
end

# на всякий случай и на случай преждевременного прекращения работы скрипта
killall -c iostat &

### размер блока может быть равен = 2048, 4096,8192,16384
# установка параметров будущей фалйовой системы и создание файловой системы
set newfsparam="-b 16384"
newfs $newfsparam /dev/ad4s1a
echo "newfs $newfsparam" >> $filelog
# установка параметров монтирования файловой системы и её монтирование
set mountparam=""
mount $mountparam /dev/ad4s1a $mount
echo "mount $mountparam" >> $filelog

# создание подопытной директории
mkdir $mount/test 

# вывод конфигурации получившийся файловой системы
bsdlabel /dev/ad4s1 >> $filelog 

# запуск вывода расширенной отладочной информации
echo "#######################################################" >> $iostatlog
date 
>> $iostatlog
echo "iostat ad4" >> $filelog 
iostat 
--d ad4 -I 2  >> $iostatlog &

# вычисление размера в начале опыта
echo "size start"  >> $filelog
du 
-chs $mount >> $filelog 

echo " "  >> $filelog 
echo "mkdir"  >> $filelog 

# запуск вывода отладочной информации
iostat -d ad4 -I 2  >> $iostatlog &

# цикл формирующий директории с файлами
set i=2
set e
=1025
set startdir 
= `date +%s`
while ( 
$i $e )
    echo 
"====================== mkdir $i =======================" >> $iostatlog
    set startd 
= `date +%s`
    
    
set mkdirtime=`time /tmp/mkdir $mount $i`
    echo 
$mkdirtime >> $filelog

#    du -chs $mount >> $filelog     
    
set endd=`date +%s`
    
set durationd=`expr $endd - $startd`
    
    echo 
" Duration mkdir $i = " $durationd >> $filelog 
    
echo "====================== mkdir $i =======================" >> $iostatlog
    
echo "$i,$durationd" >> $tablelog
    
    set i
=`expr $i \* 2`
end

# вычисление общего времени затраченного на создание директорий
set enddir=`date +%s`
set durationdir=`expr $enddir - $startdir`
echo 
" Duration all mkdir=" $durationdir >> $filelog 

# подсчет получившегося размера после опыта
echo " "  >> $filelog 
echo "size end"  >> $filelog 
du 
-chs $mount >> $filelog 

echo " "  >> $filelog 
echo "copy"  >> $filelog 

# цикл копирующий получившиеся директорий с файлами на виртуальный диск
set i=2
set e
=1025
set startcopy 
= `date +%s`
while ( 
$i $e )
    echo 
"====================== copy  $i =======================" >> $iostatlog
    set startcopy 
= `date +%s`
    
    
set copytime=`time /tmp/copy $mount $i >> $filelog`
    echo 
$copytime >> $filelog
    
    set endcopy
=`date +%s`
    
set durationcopy=`expr $endcopy - $startcopy`
    
    echo 
" Duration copy $i =" $durationcopy >> $filelog 
    
echo "====================== copy  $i =======================" >> $iostatlog
    
echo "$i,$durationcopy" >> $tablelog
    set i
=`expr $i \* 2`
end

# вычисление общего времени затраченного на копирование
set endcopy=`date +%s`
set durationcopy=`expr $endcopy - $startcopy`
echo 
" Duration all copy =" $durationcopy >> $filelog 

# удаление всех файлов после опыта
echo " "  >> $filelog 
echo "rm -r " >> $filelog 
echo "====================== rm -r =======================" >> $iostatlog
set rmtime
=`time rm -r $mount/test >> $filelog`
echo 
$rmtime >> $filelog
echo "====================== rm -r =======================" >> $iostatlog

# размонтирование подопытной файловой системы
echo "umount " >> $filelog 
set unmounttime
=`time umount $mount >> $filelog`
echo 
$unmounttime >> $filelog

# размонтирование виртуального диска и его удаление 
umount /mnt/test
mdconfig 
--u 3

# прекращение команд iostat
killall -c iostat &

# вычисление общей продолжительности работы скрипта
set end=`date +%s`
set duration=`expr $end - $start`
echo 
" Duration =" $duration >> $filelog 

вот и образец отчета

ruslandh 09-03-2007 08:09 559442

Цитата:

# определение слайса
set slice=ad4s1a
set mount="/mnt/ad41"
set start = `date +%s`
Получился FreeBSD специфичный скрипт, по-хорошему надо вначале определить OS


Igor_I 09-03-2007 20:50 559733

Цитата:

Получился FreeBSD специфичный скрипт, по-хорошему надо вначале определить OS
Это выше моей квалификации :)
И потом вывод команд разве одинаковый?
iostat -x -d ad4 -I 2
iostat -d ad4 -I 2
time - это внутреняя команда tcsh

mar 09-03-2007 21:39 559745

Цитата:

Это выше моей квалификации
это uname -то ? :)

Igor_I 09-03-2007 22:09 559756

да нет, всё последующее
как выглядят нужные команды я не знаю, да и тестировать не на чем.
пока фри, тем более там оказывается нужно бы потестировать 10 параметров при создании системы и еще при монтировании, наверно столько же

Igor_I 17-03-2007 17:15 563037

ruslandh
еще вопрос, как в Linux создаются файловые системы, с какими параметрами. Интересуют размеры блоков, фрагментов и размер inoda.

ruslandh 17-03-2007 23:06 563148

Igor_I
Честно сказать - теорию не читал. На практике можно посмотреть на конкретных машинах. Как создаются - через parted или fdisk.


Обычно при создании "система" сама выбирает параметры, но возможно есть какие-то ключи.

Igor_I 24-03-2007 13:09 566072

В ufs размер блока от 4096 до 65384, при этом размер фрагмента равен 1/8-1/2 от блока, mke2fs создает ext2 с блоками 1024-4096, размер фрагмента равен размеру блока, не густо :). Правда по запросу может создать файловую систему и с большими блоками. Но фрагмент останется равным блоку.

ruslandh 24-03-2007 17:15 566120

Размер фрагмента блока - это вроде особенность FreeBSD файловых систем (в смысле не Linux), хотя могу ошибаться.


[mzd] 06-04-2007 12:46 570947

Сравнение производительности файловых систем или Reiser4 наносит ответный удар.
Некто John Robert Banks провел серию тестов популярных файловых систем, поддерживаемых Linux (ext2/3/4, reiser3/4/4 with compression, xfs, jfs, fat32, ntfs-3g) на нескольких ядрах (2.6.13 - suse 10 default и 2.6.20-mm1) на AMD Socket AM2 Athlon 64 3500+ system with a Seagate 250 Gig SATA drive and 512 MB RAM.

Представленные результаты весьма интересны апологетам Reiser4 - несмотря на то, что автор утверждает о абсолютном превосходстве Reiser4 над всеми остальными системами, таблицы показывают что далеко не все тесты настолько оптимистичны, а Reiser4 без компрессии практически всегда медленее ext4.

О корректности предоставленных результатов, конечно же, необходимо судить в контексте решаемой задачи.
(c)linux.org.ru

Igor_I 06-04-2007 21:41 571137

[mzd]
Этот сайт имеет ограничение траффика в 40 мб. Так что, посмотреть наверно только в понедельник.

Igor_I 01-07-2007 20:27 606701

Вложений: 1
У меня сейчас изменились приоритеты на автомобильную тему, а значит на компьютеры время не остается. И довести до ума графики не могу уже месяца два.
Выкладываю, что есть. Тестировалась UFS2. C разными блоками/фрагментами.
Тесты все, за исключением одного, FreeBSD зависала при нем.


Время: 19:20.

Время: 19:20.
© OSzone.net 2001-