[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Анонс: легковесная система полнотекстового поиска



On 04.02.2010 22:25, Alexander Galanin wrote:
> On Thu, 4 Feb 2010 22:17:31 +0300
> Alexey Pechnikov <pechnikov@mobigroup.ru> wrote:
> 
>> Итого с exec почти вдвое медленнее.
>>
>> cpu cores	: 2
> ^^^^^^^^^^^^^^^^^^^ --- наверно, тут собака зарыта
> 
> Потому как я на однопроцессорных машинах проверял и exec закономерно
> выигрывал.
Нет, на двухядерной машине у меня результаты точно такие же, как у тебя:
[etch, кустарное 2.6.27, bash 3.1.17, amd x2 4850e]
$ /usr/bin/time sh -c "seq 1000 | xargs -n 1 ./x-fork"
0.72user 1.03system 0:01.85elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+579973minor)pagefaults 0swaps
$ /usr/bin/time sh -c "seq 1000 | xargs -n 1 ./x-exec"
0.72user 0.85system 0:01.60elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+492973minor)pagefaults 0swaps
$ cat /proc/cpuinfo|grep processor
processor	: 0
processor	: 1
user time тут, ясен пень, ничего значащего не показывает, смотреть надо на
system, elapsed и pagefaults. Как и ожидалось, в варианте с exec они заметно
меньше (хотя и не в разы) [btw, а вот в недопозиксе, типа цигвина, они могут
быть не то что в разы, а и вовсе в порядки].

Подозреваю, что тут скорее другое играет роль:
AP> model name	: Intel(R) Core(TM)2 Duo CPU     T5470  @ 1.60GHz
AP> cpu MHz		: 800.000
что-то мне говорит, что cpufreq тут включён, и частота плавает.
И вот это:
AP> 0.76user 1.93system 0:02.70elapsed 99%CPU [...]
    ^^^^^^^^
AP> 0.34user 1.18system 0:01.68elapsed 91%CPU [...]
    ^^^^^^^^
... прекрасно под это объяснение попадает: user time что с exec, что без него
должен быть примерно одинаковый (накладные расходы от лишнего fork уходят в
system time и всякие задержки->elapsed).
Перед такими тестами не помешает cpufreq-set -g performance (или, наоборот,
powersave). В противном случае есть шансы посравнивать тёплое с мягким.
Вообще в этом тесте многопроцессорность в лучшем случае играть никак не должна,
в худшем - мешать.
Эмулируем однопроцессорность:
$ taskset 01 /usr/bin/time sh -c "seq 1000 | xargs -n 1 ./x-fork /dev/null"
0.72user 1.09system 0:01.82elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+579973minor)pagefaults 0swaps
$ taskset 01 /usr/bin/time sh -c "seq 1000 | xargs -n 1 ./x-exec /dev/null"
0.73user 0.84system 0:01.57elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+492973minor)pagefaults 0swaps
Как видим, результаты не отличаются (в пределах погрешности) от предыдущего
варианта.


Reply to: