Re: Скорость чтения с диска < последовательно одним процессом> VS < параллельно несколькими>

2009-03-24 Пенетрантность Покотиленко Костик
В Вто, 24/03/2009 в 11:04 +0300, Alexey Pechnikov пишет:
> Hello!
> 
> On Monday 23 March 2009 21:12:32 Покотиленко Костик wrote:
> > Для меня остаётся 2 загадки, почему при использовании 2х ядер такой
> > маленький прирост 22.3% скорости, почему при 4х потоках на 2х ядрах
> > скорость всё ещё увеличивается.
> 
> Судя по приведенным цифрам, вы файлы только считываете и результат никуда не 
> передаете. Стоит хотя бы в stdout из дочерних потоков выводить, а из 
> родительского забирать. Ситуация с чтением без обработки и вывода данных 
> весьма неестественна.

Согласен, но меня на данном этапе интересует именно скорость чтения в
разных ситуациях.

-- 
Покотиленко Костик 


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Re: Скорость чтения с диска < последовательно одним процессом> VS < параллельно несколькими>

2009-03-24 Пенетрантность Alexey Pechnikov
Hello!

On Monday 23 March 2009 21:12:32 Покотиленко Костик wrote:
> Для меня остаётся 2 загадки, почему при использовании 2х ядер такой
> маленький прирост 22.3% скорости, почему при 4х потоках на 2х ядрах
> скорость всё ещё увеличивается.

Судя по приведенным цифрам, вы файлы только считываете и результат никуда не 
передаете. Стоит хотя бы в stdout из дочерних потоков выводить, а из 
родительского забирать. Ситуация с чтением без обработки и вывода данных 
весьма неестественна.

Best regards.


Re: Скорость чтения с диска < последовательно одним процессом> VS < параллельно несколькими>

2009-03-23 Пенетрантность Покотиленко Костик
В Пнд, 23/03/2009 в 20:12 +0200, Покотиленко Костик пишет:
> Проверяем чтение с использованием кэша (прокэшировано ~100%) на моем
> каталоге /lib/modules:
> 
> # du -sh /lib/modules
> 365M/lib/modules
> 
> Погонял несколько предварительный тестов пока прокэшировалось и скорость 
> стало показывать стабильно.
> 
> Проверяем для одного потока:
> > ./simreadtest /lib/modules -n 1
> ...
> CHILD00: printing results:
> files: 12890
> bytes: 340750735
> speed: 1893669821 bytes/sec
> time usecs: 179942
> ...
> 
> Получаем скорость: 1806Мб/с, время: 0.179942с
> 
> 
> Проверяем для двух потоков:
> > ./simreadtest /lib/modules -n 2
> ...
> CHILD01: printing results:
> files: 6445
> bytes: 163305639
> speed: 1485055735 bytes/sec
> time usecs: 109966
> ...
> CHILD00: printing results:
> files: 6445
> bytes: 177445096
> speed: 1206182295 bytes/sec
> time usecs: 147113
> ...
> 
> Получаем суммарную скорость: 2209Мб/с, время: 0.147113с
> 
> Итого: на моей машине 2 ядра, при использовании 2х потоков общая скорость 
> увеличилась на (2209-1806)/1806=22.3%, скорость на ядро уменьшилась на 
> (1806-2209/2)/1806=38.8%
> 
> 
> Проверяем для четырёх потоков:
> > ./simreadtest /lib/modules -n 4
> ...
> CHILD04: printing results:
> files: 2
> bytes: 1460
> speed: 42941176 bytes/sec
> time usecs: 34
> ...
> CHILD03: printing results:
> files: 3222
> bytes: 85661152
> speed: 921097560 bytes/sec
> time usecs: 92999
> ...
> CHILD02: printing results:
> files: 3222
> bytes: 77683236
> speed: 924283270 bytes/sec
> time usecs: 84047
> ...
> CHILD00: printing results:
> files: 3222
> bytes: 95082054
> speed: 1469288303 bytes/sec
> time usecs: 64713
> ...
> CHILD01: printing results:
> files: 3222
> bytes: 82322833
> speed: 704312249 bytes/sec
> time usecs: 116884
> ...
> 
> Получаем суммарную скорость: 2780Мб/с, время: 0.116884с
> 
> Итого: на моей машине 2 ядра, при использовании 4х(5ти) потоков общая 
> скорость увеличилась на (2780-1806)/1806=53.9%, скорость на ядро уменьшилась 
> на (1806-2780/4)/1806=61.5% относительно одного потока.
> 
> Вывод: При ~100% эффективности кэша скорость чтения растёт с увеличением 
> количества потоков даже превышающих количество реальных ядер, но растёт 
> сильно не линейно.
> 
> 
> В Пнд, 23/03/2009 в 18:21 +0300, Alexey Pechnikov пишет:
> > Hello!
> > 
> > On Monday 23 March 2009 12:03:05 Покотиленко Костик wrote:
> > > > http://meteor.dp.ua/reference/simreadtest/simreadtest-0.1.tar.gz
> > > > http://meteor.dp.ua/reference/simreadtest/simreadtest-19.03.2009-01.ods
> > > > http://meteor.dp.ua/reference/simreadtest/simreadtest-19.03.2009-01.pdf
> > >
> > > По ходу дела хочу отметить тот факт, что в этой рассылке процветает
> > > демагогия, а когда дело доходит до дела...
> > 
> > А где у вас дело? Есть стандартные паттерны использования диска, вы их даже 
> > не 
> > смотрели. 
> 
> Гляну позже. Если дашь ссылку, буду благодарен.
> 
> > Средняя скорость чтения в 13 Мб/с это полная ерунда. Реально 
> > получается в разы быстрее.
> 
> Для небольших непрокэшированных файлов это как раз та скорость. На
> больших она приближается к скорости линейного чтения, той, что hdparm -t
> показывает.
> 
> >  Почему - я отписался в предыдущем письме. Вы же, 
> > вместо того чтобы проверить, абсолютно ошибочно заявляете, что кэш не 
> > влияет 
> > на многопоточное чтение (хотя его в основном для многопоточного чтения и 
> > сделали).
> 
> Что-то не помню чтобы я такое заявлял. Я говорил, что в тех тестах,
> которые я делал, кэш оказался не эффективен. Напомню, что файлы читались
> последовательно, каждый один раз. Суммарный объём в несколько раз больше
> кэша, поэтому он был не эффективен.
> 
> Напомню ещё, что изначально в этой теме речь шла о чтении с диска, может
> я зря не дописал, но имелось в виду именно с диска, без кэша ФС.
> 
> И, получается, да, я был не прав считая, что увеличение количества потоков
> не увеличит скорость чтения при 100%-ой эффективности кэша.


> Для меня остаётся 2 загадки, почему при использовании 2х ядер такой маленький 
> прирост 22.3% скорости, почему при 4х потоках на 2х ядрах скорость всё ещё 
> увеличивается.

Кажется я их разгадал, для упрощения я не привёл времена стартов клонов,
вот они:

...
CHILD04: printing results:
start time: 123782.955115
end time: 123782.955149
...

...
CHILD03: printing results:
start time: 123782.955312
end time: 123783.48311
...

...
CHILD02: printing results:
start time: 123782.979149
end time: 123783.63196
...

...
CHILD00: printing results:
start time: 123783.48590
end time: 123783.113303
...

...
CHILD01: printing results:
start time: 123783.4289
end time: 123783.121173
...

Очевидно, что клоны работали не совсем одновременно. При таких
скоростях/объёмах это не правильный подход. Кэша/памяти у меня больше
нет, поэтому, эти выводы можно считать не действительными, а я сделаю
синхронизацию запуска и перемеряю потом.

P.S. в start|end time после точки стоит время в микросекундах, там
пропущены предшествующие 

Re: Скорость чтения с диска < последовательно одним процессом> VS < параллельно несколькими>

2009-03-23 Пенетрантность Покотиленко Костик
Проверяем чтение с использованием кэша (прокэшировано ~100%) на моем
каталоге /lib/modules:

# du -sh /lib/modules
365M/lib/modules

Погонял несколько предварительный тестов пока прокэшировалось и скорость стало 
показывать стабильно.

Проверяем для одного потока:
> ./simreadtest /lib/modules -n 1
...
CHILD00: printing results:
files: 12890
bytes: 340750735
speed: 1893669821 bytes/sec
time usecs: 179942
...

Получаем скорость: 1806Мб/с, время: 0.179942с


Проверяем для двух потоков:
> ./simreadtest /lib/modules -n 2
...
CHILD01: printing results:
files: 6445
bytes: 163305639
speed: 1485055735 bytes/sec
time usecs: 109966
...
CHILD00: printing results:
files: 6445
bytes: 177445096
speed: 1206182295 bytes/sec
time usecs: 147113
...

Получаем суммарную скорость: 2209Мб/с, время: 0.147113с

Итого: на моей машине 2 ядра, при использовании 2х потоков общая скорость 
увеличилась на (2209-1806)/1806=22.3%, скорость на ядро уменьшилась на 
(1806-2209/2)/1806=38.8%


Проверяем для четырёх потоков:
> ./simreadtest /lib/modules -n 4
...
CHILD04: printing results:
files: 2
bytes: 1460
speed: 42941176 bytes/sec
time usecs: 34
...
CHILD03: printing results:
files: 3222
bytes: 85661152
speed: 921097560 bytes/sec
time usecs: 92999
...
CHILD02: printing results:
files: 3222
bytes: 77683236
speed: 924283270 bytes/sec
time usecs: 84047
...
CHILD00: printing results:
files: 3222
bytes: 95082054
speed: 1469288303 bytes/sec
time usecs: 64713
...
CHILD01: printing results:
files: 3222
bytes: 82322833
speed: 704312249 bytes/sec
time usecs: 116884
...

Получаем суммарную скорость: 2780Мб/с, время: 0.116884с

Итого: на моей машине 2 ядра, при использовании 4х(5ти) потоков общая скорость 
увеличилась на (2780-1806)/1806=53.9%, скорость на ядро уменьшилась на 
(1806-2780/4)/1806=61.5% относительно одного потока.

Вывод: При ~100% эффективности кэша скорость чтения растёт с увеличением 
количества потоков даже превышающих количество реальных ядер, но растёт сильно 
не линейно.


В Пнд, 23/03/2009 в 18:21 +0300, Alexey Pechnikov пишет:
> Hello!
> 
> On Monday 23 March 2009 12:03:05 Покотиленко Костик wrote:
> > > http://meteor.dp.ua/reference/simreadtest/simreadtest-0.1.tar.gz
> > > http://meteor.dp.ua/reference/simreadtest/simreadtest-19.03.2009-01.ods
> > > http://meteor.dp.ua/reference/simreadtest/simreadtest-19.03.2009-01.pdf
> >
> > По ходу дела хочу отметить тот факт, что в этой рассылке процветает
> > демагогия, а когда дело доходит до дела...
> 
> А где у вас дело? Есть стандартные паттерны использования диска, вы их даже 
> не 
> смотрели. 

Гляну позже. Если дашь ссылку, буду благодарен.

> Средняя скорость чтения в 13 Мб/с это полная ерунда. Реально 
> получается в разы быстрее.

Для небольших непрокэшированных файлов это как раз та скорость. На
больших она приближается к скорости линейного чтения, той, что hdparm -t
показывает.

>  Почему - я отписался в предыдущем письме. Вы же, 
> вместо того чтобы проверить, абсолютно ошибочно заявляете, что кэш не влияет 
> на многопоточное чтение (хотя его в основном для многопоточного чтения и 
> сделали).

Что-то не помню чтобы я такое заявлял. Я говорил, что в тех тестах,
которые я делал, кэш оказался не эффективен. Напомню, что файлы читались
последовательно, каждый один раз. Суммарный объём в несколько раз больше
кэша, поэтому он был не эффективен.

Напомню ещё, что изначально в этой теме речь шла о чтении с диска, может
я зря не дописал, но имелось в виду именно с диска, без кэша ФС.

И, получается, да, я был не прав считая, что увеличение количества потоков
не увеличит скорость чтения при 100%-ой эффективности кэша.

Для меня остаётся 2 загадки, почему при использовании 2х ядер такой маленький 
прирост 22.3% скорости, почему при 4х потоках на 2х ядрах скорость всё ещё 
увеличивается.

-- 
Покотиленко Костик 


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Re: Скорость чтения с диска < последовательно одним процессом> VS < параллельно несколькими>

2009-03-23 Пенетрантность Alexey Pechnikov
Hello!

On Monday 23 March 2009 12:03:05 Покотиленко Костик wrote:
> > http://meteor.dp.ua/reference/simreadtest/simreadtest-0.1.tar.gz
> > http://meteor.dp.ua/reference/simreadtest/simreadtest-19.03.2009-01.ods
> > http://meteor.dp.ua/reference/simreadtest/simreadtest-19.03.2009-01.pdf
>
> По ходу дела хочу отметить тот факт, что в этой рассылке процветает
> демагогия, а когда дело доходит до дела...

А где у вас дело? Есть стандартные паттерны использования диска, вы их даже не 
смотрели. Средняя скорость чтения в 13 Мб/с это полная ерунда. Реально 
получается в разы быстрее. Почему - я отписался в предыдущем письме. Вы же, 
вместо того чтобы проверить, абсолютно ошибочно заявляете, что кэш не влияет 
на многопоточное чтение (хотя его в основном для многопоточного чтения и 
сделали).

Best regards.


Re: Скорость чтения с диска < последовательно одним процессом> VS < параллельно несколькими>

2009-03-23 Пенетрантность Покотиленко Костик
В Суб, 21/03/2009 в 17:04 +0300, Alexey Pechnikov пишет:
> Hello!
> 
> On Friday 20 March 2009 13:02:27 Покотиленко Костик wrote:
> > О тесте: программа рекурсивно сканирует указанный каталог и составляет
> > список обычных файлов, затем делит этот список на N частей. Далее
> > программа создаёт N клонов с помощью fork(), каждый из которых читает
> > файлы из своей части списка. По окончанию работы каждого клона выводится
> > его статистика.
> 
> Необходимо оценить средний размер файла. Пусть это будет 8 кБ согласно 
> паттерну работы с БД. Примечание: если реальные файлы больше, но запросов 
> много, то с диска они все равно будут читаться блоками, кратно 4 кБ (по 
> дефолту для ext3).
> 
> 1. Необходимо обращаться к рандомному файлу. Каждый поток должен работать с 
> полным списком, случайным образом выбирая файл для чтения. Примечание: если 
> вы 
> посмотрите паттерны доступа от интел, то увидите, что для моделирования 
> работы 
> с БД и файлсервера предполагается именно 100% рандомный доступ (в первом 
> приближении стоит начинать именно с этого варианта). Учет этого фактора 
> незначительно ускорит многопоточное чтение.
> 
> 2. Необходимо учесть "популярность" файлов - большинство обращений происходит 
> к одним и тем же файлам. Используйте гауссово распределение. Учет этого 
> фактора значительно оптимизирует работу файлового кэша и многократно ускорит 
> многопоточное чтение (в зависимости от параметров распределения). Это будет 
> второе приближение. 

В случаях, когда кэш эффективен нет разницы параллельно читать или
последовательно.

-- 
Покотиленко Костик 


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Re: Скорость чтения с диска < последовательно одним процессом> VS < параллельно несколькими>

2009-03-21 Пенетрантность Alexey Pechnikov
Hello!

On Friday 20 March 2009 13:02:27 Покотиленко Костик wrote:
> О тесте: программа рекурсивно сканирует указанный каталог и составляет
> список обычных файлов, затем делит этот список на N частей. Далее
> программа создаёт N клонов с помощью fork(), каждый из которых читает
> файлы из своей части списка. По окончанию работы каждого клона выводится
> его статистика.

Необходимо оценить средний размер файла. Пусть это будет 8 кБ согласно 
паттерну работы с БД. Примечание: если реальные файлы больше, но запросов 
много, то с диска они все равно будут читаться блоками, кратно 4 кБ (по 
дефолту для ext3).

1. Необходимо обращаться к рандомному файлу. Каждый поток должен работать с 
полным списком, случайным образом выбирая файл для чтения. Примечание: если вы 
посмотрите паттерны доступа от интел, то увидите, что для моделирования работы 
с БД и файлсервера предполагается именно 100% рандомный доступ (в первом 
приближении стоит начинать именно с этого варианта). Учет этого фактора 
незначительно ускорит многопоточное чтение.

2. Необходимо учесть "популярность" файлов - большинство обращений происходит 
к одним и тем же файлам. Используйте гауссово распределение. Учет этого 
фактора значительно оптимизирует работу файлового кэша и многократно ускорит 
многопоточное чтение (в зависимости от параметров распределения). Это будет 
второе приближение. 

Best regards.