Функции Runnig OS с измененным приоритетом планирования в Perl - PullRequest
4 голосов
/ 19 декабря 2011

Возможно ли, чтобы Perl выполнял функцию ОС Linux с измененным приоритетом планирования и / или планирования ввода-вывода без внешних команд?Я пытаюсь смоделировать следующее:

nice -n19 ionice -c2 -n7 cp largefile largefile2

Можно ли как-то сделать это с помощью File :: Copy, функции setpriority и модуля CPAN Linux :: IO_Prio?Нужно ли мне просто уменьшить приоритет планирования до $ 0?

РЕДАКТИРОВАТЬ: Если я сделаю следующее, будет ли приоритет и IO понижены для copy ()?Есть ли лучший способ сделать это?

use Linux::IO_Prio qw(:all);
use File::Copy;

setpriority(0, 0, -20);
ionice(IOPRIO_WHO_PROCESS, $$, IOPRIO_CLASS_IDLE, 7);

copy("file1","file2") or die "Copy failed: $!";

Ответы [ 2 ]

1 голос
/ 19 декабря 2011

Уточнение Ответ Оесора :

use BSD::Resource qw(PRIO_PROCESS setpriority);
use Linux::IO_Prio qw(IOPRIO_WHO_PROCESS IOPRIO_PRIO_VALUE IOPRIO_CLASS_BE ioprio_set);
BEGIN { require autodie::hints; autodie::hints->set_hints_for(\&ioprio_set, { fail => sub { $_[0] == -1 } } ) };
use autodie qw(:all setpriority ioprio_set);

setpriority(
    PRIO_PROCESS,       # 1
    $$,
    19
);
ioprio_set(
    IOPRIO_WHO_PROCESS,                         # 1
    $$,
    IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, 7)       # 0x4007
);

Кстати, вы можете узнать вызов библиотеки и тому подобное с помощью strace.

1 голос
/ 19 декабря 2011

Вам, вероятно, лучше просто изменить приоритет текущего запущенного pid по мере необходимости.Конечно, не переносимо, но само по себе это не переносимо.Все, что выполняет подобные вещи, сводится к тому, что одна и та же библиотека вызывает внешние команды.

my $pid = $$;
`ionice -c2 -p$pid`;
`renice +19 $pid`;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...