Управление ядрами процессора linux

How do I set the CPU frequency scaling governor for all cores at once?

I’d like to set the CPU frequency scaling governor for all cores at once instead of doing it individually for each core. Is there a way to do this? (I know it would be easy to echo the governor to /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor , but I’m not looking for a custom solution.)

With «custom solution» you mean that a shell script is unacceptable, it needs to be a built-in GUI button?

I’m just wondering if there already exists a solution in a standard installation (doesn’t need to have a GUI).

Check this page: idebian.wordpress.com/2008/06/22/cpu-frequency-scaling-in-linux under «debian implementation»: It is apparently possible to change the boot default, and there is a userspace tool called powernowd. (This is a comment rather than reply because the post is from 2008, and I haven’t tested if it still works. )

8 Answers 8

I googled a lot and I think it’s just not possible, so I added the following one-liner to my .bashrc :

Now I can run something like setgov ondemand and all cores will switch to the ondemand governor.

This doesn’t work as the file scaling_governor is owned by root and has restricted permissions. Changing the permissions is not always recommended.

I’m still a linux noob but don’t you think cpufrequtils lets u do it by using (its not bundled in the Ubuntu OS but is there in the repository)

sudo apt-get install cpufrequtils sudo cpufreq-set -r -g performance 

The -r related option doesn’t do it for all the cores. We have to specify the cpu number with option -c however this script will do it for all cpus in one go: for ((i=0;i<$(nproc);i++)); do cpufreq-set -c $i -r -g performance; done

Exactly, @Sri is right. cpufreq-set in fact lacks of ultimately simple but needed functionality. Lots of people as this vote counters clearly shows are just not aware of it because its description is simply misleading to top it off.

Who gives these +1’s without testing. This does not work at all. I posted the simplest working solution I could find.

the shortest command to change governor of all cores is the following:

You could add it to .bashrc like htorque mentioned setgov performance :

function setgov () < for i in ; do sudo cpufreq-set -c $i -g $1; # run cpufreq-set with root done > 

You CANNOT run a bash function with sudo. You can instead stick that into /usr/local/bin/setgov, and even set it as setuid so you can run it without root privileges.

Читайте также:  Oracle linux remote desktop

You can do this for all cores at once by running

sudo cpupower frequency-set --governor performance 

The cpupower command is available on 18.04 with the appropriate linux-tools package for the running kernel, according to user299889

Might as well add bash code completion, while we’re at it:

function setgovernor () < echo "$1" | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor >complete -W "$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors)" setgovernor 

The way I set this to stick since the governor defaults back to powersave after about 30 seconds now as of Ubuntu 16.04 or more recent (I’m on Ubuntu Mate);

    Put this (one line of) code (thank you, courtesy of switch87 in the previous answer)

sleep 60 && bash -c 'for i in ; do cpufreq-set -c $i -g performance; done' 

Mine is a line above «exit 0» and uncommented, under the commented ones.

«rc.local» for those who do not know, it runs the command as sudo. Any command it seems, to change the governor, needs to be run as sudo.

It lets the governor reset back to powersave and runs the code as sudo after 60 seconds to change it back to performance.

Change the «60» (in the code you copy) to whatever time (in seconds. 60 = 60 seconds= 1 minute) you need to delay the command and «performance» (in the command part) to what governor you want it to change to.

Out of my hours and hours of searching I have not found a more permanent fix for this than this. I figure what’s a couple of minutes that it’s on powersave if this is the best fix I’ve found, right? Right.

Not the best fix, but it makes it somewhat permanent after it does it’s little switch to powersave thing. If you want to boot right up and jump into a game or something you’re going to have to wait a minute for the code you just put in to switch it back from powersave or lower the timing on it (depending on how long it takes everything to start up so it’ll switch back to performance correctly).

And, as always, to revert back to default (I’ve seen some issues with people’s PCs overheating which is why they might have defaulted it to powersave in the first place) just remove the code from rc.local and reboot or switch it back manually with your cpu icon indicator switcher or run;

 sudo /etc/init.d/cpufrequtils restart 

in the terminal and or reboot.

Источник

Отключить/включить ядра CPU в Linux

В Linix вы можете временно включить или отключить ядра процессора без перезагрузки с помощью консольной утилиты chcpu.

Выведите информацию о доступных ядрах:

lscpu - информация о процессорах и ядрах в консоли linux

CPU(s): 3 On-line CPU(s) list: 0-2

В этом примере для гостевой ОС на виртуальной машине Linux доступны три ядра 0, 1 и 2.

Читайте также:  Linux узнать дистрибутив через консоль

В Linux вы можете отключить любые ядра процессора, кроме нулевого (CPU0).

Чтобы отключить ядра 1 и 2, выполните команду:

chcpu - отключить ядро в linux

CPU 1 disabled CPU 2 disabled

Проверьте теперь какие ядра доступны:

On-line CPU(s) list: 0 Off-line CPU(s) list: 1,2

Также можно вывести информацию о доступных процессорах так:

$ grep «processor» /proc/cpuinfo

Чтобы включить ядра процессора, выполните:

CPU 1 enabled CPU 2 enabled

Также вы можете отключить определенное ядро командой. В этом примере мы отключаем CPU1:

$ sudo echo 0 | sudo tee /sys/devices/system/cpu/cpu1/online

Проверьте сообщения в dmseg:

[ 2257.253801] smpboot: CPU 1 is now offline

Чтобы включить его, выполните:

$ sudo echo 1 | sudo tee /sys/devices/system/cpu/cpu1/online

Если вы хотите, чтобы Linux всегда загружалась с меньшим количество доступных ядер, нужно настроить параметр ядра maxcpus=N.

N в этом случае – это количество доступных ядер процессора, доступных в Linux.

$ sudo mcedit /etc/default/grub

Измените строку следующим образом:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash maxcpu=2"

grub - ограничить количество доступных проессоров в linux

Вы можете использовать отключение ядер CPU в Linux, когда нужно уменьшить количество vCPU для виртуальной машины Linux и вы хотите протестировать, как работает операционная система и приложения с меньшим количеством доступных vCPU.

Также в Linux вы можете запускать приложения на определённых ядрах с помощью CPU affinity. Чтобы получить информацию о привязки определенного процесса к ядрам, выполните:

pid 894's current affinity mask: 3
pid 894's current affinity list: 0,1

taskset привязка процесса к ядрам cpu в linux

Этому процессу разрешено выполняться на ядрах 0 и 1.

Чтобы разрешить запушенному процессу выполняться только на CPU0, выполните:

pid 894's current affinity list: 0,1 pid 894's new affinity list: 0

Или, чтобы разрешить процессу firefox использовать ядра с 0 по 3:

$ sudo taskset -c 0-3 firefox

Источник

Как назначить ядра процессора с помощью набора задач в Linux

Функция набора задач

Многоядерная обработка может иметь преимущества и недостатки, и иногда вам необходимо вручную назначать ядра ЦП программам (так называемое «сходство с ЦП»), чтобы добиться максимальной производительности. В Linux основным инструментом является набор задач. Это звучит потенциально пугающе, но мы разберем его на простые шаги, чтобы упростить процесс.

Основы набора задач

Использование набора задач можно разделить на две части: соответствие ЦП запускаемым программам и уже запущенным программам. Запускать программы проще из двух, поэтому мы начнем с него. Команда запуска выглядит так:

taskset -c cpu-core-number(s) application

Прежде чем ввести номер ядра ЦП, которое вы хотите назначить, не забывайте, что схема нумерации Unix обычно начинается с 0, поэтому ваше первое ядро ​​будет 0, второе ядро ​​- 1 и так далее. Таким образом, двухъядерная машина будет иметь ядра 0 и 1, а четырехъядерная машина будет иметь ядра 0, 1, 2 и 3.

Допустим, вы хотите запустить Audacity на двухъядерной системе и хотите, чтобы она работала на втором ядре. Эта команда будет такой:

набор задач - c 1 audacity

Использование нескольких ядер

На одной из наших машин Chrome иногда пропускал кадры при потоковой передаче видео, но при назначении на два ядра вел себя нормально. Если вы хотите попробовать то же самое на четырехъядерной системе и хотите назначить Chrome на три и четыре ядра, команда будет такой:

Читайте также:  Найти файл линукс консоль

Вам не нужно назначать привязку ЦП к последовательным ядрам — вы можете выбрать любое ядро ​​наугад. Допустим, у вас есть шестиядерный компьютер и вы хотите использовать Chrome на втором и шестом ядрах. Вы должны ввести команду:

Вы также можете использовать тире, чтобы распределить приложение по нескольким ядрам. Например, многие старые программы или системные функции по умолчанию будут работать на вашем первом ядре. Что, если вы хотите оставить первое ядро ​​как можно более свободным, а большое приложение распределить по всем остальным ядрам?

Допустим, у вас есть восьмиъядерная система и вы хотите запустить Steam со второго по восьмое ядро. Эта команда будет такой:

Изменение привязанности к уже запущенной программе

Набор задач не ограничивается только запуском приложений. Вы также можете изменить привязку к процессору для уже запущенной программы. Однако, прежде чем вы сможете изменить привязку приложения, вам сначала нужно узнать его идентификатор процесса (или для краткости PID).

Чтобы узнать PID вашего приложения, вы можете попробовать использовать системный монитор вашего рабочего стола, но самый быстрый способ — просто использовать top . Неудивительно, что он использует команду:

Имена всех запущенных команд находятся в правой части экрана. Соответствующие идентификаторы процессов находятся слева.

Верхний идентификатор набора задач

Запишите свой PID, как вы собираетесь использовать его через мгновение. В этом примере мы будем использовать VLC, который находится в процессе воспроизведения видео высокой четкости Matroska на старом ПК с шестью ядрами. Мы экспериментируем с разными типами ЦП, чтобы выжать максимальную производительность из VLC.

Чтобы изменить привязку существующего процесса, синтаксис выглядит следующим образом:

taskset - cp PID core-numbers

Если вы видите наш снимок экрана выше, идентификатор процесса VLC — 20485. Мы собираемся попробовать запустить VLC на четвертом, пятом и шестом ядрах, которые в Unix-системе будут 3-5. Итак, после всего этого команда будет:

Но что, если вы хотите проверить существующую привязку перед ее изменением? Для этого не вводите никаких основных чисел, и набор задач сообщит вам, как присваивается привязка. Итак, если мы изменим последнюю команду на:

это показывает нам, что VLC распределен по всем ядрам.

Набор задач: поиск сходства

Давайте попробуем еще раз с другой программой. Допустим, вместо этого мы запускаем большую Matroska с SMPlayer, а SMPlayer уже запущен. Вверху указано, что PID — 16058.

Набор задач Top Smplayer

Но сначала мы хотим узнать его существующую близость. Используя команду с переключателем -cp , но без номеров ядер, мы видим, что сходство в настоящее время распространяется по всем ядрам.

Сходство с Smplayer Taskset

Теперь мы можем попробовать распространить SMPlayer на те же три ядра, что и эксперимент VLC, с помощью команды:

Это легко, не правда ли? Если вы хотите протестировать свой компьютер, ознакомьтесь с нашим руководством по 8 полезный инструмент для стресс-тестирования вашего процессора.

Источник

Оцените статью
Adblock
detector