Re: Скоpость чтения/записи с зеpкала
- From
- Vitaly Filatov (2:5020/400)
- To
- Dmitry Budanov (2:5054/37.63)
- Date
- 2005-05-09T14:08:04Z
- Area
- RU.UNIX.SOLARIS
From: Vitaly Filatov <vitaly@royint.com>
Дмитрий!
Обычно результат противоположен: запись выполняется дольше, чем чтение.
Причина Вашего парадокса в том, что Вы пишете и читаете в /tmp, которая
частично расположена в ОЗУ.
Когда Вы пишете в /tmp, то данные вначале складываются в ОЗУ, затем
может начаться своппинг на диск. Поэтому очень сложно отделить этот
процесс, от самого ввода-вывода.
То, что своппинг на диск имел место Вы можете посмотреть по результату
вывода команды 'swap -l':
$ /usr/sbin/swap -l
swapfile dev swaplo blocks free
/dev/dsk/c0d1s1 102,65 8 1846648 780792
Если число в колонке blocks стало не равно числу в колонке free, то
своппинг на диск произошёл. У меня, например, при обычной работе
эти значения всегда равны, т.е. для моих мелких задач вполне хватает
одного ОЗУ.
------------------
Небольшое отступление.
В Солярис /tmp накладывается на swapfs. swapfs начинается в ОЗУ (и
занимает объём оставшийся от резидентного ядра, выполняемых программ и
кеша файловой системы) и продолжается на тот диск, который показывает
команда 'swap -l', например:
$ /usr/sbin/swap -l
swapfile dev swaplo blocks free
/dev/dsk/c0d1s1 102,65 8 1846648 1846648
$
Здесь у меня заведён раздел на диске под swap размером
1846648 * 512 = 945483776 (~945Мб)
Общий же размер swapfs (виртуальной памяти) у меня равен ~1245Mb (см.
available):
$ /usr/sbin/swap -s
total: 86732k bytes allocated + 85412k reserved = 172144k used, 1245768k available
$
и этот объём у меня складывается из 640Мб ОЗУ плюс 945Мб swap на диске
минус память под ядро, выполняемые программы и кеш файловой системы:
$ /usr/sbin/prtconf | grep Memory
Memory size: 640 Megabytes
$
1245Mb ~= (640Мб + 945Мб) - x
x = 340Мб (память под ядро, выполняемые программы и кеш файловой системы).
------------------
Другое дело, если Вы будете использовать для ввода/вывода обычный диск.
Откройте три окна и запустите в них:
iostat -x -M -T d cmdk1 5 | nawk '/^Mon/{printf("%s: ",$4);next}/^cmdk1/{print}'
- замените cmdk1 на используемый у Вас контроллер, их список можно
посмотреть по команде 'iostat -x', Mon - день недели - укажите правильно.
vmstat 5
- этой командой Вы будете контролировать своппинг. И в третьем окне
date; time dd if=/dev/zero of=/d1/test bs=8192k count=512; date
а затем:
date; time dd if=/d1/test of=/dev/null bs=8192k count=512; date
(замените /d1/test на путь к файлу, находящемуся на реальном диске,
а не в /tmp).
Получите:
Запись:
-------
# sync; sync; sync
# date; time dd if=/dev/zero of=/d1/test bs=8192k count=512; date
Пнд 09 Май 2005 09:53:44
512+0 records in
512+0 records out
real 3:14.6
user 0.0
sys 2:02.0
Пнд 09 Май 2005 09:56:59
Чтение:
-------
# date; time dd if=/d1/test of=/dev/null bs=8192k count=512; date
Пнд 09 Май 2005 09:57:24
512+0 records in
512+0 records out
real 2:37.8
user 0.0
sys 1:02.1
Пнд 09 Май 2005 10:00:02
#
$ iostat -x -M -T d cmdk1 5 | nawk '/^Mon/{printf("%s: ",$4);next}/^cmdk1/{print}'
device r/s w/s Mr/s Mw/s wait actv svc_t %w %b
09:53:24: cmdk1 47.2 7.3 0.3 0.0 3.9 0.4 80.2 8 28
09:53:29: cmdk1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
09:53:34: cmdk1 0.0 0.2 0.0 0.0 0.0 0.0 0.4 0 0
09:53:39: cmdk1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
09:53:44: cmdk1 0.0 0.2 0.0 0.0 0.0 0.0 0.3 0 0
09:53:49: cmdk1 0.6 370.0 0.0 20.0 25.6 1.7 73.8 86 88
09:53:54: cmdk1 0.0 401.6 0.0 21.4 35.5 2.0 93.3 99 100
09:53:59: cmdk1 0.0 388.4 0.0 21.1 35.0 2.0 95.3 99 100
09:54:04: cmdk1 0.0 404.8 0.0 22.0 33.3 2.0 87.2 99 100
09:54:09: cmdk1 0.0 390.4 0.0 21.2 33.2 2.0 90.3 99 100
09:54:14: cmdk1 0.0 377.4 0.0 20.5 35.9 2.0 100.5 99 100
09:54:19: cmdk1 0.0 369.9 0.0 20.0 37.6 2.0 107.0 99 100
09:54:24: cmdk1 0.0 361.7 0.0 18.9 36.5 2.0 106.4 99 100
09:54:29: cmdk1 0.0 399.4 0.0 21.6 34.9 2.0 92.4 99 100
09:54:34: cmdk1 0.0 400.0 0.0 21.6 34.7 2.0 91.7 99 100
09:54:39: cmdk1 0.0 401.7 0.0 21.8 32.0 2.0 84.6 99 100
09:54:44: cmdk1 0.0 396.2 0.0 21.6 32.7 2.0 87.5 99 100
09:54:49: cmdk1 0.2 409.3 0.0 22.2 32.0 2.0 83.1 99 100
09:54:54: cmdk1 0.0 348.2 0.0 18.1 38.1 2.0 115.2 99 100
09:54:59: cmdk1 0.2 378.0 0.0 20.5 35.0 2.0 97.8 99 100
09:55:04: cmdk1 0.0 396.6 0.0 21.5 32.8 2.0 87.7 99 100
09:55:09: cmdk1 0.2 378.3 0.0 20.5 36.1 2.0 100.8 99 100
09:55:14: cmdk1 0.6 394.4 0.0 21.4 30.5 2.0 82.2 99 100
09:55:19: cmdk1 0.0 426.0 0.0 23.1 26.5 2.0 66.9 99 100
09:55:24: cmdk1 1.6 353.5 0.0 18.2 36.1 2.0 107.4 98 100
09:55:29: cmdk1 3.8 383.0 0.0 20.6 39.2 2.0 106.6 100 100
09:55:34: cmdk1 1.6 390.9 0.0 20.7 40.4 2.0 108.0 99 100
09:55:39: cmdk1 0.0 401.3 0.0 21.5 34.3 2.0 90.5 99 100
09:55:44: cmdk1 0.2 404.7 0.0 21.7 31.8 2.0 83.3 98 99
09:55:49: cmdk1 0.0 406.4 0.0 22.1 29.1 2.0 76.6 99 100
09:55:54: cmdk1 0.2 360.6 0.0 18.7 36.0 2.0 105.3 99 100
09:55:59: cmdk1 0.4 393.8 0.0 21.4 33.8 2.0 90.7 99 100
09:56:04: cmdk1 0.0 379.2 0.0 20.1 38.6 2.0 107.2 99 100
09:56:09: cmdk1 0.0 391.4 0.0 21.1 34.6 2.0 93.6 99 100
09:56:14: cmdk1 0.0 402.6 0.0 21.9 29.4 2.0 78.1 99 100
09:56:19: cmdk1 0.2 377.1 0.0 20.4 33.5 2.0 94.0 99 100
09:56:24: cmdk1 0.0 386.7 0.0 20.4 29.0 2.0 80.1 99 100
09:56:29: cmdk1 0.2 400.3 0.0 21.6 31.3 2.0 83.2 99 100
09:56:34: cmdk1 0.0 400.5 0.0 21.8 31.6 2.0 83.8 99 100
09:56:39: cmdk1 0.0 406.9 0.0 21.9 29.9 2.0 78.4 99 100
09:56:44: cmdk1 0.0 409.5 0.0 21.8 33.4 2.0 86.4 99 100
09:56:49: cmdk1 0.2 408.2 0.0 22.1 31.3 2.0 81.5 98 100
09:56:54: cmdk1 0.0 386.1 0.0 19.9 33.4 2.0 91.6 99 100
09:56:59: cmdk1 0.2 405.2 0.0 22.0 30.0 2.0 78.8 99 100
09:57:04: cmdk1 1.9 17.6 0.0 0.7 1.9 0.1 102.1 5 6
09:57:09: cmdk1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
09:57:14: cmdk1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
09:57:19: cmdk1 0.0 7.0 0.0 0.1 0.0 0.0 5.3 0 0
09:57:24: cmdk1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
09:57:29: cmdk1 412.2 0.0 22.4 0.0 0.0 1.5 3.6 2 92
09:57:34: cmdk1 453.8 0.0 24.7 0.0 0.0 1.6 3.6 2 100
09:57:39: cmdk1 448.8 0.0 24.5 0.0 0.0 1.6 3.6 2 100
09:57:44: cmdk1 512.8 0.0 21.8 0.0 0.1 1.7 3.4 7 100
09:57:49: cmdk1 469.6 0.2 23.7 0.0 0.1 1.6 3.6 5 100
09:57:54: cmdk1 430.2 3.0 23.4 0.0 0.0 1.6 3.8 2 100
09:57:59: cmdk1 454.9 0.0 24.8 0.0 0.0 1.6 3.6 2 100
09:58:04: cmdk1 441.0 0.0 24.0 0.0 0.0 1.6 3.7 2 100
09:58:09: cmdk1 450.4 0.0 24.5 0.0 0.0 1.6 3.7 2 100
09:58:14: cmdk1 450.1 0.0 24.6 0.0 0.0 1.6 3.7 2 100
09:58:19: cmdk1 447.6 0.2 24.4 0.0 0.0 1.6 3.7 2 100
09:58:24: cmdk1 444.8 0.0 24.2 0.0 0.0 1.6 3.7 2 100
09:58:29: cmdk1 447.0 0.0 24.4 0.0 0.0 1.6 3.7 2 100
09:58:34: cmdk1 446.2 0.0 24.4 0.0 0.0 1.6 3.7 2 100
09:58:39: cmdk1 449.6 0.0 24.5 0.0 0.0 1.6 3.7 2 100
09:58:44: cmdk1 438.3 0.0 23.9 0.0 0.0 1.6 3.8 2 100
09:58:49: cmdk1 455.8 0.6 24.9 0.0 0.0 1.6 3.6 2 100
09:58:54: cmdk1 441.8 0.0 23.8 0.0 0.1 1.6 3.9 5 100
09:58:59: cmdk1 452.0 0.0 24.2 0.0 0.1 1.6 3.7 5 100
09:59:04: cmdk1 431.3 0.0 23.3 0.0 0.1 1.6 4.0 3 99
09:59:09: cmdk1 440.0 0.0 23.8 0.0 0.1 1.6 3.8 4 100
09:59:14: cmdk1 439.0 0.0 23.9 0.0 0.0 1.6 3.8 2 100
09:59:19: cmdk1 454.4 0.0 24.8 0.0 0.0 1.6 3.6 2 100
09:59:24: cmdk1 436.6 0.0 23.6 0.0 0.1 1.6 3.9 3 100
09:59:29: cmdk1 455.4 0.0 24.5 0.0 0.1 1.6 3.7 4 100
09:59:34: cmdk1 453.9 0.0 24.8 0.0 0.0 1.6 3.6 2 100
09:59:39: cmdk1 457.1 0.0 24.9 0.0 0.0 1.6 3.6 3 100
09:59:44: cmdk1 447.0 0.0 24.4 0.0 0.0 1.6 3.7 2 100
09:59:49: cmdk1 454.4 0.0 24.6 0.0 0.0 1.6 3.6 3 100
09:59:54: cmdk1 492.3 0.0 20.6 0.0 0.1 1.5 3.2 5 92
09:59:59: cmdk1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
10:00:04: cmdk1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
10:00:09: cmdk1 0.4 0.0 0.0 0.0 0.0 0.0 16.0 0 1
^C$
Смотрите колонки 'Mr/s' и 'Mw/s' для скорости чтения/записи на диск
в мегабайтах в секунду.
Видно, что скорость записи ~20.56Мб/сек, а скорость чтения ~23.43Mb,
на 14% больше. Это примерно соответствует изменению длительности
программы:
2:37.8 = 157.8сек
157.8сек + 14% = 157.8 + 22.09 = 179.89сек ~= 3мин
В этом случае никаких парадоксов не наблюдается.
Вообще говоря в Солярис каталог /tmp надо использовать очень осторожно:
не допускать его заполнения. Хотя доступ к файлам в этом каталоге
наиболее быстр, сильное заполнение этого каталога может привести к
своппингу и существенной деградации в работе системы.
Для возможность достижения наивысшей производительности следите, чтобы
во время работы в столбцах blocks и free, вывода команды 'swap -l',
были одинаковые значения. Если они по ходу работы становятся не
одинаковыми, то, скорее всего, надо прикупить ОЗУ.
Виталий Филатов
http://members.tripod.com/Vitaly_Filatov
Dmitry Budanov сообщил:
> Добpый день All!
>
> bash-2.05# time dd if=/dev/zero of=/tmp/test bs=8192k count=512
> 512+0 records in
> 512+0 records out
>
> real 2m9.675s
> user 0m0.000s
> sys 0m20.230s
> bash-2.05# time dd if=/tmp/test of=/dev/null bs=8192k count=512
> 512+0 records in
> 512+0 records out
>
> real 4m12.803s
> user 0m0.000s
> sys 0m19.930s
>
> Почему скоpость записи на зеpкало в 2 pаза выше скоpости чтения?
>
> PS. В кэш файлик не поместится.
>
> Пока, Dmitry.
--- ifmail v.2.15dev5.3
* Origin: MTU-Intel ISP (2:5020/400)
SEEN-BY: 46/50 50/203 520 450/159 186 247 1024 451/30 461/640 469/999 4625/8
SEEN-BY: 4627/10 5000/76 5000 5006/1 5007/1 5010/70 5011/13 5015/10 5020/52
SEEN-BY: 5020/118 175 194 400 545 715 758 902 937 1042 1523 1604 1922 2020
SEEN-BY: 5020/2238 4441 5021/29 5022/128 5025/3 750 5026/45 5027/16 5030/49
SEEN-BY: 5030/115 556 966 1900 1957 5031/72 5035/3 38 5036/1 5051/15 5054/1 4
SEEN-BY: 5054/8 9 28 35 37 5057/1 5060/88 5061/15 5062/1 10 5066/18 5067/2
SEEN-BY: 5069/7 5070/1222 5074/9 5075/5 35 5080/80 1003 5081/2 5082/6 5083/21
SEEN-BY: 5085/13 5090/113 5093/57 5095/20 5096/18 6000/254 6001/3
PATH: 5020/400 4441 545 5054/1 37