# Неправильная расстановка приоритетов

## Cassiopeja

Уже давно есть проблема. Никак нем могу разобраться.

Если под генту запустить компиляцию, emerge или разархивацию какого

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

При этом работа с остальными программами запущенными в данный момент не

возможна, жутко все тормозит.

Вроде и настройку ядра смотрела, ничего не нашла, что может влиять.

Подскажите, пожалуйста, в чем может быть дело и в каком направлении искать решение?

----------

## dmiceman

памяти не хватает? если при компиляции идет активный ввод/вывод, то да, это печально становится. еще -- ccache жить помогает (если памяти достаточно).

для меня -- в основном 512 достаточно, и лишь недавно стал задумываться о гигабайте.

----------

## kon

Cassiopeja

hdparm /dev/<ваш диск, возможно hda>

----------

## point212

 *Cassiopeja wrote:*   

> Уже давно есть проблема. Никак нем могу разобраться.
> 
> Если под генту запустить компиляцию, emerge или разархивацию какого
> 
> нить архива, то почему то вся система переключается на выполнение этой задачи.
> ...

 

Странно. У меня работа с системой протекает довольно плавно. Причем даже при большом (>2) количестве одновременных компиляций. Загрузка процессора - 100%, при работе с компом никаких подтормаживаний не замечаю (Xorg,KDE,mplayer,xmms,supertux). Magic? ^)

PS A1000/512M, Gentoo(stage1)  :Smile: 

----------

## ManJak

А своп как заполняется?

----------

## Cassiopeja

Памяти предостаточно, раньше 256 было, теперь 512 и та же проблема.

Жесткий диск seagate 10000. 

hdparm вечером сделаю.

И еще вот какие проблемы тоже связанные с этой проблемой.

Если я нахожусь в инете (а у меня дайлап), и делаю emerge some_packet.

То пактетик скачивается, а потом начинается его компиляция, и на момент компиляции инет пропадает.

Тут я думаю не в железе дело, а в чем то другом.

----------

## sovchik

для начала hdparm -d1 /dev/<ваш диск>. Очень похоже на отрубленный dma на винте.

----------

## kaktyc

Какое ядро и какой испольуется scheduler?

```
~ $ cat /sys/block/hda/queue/scheduler

noop anticipatory deadline [cfq]
```

Тот, что дефолтный, будет в квадратных скобках. У меня - cfq.

----------

## Nelud

По поводу emerge: не мешало бы выставить в /etc/make.conf параметр PORTAGE_NICENESS. У меня он равен 10. У тебя, конечно, не в этом проблема, но это полезный параметр.

----------

## v12aml

может просто MAKEOPTS стоит большой?

----------

## Cassiopeja

Точно dma был отключен.

Уже при загрузке заметила разницу.

Сейчас все летает.

Аж обидно, что столько времени без dma сидела.

Всем большое спасибо!  :Smile: 

----------

## ManJak

 *kaktyc wrote:*   

> Какое ядро и какой испольуется scheduler?
> 
> ```
> ~ $ cat /sys/block/hda/queue/scheduler
> 
> ...

 

Можно подробней, со ссылками?

Я просто всегда интересовался, но всегда забывал про него  :Confused: 

Пока будет реминдер приходить отсюда - супер  :Very Happy: 

----------

## kaktyc

Ну со ссылками - это гугль + kerneltrap.org  :Smile:  На последнем очень много чего есть, но надо перелопачивать. Да еще здесь где-то на форумах в обсуждении genetic scheduler было. Если вкратце, то noop - самый тормозной scheduler. Сделан, видимо, "чтобы было". Deadline scheduler будет лучше, если активно гамаешься. Anticipatory говорят хорош на БД. А cfq распределяет доступ к диску равномерно между всеми процессами. Но для игр не подходит. Да, это все I/O schedulers. Есть еще cpu schedulers, но это отдельная история. 

В ядро можно вкомпилить все. Выбирать при загрузке параметром elevator=schedule_name. Или без перезагрузки 

```
echo scheduler_name > /sys/block/hda/queue/scheduler
```

 где hda - твой винт. Я лично пользуюсь скриптом, найденным здесь на форумах:

```
#!/bin/bash

###***Authored by Genn***###

##E-Mail: TheWindRider@myrealbox.com

#Last Update: 1/18/05

#This script was created to change the currently used scheduler

#under the vivid-sources kernel.

#(http://forums.gentoo.org/viewtopic.php?p=1337010, maintained by fallow & troll)

#There are probably other kernels that could use this script as

#well, but I'm not aware of them.

#This script must be executable.  If it does not work

#'chmod 700 *this_script*' should do it.

#You can supply one optional arguement with this script.

#'script_name block-device' will run the script with the

#intend to interactively change the scheduler on the

#block device you specify.  The block device is just the

#last portion of the device address without slashes.

#IE, if you wanted to adjust the schedular on /dev/hda,

#you would run 'this_script hda' and follow the on-screen

#instructions.

#Now, I say the arguement is optional because you are

#requred to set the DEFAULT_DRIVE variable to a valid block

#device.  So, if you do not supply the arguement, the script

#will use that block-device.  The variable is set by the

#same rules that the arguement is supplied by; just use the

#last portion of the address with no slashes.

#And for those of you wondering where the variable is,

DEFAULT_DRIVE=hda

#Now you've done everything you need to, go run the script,

#and ignore everything from here down.

##########################################################

#Verification of a valid default block device choice.

if [ -z `ls /sys/block | grep $DEFAULT_DRIVE` ]

  then

    echo "You chose a non-valid block device as default."

    echo "/dev/$DEFAULT_DRIVE does not exist."

    echo "Please change the variable DEFAULT_DRIVE in the script."

    exit

fi

#Verification of root level access

ROOT_UID=0

ERR_NOTROOT=67

if [ "$UID" != "$ROOT_UID" ]

then

  echo "You must be root to run this script."

  exit $ERR_NOTROOT

fi

#If an arguement is supplied this makes sure it is used.

#Or if none is supplied it uses the default choice.

if [ -n "$1" ]

then

  if [ -n `ls /sys/block | grep $1` ]

  then

    echo "Now using /dev/$1 for block device."

    DRIVE=$1

  else

    echo "You chose a non-valid block device."

    echo "/dev/$1 does not exist."

    exit 1

  fi

else

  echo "No arguement supplied."

  echo "Defaulting to /dev/${DEFAULT_DRIVE} for block device."

  DRIVE=${DEFAULT_DRIVE}

fi

#Schedular file location

SCHEDLOC=/sys/block/${DRIVE}/queue/scheduler

#Verification of valid scheduler location

if [ `[ -f ${SCHEDLOC} ]` ! -a `[ -w ${SCHEDLOC} ]` ]

then

  echo "Uh oh, either $SCHEDLOC is not a file, or you do not "

  echo "have write access to it.  I would suggest you verify"

  echo "that the location listed above is correct and that the "

  echo "value in the script did not get altered somewhow.  The "

  echo "standard location is: "

  echo "/sys/block/{some_block_device}/queue/scheduler.  If it "

  echo "is valid, try echoing something by hand to "

  echo "$SCHEDLOC.  If you're "

  echo "sure your using the right kernel, and none of that works, "

  echo "make a post in the vivid-sources thread.  On the other "

  echo "hand, if echoing by hand does work, send me an e-mail as "

  echo "you just discovered a bug."

  exit 1

fi

#Identification of different available schedulers.

SCHED1=`cat ${SCHEDLOC} | gawk '{print $1}'`

SCHED2=`cat ${SCHEDLOC} | gawk '{print $2}'`

SCHED3=`cat ${SCHEDLOC} | gawk '{print $3}'`

SCHED4=`cat ${SCHEDLOC} | gawk '{print $4}'`

#User Interface portion

echo "List of available schedulers"

echo "The bracketed choice is the one currectly in use."

echo "Selecting this one does nothing."

echo "1 -  ${SCHED1}"

echo "2 -  ${SCHED2}"

echo "3 -  ${SCHED3}"

echo "4 -  ${SCHED4}"

echo " "

echo "Please type the number corresponding the scheduler you wish to use."

#This applies the selected change

read CHOICE

case ${CHOICE} in

        1)

                echo "$SCHED1" > $SCHEDLOC

                NEWSCHED=${SCHED1}

                ;;

        2)

                echo "$SCHED2" > $SCHEDLOC

                NEWSCHED=${SCHED2}

                ;;

        3)

                echo "$SCHED3" > $SCHEDLOC

                NEWSCHED=${SCHED3}

                ;;

        4)

                echo "$SCHED4" > $SCHEDLOC

                NEWSCHED=${SCHED4}

                ;;

        *)

                echo "You must input a numerical value corresponding to one of the not-in-use schedulers."

                exit 1

                ;;

esac

#Error catching if the current scheduler is chosen.

VALIDATE=`echo $NEWSCHED | grep -F '['`

if [ "${VALIDATE}" != "" ]

then

        echo "You just chose the scheduler currently in use."

        exit 1

fi

echo " "

#Announcement of what schedular was selected for which drive.

echo "Schedular changed to $NEWSCHED on /dev/${DRIVE}"

exit 0
```

Вот пожалуй и все.  :Smile: 

P.S. Много полезной инфы есть в тредах по ядрам love и nitro.

----------

## YD

Я вообщем-то в кернел себе deadline ставлю только и без подобных скриптов обхожусь (:

----------

## kaktyc

Я долго экспериментировал  с ними, поэтому оставил их все. Иногда режусь в Диабло2 - тогда включаю deadline. С ним чуть быстрее. А для повседневной работы исрользую cfq. На моей конфигурации самое то  :Smile: 

----------

## ManJak

 *kaktyc wrote:*   

> Я долго экспериментировал  с ними, поэтому оставил их все. Иногда режусь в Диабло2 - тогда включаю deadline. С ним чуть быстрее. А для повседневной работы исрользую cfq. На моей конфигурации самое то 

 

Пасиб, нето давно мучаюсь, а так вкратце сразу понятно.

Просто, в доках к ядру, они все запутать стараються  :Smile: 

----------

