Як запустити програму лише з одним ядром процесора?


28

Я намагаюся запустити в Термінаторі купу сценаріїв, пов’язаних із ігровим сервером. Єдина проблема, коли я це роблю, Terminator виявляє всі мої процесорні ядра та відставання на ПК. Чи є який-небудь спосіб запустити його, але ввести його в думку, що у мене є лише 1 ядро ​​процесора?


2
Привіт, це здається, що ви можете страждати від проблеми xy тут, іноді варто озирнутися на те, чого ви хочете досягти, а не на спробу рішення, яке ви намагалися, оскільки здається, що вам потрібно запустити програму, не уповільнюючи свою ПК, а не просто для запуску чогось на одному ядрі. Тим не менш, це дуже гарне питання. +1
Vality

Відповіді:


44

Це не terminatorте, що робиться "розповсюдження" на весь процесор даного процесу. Сам Linux (ядро) робить це. Задача (процес) планується як доступна для запуску на всіх процесорах за замовчуванням; якщо він використовує потоки, він може використовувати більше одного процесора одночасно.

Щоб обмежити процес певним процесором, ви використовуєте команду taskset.

taskset --cpu-list 1,2 my_command 

Ця команда змушує my_command працювати лише на процесорах №1 або №2.

Щоб дізнатися більше, введіть man tasksetабо пошукайте "спорідненість linux CPU" (перший удар тут ).


2
До речі, ви також можете спробувати просто відновити «погані» процеси, знизивши їх пріоритет планування.
Маттео Італія

@MatteoItalia Я виявив, що Ubuntu 13.10 і 14.04 за замовчуванням ігнорує приємний рівень. Ви повинні додати, kernel.sched_autogroup_enabled = 0щоб /etc/sysctl.confвін працював. Однак я також виявив, що 13.10 часто підпадає під час завантаження ядра, якщо автогрупа відключена.
kasperd

Що щодо дочірніх процесів батьківського процесу? Чи успадковують вони спорідненість core / cpu батьківського процесу?
yildizabdullah

5

Хоча інша відповідь вже дала буквальну відповідь, я би вивчив можливість цього зробити не правильно. Натомість слід запустити сценарій, який не хочеться уповільнювати роботу комп'ютера (наприклад, неінтерактивні сценарії) за допомогою niceкоманди.

Для цього просто приставте команду, яку ви хочете виконати з приємною, наприклад: nice command_to_run Це призведе до того, що програма буде визначена без пріоритету нижче інших завдань і не сповільнить вашу машину. Я часто використовую цю техніку, коли роблю довгу компіляцію, яка в іншому випадку сповільнить мій ПК до сканування, це має перевагу в тому, що програма дозволяє використовувати всі ядра, коли машина не зайнята, але швидко зупинить її, коли ви запускаєте щось ще.


Якщо я використовую таку команду, як "приємний відкритий термінатор", термінатор буде працювати з усіма ядрами процесора незалежно?
user245115

О, і до речі, якщо я рухатиму мишку, і нічого не відкриється, вона буде використовувати всі процесори? І скільки часу пройде після того, як я перестану рухати мишкою, щоб використовувати всі процесори? І чи можу я використовувати це з набором завдань? (Так, я справжній ноб з Linux.)
user245115

@ user245115 Якщо ви користуєтеся приємною утилітою, можливо, термінатор буде використовувати декілька ядер CPU, однак він негайно припинить використовувати ці ядра, якщо інша програма (не працює з nice) захоче їх використовувати, так що ви не відчуєте уповільнення, проте це буде використовуйте їх, якщо вони в іншому випадку є абсолютно безкоштовними та невикористаними. На це не повинно впливати використання миші чи інша взаємодія з програмою.
Vality

@ user245115 Також слід мати можливість використовувати це з набором завдань, просто написавши, taskset nice open terminatorщоб використовувати обидва. Однак це буде зайвим, оскільки ви будете використовувати дві різні програми, щоб досягти ефекту зменшення використання ресурсів програми.
Vality

@ user245115 Щоразу, коли ви зробите будь-які інші дії (наприклад, переміщення миші), термінатор отримає менший час процесора, це фактично миттєво, і як тільки ви припините іншу діяльність, він знову використовуватиме її (також ефективно миттєво)
Vality
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.