У меня есть ubuntu server 14.04, и мне интересно, есть ли какой-нибудь простой способ решить эту задачу.
Например, я уже могу сделать это для отдельных процессов с помощью taskset -pac 2 29435
, но есть ли способ назначить его через имя пользователя вместо идентификатора процесса?
Заранее спасибо.
Ничего не делать. В самом деле, ничего не делай.
Если ваша цель здесь - максимально эффективно распределить ресурсы, правильнее всего оставить операционную систему для перемещения процессов на соответствующие процессоры по запросу и по мере необходимости.
В случае оптимизации производительности ограничение ресурсов процессора или его использования никогда не является хорошей идеей - вы только ухудшите производительность. Вы хотите ограничить только ресурсы ЦП или ЦП, которые можно использовать там, где вы находитесь. сознательно пытаясь нарушить этот процесс.
Времена, когда вы, возможно, захотите нанести вред процессу:
Итак - ничего не делайте и позвольте операционной системе разобраться. Через некоторое время, когда ваши экземпляры будут запущены (и если они действительно загружены ЦП), вы можете запустить команду ps -Lo psr,pid,tid $(pgrep <processname>)
и вы увидите, что каждый ресурс правильно распределяется по ЦП.
Если вы хотите определить, получает ли каждый процесс свою справедливую долю и сколько вы действительно используете в каждой программе, вы делаете следующее, заменяя имя процесса, и получаете следующие результаты:
$ ps -Lo psr,pid,tid,etime,cputime,comm $(pgrep firefox)
PSR PID TID ELAPSED TIME COMMAND
2 3400 3400 1-07:16:10 01:22:29 firefox
2 3400 3425 1-07:16:10 00:00:00 gdbus
2 3400 3426 1-07:16:09 00:00:00 Gecko_IOThread
3 3400 3427 1-07:16:09 00:00:00 Link Monitor
1 3400 3428 1-07:16:09 00:02:50 Socket Thread
1 3400 3429 1-07:16:09 00:00:00 firefox
0 3400 3430 1-07:16:09 00:00:25 JS Helper
3 3400 3431 1-07:16:09 00:00:26 JS Helper
3 3400 3432 1-07:16:09 00:00:25 JS Helper
1 3400 3433 1-07:16:09 00:00:25 JS Helper
1 3400 3434 1-07:16:09 00:00:26 JS Helper
3 3400 3435 1-07:16:09 00:00:25 JS Helper
0 3400 3436 1-07:16:09 00:00:25 JS Helper
0 3400 3437 1-07:16:09 00:00:26 JS Helper
2 3400 3438 1-07:16:09 00:00:02 JS Watchdog
2 3400 3439 1-07:16:09 00:00:00 Hang Monitor
1 3400 3440 1-07:16:09 00:00:00 BgHangManager
3 3400 3441 1-07:16:09 00:00:32 Cache2 I/O
0 3400 3442 1-07:16:09 00:02:41 Timer
3 3400 3444 1-07:16:09 00:00:00 GMPThread
2 3400 3447 1-07:16:09 00:07:24 Compositor
0 3400 3448 1-07:16:09 00:01:08 ImageBridgeChil
3 3400 3449 1-07:16:09 00:00:31 ImgDecoder #1
1 3400 3450 1-07:16:09 00:00:32 ImgDecoder #2
3 3400 3451 1-07:16:09 00:00:31 ImgDecoder #3
2 3400 3452 1-07:16:09 00:00:00 ImageIO
2 3400 3453 1-07:16:09 00:04:07 SoftwareVsyncTh
0 3400 3454 1-07:16:08 00:00:00 firefox
2 3400 3455 1-07:16:08 00:00:00 Cert Verify
2 3400 3456 1-07:16:08 00:00:00 IPDL Background
0 3400 3457 1-07:16:08 00:00:37 DOM Worker
2 3400 3458 1-07:16:08 00:00:03 HTML5 Parser
2 3400 3462 1-07:16:07 00:00:01 mozStorage #1
1 3400 3463 1-07:16:07 00:00:00 Proxy R~olution
1 3400 3464 1-07:16:07 00:00:49 URL Classifier
2 3400 3466 1-07:16:07 00:00:02 mozStorage #2
0 3400 3467 1-07:16:07 00:00:00 gmain
3 3400 3468 1-07:16:07 00:00:00 Cache I/O
3 3400 3471 1-07:16:07 00:00:00 mozStorage #3
2 3400 3477 1-07:16:07 00:00:35 DOM Worker
2 3400 3479 1-07:16:07 00:00:00 mozStorage #4
0 3400 3482 1-07:16:07 00:00:00 localStorage DB
2 3400 3483 1-07:16:07 00:00:03 mozStorage #5
1 3400 3519 1-07:15:57 00:00:00 mozStorage #6
2 3400 3537 1-07:14:09 00:00:31 DOM Worker
0 3400 3562 1-07:08:35 00:00:00 mozStorage #7
0 3400 3587 1-06:59:39 00:00:00 threaded-ml
2 3400 3597 1-06:49:40 00:00:00 mozStorage #8
2 3400 7594 1-01:36:55 00:00:34 threaded-ml
3 3400 11679 10:48:07 00:00:00 firefox
2 3400 11684 10:48:07 00:00:00 typefind:sink
2 3400 11687 10:48:07 00:00:00 typefind:sink
1 3400 11689 10:48:07 00:00:00 typefind:sink
0 3400 11690 10:48:07 00:00:00 mpegaudioparse0
1 3400 11691 10:48:07 00:00:00 mpegaudioparse1
2 3400 11692 10:48:07 00:00:00 mpegaudioparse2
0 3400 11693 10:48:07 00:00:00 aqueue:src
1 3400 11694 10:48:07 00:00:00 aqueue:src
1 3400 11695 10:48:07 00:00:00 aqueue:src
2 3400 22770 05:38:46 00:00:00 firefox
3 3400 29803 10:17 00:00:00 DNS Res~er #226
3 3400 30018 01:28 00:00:00 DNS Res~er #228
В этом примере я использовал firefox на своем компьютере, но вы можете изменить имя процесса в соответствии со своими потребностями.
Здесь я запрашиваю каждый поток, который живет в процессе. Столбцы означают следующее:
Чтобы определить процент использования процессов за время их существования в процентах, вы можете выполнить следующий расчет (я использую firefox):
TIME / ELAPSED * 100 = UTIL
112570 / 4949 * 100 = 4.40
Заметка: Фактический идентификатор процесса (основной начальный поток, чей tid == pid) действует как `` контейнер '' для совокупной суммы всех потоков (существующих или больше не существующих) CPU-времени, поэтому дает вам достаточно точное описание всего процесса использование.
Чтобы объяснить, если время жизни процесса равно его времени процессора, это означает, что за все время, пока процесс когда-либо жил, он требовал и получал процессор для работы. Это равняется 100% использования процессора.
Я почти уверен, что на самом деле вы обнаружите, что ваши процессы почти не будут использовать процессор.
Итак, повторюсь, чтобы работать с максимальной эффективностью, ничего не делайте, поскольку ваше ядро знает, как лучше всего расставить приоритеты для ресурсов ЦП, чтобы наилучшим образом использовать вашу систему. Все, что вы могли бы добавить, в большинстве случаев снижение вашей общей эффективности.
Если вы не планируете каким-либо образом навредить процессам (и есть обстоятельства, при которых вы действительно можете намереваться это сделать), вы не хотите использовать taskset
, control groups
или LXC/Docker
чтобы получить максимальную производительность.