Похоже, уже нашёл ответ... :-) https://perl5.git.perl.org/perl.git/commit/78462dd3f2a26a5a5f9ec040277bad147e6c5d52
Разрабы специально добавили в цикл какую-то работу, чтобы user time менялся быстрее. Но у меня perl более старый. чт, 21 февр. 2019 г. в 18:34, Ilya Chesnokov <[email protected]>: > > Всем привет. > > Недавно заметил, что на моей виртуальной машине с FreeBSD > 10.4-RELEASE-p13, работающей под VirtualBox, запущенным под Linux > (4.18.0-15-generic #16-Ubuntu SMP), творятся странные вещи. > > Любой код, использующий модуль Benchmark (в том числе тесты для > некоторых CPAN-модулей, например DBIx::Class, Devel::NYTProf) на 100% > загружают CPU и вообще выполняется очень долго. После некоторого > исследования обнаружилось, что причиной тому - вот эта вот строчка: > https://metacpan.org/source/SHAY/perl-5.28.1/lib/Benchmark.pm#L718 > Т.е., Benchmark ждет, пока изменится user time, и только после этого > продолжает работать. > > Почему-то на моей виртуалке такая вот "пустая" операция, какой > является Benchmark->new() занимает очень мало user time и очень много > system time. При этом на хост-системе они приблизительно равны или > user time даже больше. Для определения этого я написал вот такой > однострочник: > > time perl -E '$|++; $SIG{ALRM} = sub { die "alarm\n"; }; alarm 1; say > join " ", times while 1' > > На виртуалке последняя строчка примерно такая: 0.015625 0.9921875 0 0 > На хост-машине такая: 0.62 0.38 0 0 > > Т.е. видно, что на виртуалке для пустого цикла user time почти не > меняется, что приводит к долгому прогону цикла в модуле Benchmark. > > Есть идеи, почему это так, и как это исправить? > > -- > Best regards, > Ilya Chesnokov -- Best regards, Ilya Chesnokov -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
