# Как разгрузить процессор при emerge?

## Balancer

Имею старенький ноут P233MMX с 96RAM. Ноут несколько себе на уме и при длительной (минут 10) загрузке процессора на 100% перегревается и виснет. Никакие аппаратные попытки решить эту проблему успехом не увенчались, так что ломаю голову теперь со стороны программной. Как бы так сделать, чтобы emerge мог при сборке пакетов работать в чём-то подобном: несколько минут на полную катушку, при 100% загрузке, потом несколько минут - с загрузкой процентов в 30..50. Как бы ему урезать динамически ресурсы процессора. Это реально?

----------

## viy

Пробовал использовать nice и renice утилитки?

Не скажу навскидку, как это на bash'е написать, можно поиграться...

Идея такая --- стартуешь через nice -15 emerge... Потом, через каждые N минут делаешь renice +/-20 -p $(pidof emerge)

----------

## Balancer

Боюсь, что проблема тут сложнее. Дело же не только в emerge, но и в gcc, g++ и т.п. - кого там оно запускает... Их же тоже ограничивать нужно  :Smile: 

----------

## viy

Да, задачка...

Может проще ноут поновей купить?  :Razz: 

----------

## devil_ua

 *Balancer wrote:*   

> Боюсь, что проблема тут сложнее. Дело же не только в emerge, но и в gcc, g++ и т.п. - кого там оно запускает... Их же тоже ограничивать нужно 

 

А кто тебе мешает собирать все что надо на другой тачке?

А потом перенести на ноут?

----------

## chernousov

 *Balancer wrote:*   

> Боюсь, что проблема тут сложнее. Дело же не только в emerge, но и в gcc, g++ и т.п. - кого там оно запускает... Их же тоже ограничивать нужно 

 

На ск. я знаю, child-процессы стартуют с родительским приоритетом.

----------

## 046

И 100% загрузку приоритетом не снять. 

Нужно останавливать/возобновлять ...

----------

## Balancer

 *devil_ua wrote:*   

> А кто тебе мешает собирать все что надо на другой тачке?
> 
> А потом перенести на ноут?

 

На сколько я понимаю, для этого нужно там иметь точную копию системы ноутбука (а иначе на какие библиотки configure пактов настроится?)

Интересно, а если, например, слепить скрипт с тем же именем gcc и в нём делать паузу, скажем, на минуту через каждые 10 минут работы, а потом уже из него вызывать оригинальный gcc?

----------

## GreenDragon

 *046 wrote:*   

> И 100% загрузку приоритетом не снять. 
> 
> Нужно останавливать/возобновлять ...

 

Можно попробовать сделать следующее как пока не знаю, просто бредовая идея пришла в голову, 

помнится мне что приостановить компиляцию можно вроде по нажатию Ctrl+S, возобновить по Ctrl+U - могу ошибаться. Вот если каким макаром это передавать скриптом, то результат будет положительным за исключением времени компиляции

----------

## iliah

В продолжение поста GreenDragon'a

для машин, на которых можно сенсорами снимать температуру проца

по крону с подобранной периодичностью

проверять температуру, и при превышении опять-таки подобранной величины проверять в листе процессов наличие там заданных программ (в твоем случае emerge, gcc etc.)

и слать им `kill -s SIGSTOP pid`

в том же скрипте при достижении рабочей температуры, остановленным программам слать `kill -s CONT pid`

если снимать температуру никак, то тогда просто мониторить время остановки/продолжения

варианты совершенно ломовые, на сях уверен можно сделать гораздо элегантнее, возможно используя sleep или что-то в этом роде, тут я к сожалению не подскажу

----------

## viy

Тут вопрос даже не в том, как избежать останова процессора, а как определить точку Ы, при достижении которой следует предпринимать какие-то действия. В целом, вариант iliah очень даже. Надо запускать с & требуемую команду, и через интервалы A и B посылать SIGSTOP и SIGCONT. Но это если не вдаваться в детали и брать большую часть контроля на себя.

Думаю, можно установить A (время работы) равным секунд 30, а вот с B (время отдыха) придется поиграться... Одно точно, оно должно быть не менее A. Если будет параллельно работать только 1 процесс, то все ничего. Если несколько --- проблематичней, т.к. возможны ситуации, когда проц будет все время работать (пока один gcc отдыхает, другой работает). Придется увеличить вермя простоя. Также надо учитывать, что сам скрипт будет жрать циклы проца. Плюс, такие "надстройки" нужны еще и над bash'ем, т.к. configure дает приличную нагрузку.

Тут по хорошему надо, чтобы "надстройки" могли общаться друг с другом и динамически реагировать на время нагрузки. Нехилая фишка выходит  :Surprised: 

Я читаю рассылку pgsql-hackers@postgresql.org, алгоритмы кэширования там динамические и хрена-с-два в них разберешся. Что-то похожее и здесь вырисовывается  :Shocked: 

Мне все-таки думается, что проще купить новый ноут  :Wink: 

----------

## Balancer

Увы, термосенсора на ноуте нет  :Smile: 

Модель-то 1995-го года (хотя и ОЧЕНЬ продвинутая для того времени - всего 1700 грамм, USB, 233MMX и т.п.)

На самом деле, уже почти склонился к возврату на нём на Win98. Главным образом из-за тормозов видеодрайвера. Судя по всему, Linux-версия (видюха там NeoMagck 128) не использует все возможности аппаратного ускорения этого видеочипа. Под Win98 там скроллинг полноэкранный идёт шустро, а под Linux - не так тормозно, конечно, как при полной VGA-эмуляции, но всё равно - медленными волнами.

А про настройку APM мне пока и думать неохота. Если под Win98 при закрытии крышки ноут сразу сам уходит в гибернацию, при чём такая фича там по дефолту, без доп. драйверов, то как такое сделать под Linux - даже представить затрудняюсь...  :Very Happy: 

Так что Gentoo у меня только на трёх серверах и одном десктопе, боюсь, останется  :Smile: 

----------

## rusxakep

Ребят, вы меня конечно извините, но ...

# PORTAGE_NICENESS provides a default increment to emerge's niceness level.

#     Note: This is an increment. Running emerge in a niced environment will

#     reduce it further. Default is unset.

#PORTAGE_NICENESS=3

Поможет отцам русской демократии?   :Rolling Eyes: 

P.S: /etc/make.conf sure.

----------

## unvivid

Ya sam v linuxe novi4ok. No mne v kernel options vstrechalas feature takaya - chjtob skorost' processora meniat' na letu. Mozhet esli tebe s etoy fichey kernel skompilit' + software podxodiashiy - i vo vremia sborki meniat' skorost' na raza 2-3 men'sheyu, togda sobiratsya budet ochen' medlenno, zato naverno ne budet gretsya. Ili ya chto-to ne ponimayu v rabote processorov. Note mozho na noch ostavliat' budet.

----------

## viy

 *rusxakep wrote:*   

> #PORTAGE_NICENESS=3
> 
> Поможет отцам русской демократии?  

 

Мне кажеться, что нет. nice определяет приоритет процесса, т.е. кол-во процессорного времени при наличии >1 работающей задаче.

А если emerge идет один, сам по себе, то при любом nice будет жрать весь проц. Я так это понимаю.

----------

## theli

на самом деле наиболее простой вариант будет понижение частоты процессора...

так как в ядре действительно есть опция насчет возможности управлять cpufreq ...

```
CONFIG_CPU_FREQ:

Clock scaling allows you to change the clock speed of CPUs on the

fly. This is a nice method to save battery power on notebooks,

because the lower the clock speed, the less power the CPU consumes.
```

----------

## Balancer

 *theli wrote:*   

> на самом деле наиболее простой вариант будет понижение частоты процессора...
> 
> так как в ядре действительно есть опция насчет возможности управлять cpufreq ...

 

Ребята, ноут - 1995-го года. Ну какое в те времена программное управление частотой процессора  :Very Happy: 

----------

## theli

 *Balancer wrote:*   

> Ребята, ноут - 1995-го года. Ну какое в те времена программное управление частотой процессора 

 

собственно а почему бы и нет?

----------

## viy

 *Balancer wrote:*   

> Ребята, ноут - 1995-го года. Ну какое в те времена программное управление частотой процессора ;D

 

Если это делается на уровне ограничения нагрузки на проц в ядре, то все возможно. Если ядро использует фишки железок, то, скорее всего, не выйдет.

Надо доки по этой опции почитать.

----------

## theli

 *viy wrote:*   

> Надо доки по этой опции почитать.

 

вот собственно список поддерживаемого "железа"

http://www.kernel.org/pub/linux/utils/kernel/cpufreq/hardware.html

----------

## theli

я думаю все же стоит поставить ядро с поддержкой CPUFreq и попробовать поюзать что-нить типа

sys-apps / cpudyn 	A daemon to control laptop power consumption via cpufreq and disk standby 	  	

sys-apps / cpufreqd 	Daemon to adjust CPU speed for power saving 	  	

sys-apps / cpuspeedy 	A simple and easy to use program to control the speed and the voltage of CPUs on the fly. 	  	

sys-apps / gtk-cpuspeedy 	Graphical GTK+-2 frontend for cpuspeedy 	  	

sys-apps / powernowd 	Daemon to control the speed and voltage of CPUs 	  	

sys-apps / speedfreq 	daemon to control the CPU speed in 2.6 kernels

хотя все эти демоны позволяют делать настройки в зависимости от заряда батареи ... 

но может и можно в зависимости от температуры настроить  :Smile: 

ну и я думаю можно просто попробовать cpuspeedy или похожее чтобы вручную все это менять ...

а насчет будет все это работать или нет - так проще просто попробовать - если уж не получится то тут уж и можно говорить - "та это ж ноут 1995 года и все тут"  :Smile:  ....

а если уж получиться использовать эту опцию то тут уж и не так сложно будет написать скриптик который будет периодически проверять температуру и в зависимости от нее переключать на нужную частоту 

(типа нагрелся =>133

         остыл      =>233)

 :Smile: 

----------

