Когда речь заходит о снижении уровня шума, издаваемого компом, люди обычно начинают говорить о низкооборотных кулерах, жестких дисках на салазках, водных системах охлаждения и прочих вещах, далеких от мира софта. Но сегодня мы поговорим о шуме как о проблеме программного характера, какие настройки и с помощью каких утилит можно произвести в Linux, чтобы машина стала по-настоящему бесшумной.

Мы все знаем, что есть ровно три основных источника шума, издаваемого железным другом: вентиляторы внутри корпуса, вентилятор на видеокарте и жесткий диск, постоянно гоняющий головки по пластинам. Следовательно, есть три возможных способа снижения уровня шума: воздействие на скорость вращения кулеров корпуса, понижение производительности видеоподсистемы и оптимизация работы жесткого диска. Начнем, как полагается, с первого.

Кулеры
Корпус современного компьютера может насчитывать от одного до пяти (или даже восьми) вентиляторов, все зависит от фантазии и прихотей его владельца. Обычно только три из них подключаются к материнской плате, благодаря чему последняя получает возможность контролировать скорость их вращения. Все остальные же "цепляются" напрямую к блоку питания, поэтому всегда работают на полной скорости (если, конечно, не имеют аналоговых регуляторов вращения на корпусе). Соответственно, для получения бесшумного компа нам необходимо:

Избавить корпус от многочисленных вентиляторов. Поверь, если в твоем компе не установлено 4 жестких диска и 2 видеокарты, смысла в них просто нет, а в большинстве стандартных систем хватит и кулеров на процессоре и блоке питания.
Снизить производительность процессора, что приведет к снижению внутренней температуры корпуса и скорости вращения его охлаждающих вентиляторов (в первую очередь вентилятора процессора).
Самостоятельно снизить число оборотов вентиляторов и рискнуть жизнью процессора и других компонентов компа.
С отверткой ты уже должен быть знаком, поэтому первый пункт мы пропустим и остановимся на последних двух подробнее.
Традиционно для управления частотой процессора в Linux применялись файлы каталогов /proc и /sys. Записав определенное значение в один из них, можно было перевести процессор в энергосберегающий режим, в результате чего материнская плата сама понижала количество оборотов кулера. Этот подход работает и сейчас, например:

С помощью такой команды можно узнать о текущем регуляторе энергосбережения, а с помощью следующей - изменить его:

# echo conservative > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

Всего каталог cpufreq насчитывает 11 файлов, изменяя содержимое которых, ты сможешь очень гибко управлять частотой процессора. Их перечень и описания приведены далее:

affected_cpus — список процессоров, частота которых будет изменена
cpuinfo_cur_freq — текущая частота процессора в КГц
cpuinfo_max_freq — максимально возможная частота процессора
cpuinfo_min_freq — минимально возможная частота процессора
scaling_available_frequencies — список допустимых частот процессора
scaling_available_governors — список допустимых регуляторов
scaling_driver — используемый драйвер управления частотой
scaling_governor — используемый регулятор
scaling_max_freq — максимальная частота процессора, допустимая для установки регулятором
scaling_min_freq — минимальная частота процессора, допустимая для установки регулятором
scaling_setspeed — предназначен для изменения частоты процессора
Есть два ключевых момента, относящихся к изменению тактовой частоты процессора в Linux, которые следует запомнить раз и навсегда:

1. Технологии управления частотами и энергосбережением улучшаются с выходом каждой новой модели процессора, независимо от его марки. Поэтому почти каждая модель процессора имеет собственный драйвер, который необходимо загрузить в память для того, чтобы получить возможность изменять файлы каталога cpufreq. Вот список наиболее используемых модулей:

acpi-cpufreq — изменение состояния процессора средствами ACPI (P-States Driver)
p4-clockmod — Pentium 4
speedstep-centrino — Pentium M
speedstep-ich — Pentium III-M, P4-M, ICH2/ICH3/ICH4
speedstep-smi — Pentium III-M, 440 BX/ZX/MX
powernow-k6 — AMD K6
powernow-k7 — AMD Athlon
powernow-k8 — AMD Opteron, Athlon 64, Athlon64X2, Turion 64
cpufreq-nforce2 — изменение частоты средствами чипсета nVidia nForce2 (изменение FSB независимо от частоты PCI/AGP)
Во многих дистрибутивах все эти модули встроены в ядро, поэтому подбирать подходящего кандидата вручную не придется.

2. Для автоматического управления частотой используются регуляторы — программные алгоритмы, которые изменяют производительность процессора в зависимости от каких-либо условий. Последние ядра Linux предоставляют пять различных регуляторов на все случаи жизни:

performance — регулятор, используемый по умолчанию, заставляет работать процессор с максимальной скоростью.
ondemand — изменяет тактовую частоту процессора в зависимости от нагрузки на систему.
conservative — аналог ondemand, отличающийся плавным изменением частоты процессора (актуально для ноутбуков, так как позволяет сберечь ресурсы батареи).
powersave — всегда выставляет минимальную частоту.
userspace — не делает ничего, позволяя пользователю самостоятельно выставить частоту.
В некоторых дистрибутивах регуляторы могут быть вынесены в отдельные модули, поэтому перед использованием их придется загрузить в память с помощью команды вроде:

Далее регулятор можно активировать путем записи его имени в файл scaling_governor:

В нашем случае полезными могут оказаться все четыре последних регулятора. Алгоритм ondemand подойдет тогда, когда требуется только временное снижение шума вентилятора, например ночью, когда качаются торренты, и процессор простаивает. Последние два алгоритма будут полезны всем, кто хочет постоянной тишины. Причем, в случае активирования регулятора userspace, частоту придется самостоятельно записать в файл scaling_setspeed:

Значение следует брать из файла scaling_available_frequencies. Чтобы не убивать клавиатуру, набирая длинные пути к управляющим файлам после каждой перезагрузки, советую установить пакет cpufrequtils, доступный в любом дистрибутиве. В том числе в Debian/Ubuntu:

После установки запусти команду cpufreq-info, которая выведет всю информацию о текущих настройках: драйвер, регуляторы, диапазон частот и т.д. Для изменения регулятора используй следующую команду:

Частота меняется с помощью флага '-f':

Для изменения устанавливаемого во время инициализации системы регулятора укажи его имя в строке GOVERNOR файла /etc/init.d/cpufrequtils (по умолчанию используется ondemand).

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

Одна из таких программ носит имя fancontrol и распространяется вместе с пакетом lm-sensors. Для того чтобы начать ее использовать, нужно установить lm-sensors, используя менеджер пакетов, и запустить стандартную утилиту конфигурирования sensors-detect. На вопросы можно смело отвечать нажатием <Enter>. Дойдя до вопроса "Do you want to add these lines automatically?", напиши yes, скопируй приведенные в вопросе имена модулей и скорми их команде modprobe. В моем случае команда получилась такой:

Чтобы проверить работоспособность сенсоров, выполни команду sensors. На экране ты должен увидеть массу информации, снятой с самых разных датчиков. Обрати внимание на строки "CPU Fan" и "CPU Temp", в них указана текущая скорость вращения кулера и температура процессора. Наверняка скорость кулера будет очень высокой (свыше 4000 оборотов), а температура процессора — очень низкой (намного ниже 60 градусов). Все это указывает на нерациональное использование вентилятора. Чтобы исправить ситуацию, следует задействовать демон fancontrol, который будет регулировать подаваемое на вентилятор напряжение, изменяя его в зависимости от текущей температуры процессора. Демон требует специфичных для данной машины настроек, поэтому перед его запуском мы воспользуемся скриптом pwmconfig, который сгенерирует рабочую конфигурацию.

Запусти pwmconfig и нажимай клавишу <Enter> в ответ на любые вопросы. Когда конфигурирование будет завершено, и на экране появится строка "Select fan output to configure, or other action:", введи в ответ цифру "1" и следуй дальнейшим инструкциям. Наиболее важный — первый вопрос, скрипт потребует выбрать температурный датчик, который будет влиять на скорость кулера. Лично я получил пять различных вариантов, никак не идентифицируемых кроме текущего значения, благодаря которому и удалось определить правильный вариант. Он оказался вторым, скорее всего, в твоем случае будет так же. Далее скрипт попросит выбрать диапазоны температур и скоростей, отвечай <Enter>, дефолтовые значения более чем разумны.

После окончания допроса pwmconfig создаст конфигурационный файл, и ты, наконец, сможешь запустить демон fancontrol:

Стоит отметить, что fancontrol подойдет далеко не ко всем машинам (в основном это касается различных ноутбуков и нетбуков), поэтому придется поискать специальную программу для своего устройства. Например, для управления кулерами на нетбуке Acer Aspire One может быть использована утилита acerhdf (wwwpiie.net/?section=acerhdf). Утилита для ноутбука Sony Vaio называется Fan Silencer (wwwtaimila.com/fansilencer.php). Погуглив, ты наверняка сможешь найти подобные утилиты и для своего лаптопа.

Видеоадаптер
Итак, с кулерами внутри корпуса вроде разобрались, теперь надо что-то сделать с вентилятором на видеокарте, который иногда оказывается даже более шумным, чем все остальные. На самом деле здесь все намного проще: хороший видеоадаптер сам изменяет скорость вращения своего кулера, основываясь на показаниях температурного датчика видеочипа, который нагревается только во время активной работы (то есть игр или использования 3D-редактора). Большую же часть времени видеочип простаивает, и его охлаждающий вентилятор должен работать на пониженных оборотах. Если же этого не происходит — пора обращаться к специальным утилитам.
Если у тебя видеокарта от nVidia, то для управления ей из Linux можно воспользоваться замечательной утилитой nvclock (wwwlinuxhardware.org/nvclock). Она позволяет не только изменять рабочие частоты видеочипа и памяти, но и производить множество других действий, включая регулирование скорости вращения вентилятора.

Для начала запусти утилиту с флагом '-i' и посмотри на вывод в секции "-- Sensor info --", там ты должен увидеть текущую температуру графического ядра и скорость вращения кулера в процентах. Далее можно просто запустить nvclock с флагами '-f' и '-F', чтобы изменить скорость кулера:

[

Значение должно быть в пределах от 10 до 100 с шагом 10. Заметь, что далеко не каждая видюха позволит тебе произвести такую операцию.

Жесткий диск
Ну вот, осталось усмирить накопитель. К слову сказать, современные винты почти не шумят, и услышать их даже за низкооборотным кулером довольно непросто. Однако, если ты обладатель системы, оснащенной старыми жесткими дисками — постоянный треск должен быть тебе хорошо знаком и не менее хорошо слышен. Как от него избавиться?

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

Отключить своп, чтобы при нехватке памяти ядро не обращалось к жесткому диску, а применяло другие методы ее очищения.
Сделать файловую систему менее фрагментированной, тогда при чтении файла головка не будет метаться между дорожками в поисках частей файла.
Сделать так, чтобы сброс "грязных" буферов ФС происходил реже, в этом случае запись на диск будет осуществляться "рывками", с большими промежутками между операциями записи.
Первый способ радикален, но при достаточном количестве оперативной памяти вполне оправдан. Чтобы сделать диск менее шумным с его помощью, надо просто убрать соответствующую строку из файла /etc/fstab (слово swap в третьей колонке).

Второй способ включает в себя использование наименее подверженных фрагментации файловых систем, таких как ext4, и специальных дефрагментаторов, которые позволят собрать разбросанные по диску кусочки файлов в один непрерывный блок. Не верь тем, кто говорит, что в Linux файловые системы не фрагментируются, это просто невозможно без потери ощутимого количества свободного пространства диска. Фрагментации подвержена и ext2, и ext4, и reiserfs, каждая, конечно, в разной степени и далеко не так ярко выражено как FAT, но тем не менее.

Для дефрагментации любой файловой системы можно использовать универсальные дефрагментаторы, например defrag (http://ck.kolivas.org/apps/defrag) или Shake (http://vleu.net/shake). Попробуем применить второй как более продвинутый и производительный вариант.

Переходим на официальную страничку проекта и скачиваем последнюю версию инсталлятора (shake-0.99.1-Linux.sh), делаем его исполняемым и запускаем. Скорее всего, не будут учтены некоторые зависимости, так что их придется установить вручную. Пользователи Debian и Ubuntu могут установить программу с помощью apt, соответствующие инструкции приведены на страничке http://vleu.net/apt.
После окончания установки выполни следующую команду, чтобы начать процесс дефрагментирования указанного каталога:

Время работы программы может составить от 5 до 15 минут в зависимости от количества файлов и размера каталога.
Третий способ предпочтительнее и действеннее остальных. Лучший способ заставить диск замолчать – просто лишить его работы. Для этого можно использовать так называемую отложенную запись на диск. Ни одна операционная система (кроме совсем уж простых) не производит запись на диск сразу после записи данных в файл. Сначала информация попадает в буфер, в котором хранится определенное время, и только затем записывается непосредственно на жесткий диск. Так удается существенно поднять производительность подсистемы ввода-вывода и сделать процесс записи на диск более равномерным и последовательным. Нас все это интересует постольку, поскольку Linux отличается тем, что позволяет самостоятельно задать интервал между сбросами этих самых "грязных" буферов. Делается это с помощью записи значений в перечисленные в следующей таблице файлы каталога /proc/sys/vm:

laptop_mode (120) — сколько секунд должно пройти между началом чтения каких-либо данных и сбросом грязных буферов на диск (раз уж после чтения данных остановленный ранее диск все равно раскрутился, почему бы заодно не сбросить буферы?).
dirty_writeback_centisecs (12000) — квант времени между проверками на наличие грязных буферов.
dirty_expire_centisecs (12000) — через сколько миллисекунд считать буферы достаточно грязными для записи на диск.
dirty_ratio (10) — максимальный процент памяти, используемый для хранения грязных буферов (при превышении они будут сброшены).
dirty_background_ratio (1) — минимальный процент памяти, используемый для хранения грязных буферов.
Трудно сказать, какие значения будут оптимальными в конкретном случае. В скобках указаны значения, которые позволят отложить момент сброса буферов на достаточно продолжительный период времени.

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

Опция '-B 1' включает самый "агрессивный" уровень сбережения энергии. Всего их 254, с 1 по 127 из которых отличаются тем, что приводят к остановке винчестера в случае необходимости. Опция '-S 12' – это время, по прошествии которого жесткий диск будет останавливать шпиндель. Предусмотрено 255 значений: с 1 до 240 просто умножаются на 5 секунд, а 0 – отключает остановку шпинделя.
Менее губительный для жесткого диска метод заключается в активации так называемой функции Automatic Acoustic Management, благодаря которой позиционер головок будет издавать гораздо меньше шума, ценой незначительного снижения скорости позиционирования головок (что, однако, ведет к падению производительности диска в среднем на 10%). Функция доступна в большинстве более-менее современных жестких дисков и может быть включена при помощи все того же hdparm. Например:

Эта команда активирует самый тихий режим работы винчестера, за наиболее быстрым закреплено значение 254. Выбирая значение между этими двумя порогами, ты сможешь подобрать оптимальное соотношение шум/скорость, но помни, что большинство жестких дисков реально поддерживает только два или три режима (например, 128 – тихо, 254 – быстро, все, что между, будет либо вообще не работать, либо активировать один из двух режимов).

И тишина…
Как ты смог убедиться, снижать уровень создаваемого компьютером шума программно не только можно, но и нужно. В большинстве случаев этого будет вполне достаточно для того, чтобы получить количество децибел, не раздражающее твой слух, без необходимости приобретения дорогостоящих кулеров и корпусов.