Всем привет. Недавно заметил, что на моей виртуальной машине с 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 -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
