» » Знижуємо програмними засобами шум, видаваний комп'ютером

Знижуємо програмними засобами шум, видаваний комп'ютером

Фото - Знижуємо програмними засобами шум, видаваний комп'ютером

Автор: Максим "hatchet" Польовий

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

Ми всі знаємо, що є рівно три основних джерела шуму, видаваного залізним другом: кулери всередині корпусу, кулер на відеокарту і жорсткий диск, постійно ганяє головки по всій поверхні «млинців». Отже, є три можливі способи зниження рівня шуму: вплив на швидкість обертання кулерів корпусу, зниження продуктивності відеопідсистеми та оптимізація роботи жорсткого диска. Почнемо, як годиться, з першого.

Кулери

Корпус сучасного комп'ютера може налічувати від одного до чотирьох (можливо і більше) кольорів, все залежить від фантазії і примх його власника або ж від виробника. Зазвичай тільки три з них підключаються до материнської плати, завдяки чому остання отримує можливість контролювати швидкість їх обертання. Всі інші ж поключаються безпосередньо до блоку живлення, тому завжди працюють на повній швидкості (якщо, звичайно, не мають аналогових регуляторів обертання на корпусі). Відповідно, для отримання безшумного системного блоку нам потрібно:

Позбавити корпус від численних кольорів. Якщо у твоєму системнике не встановлено чотирьох жорстких диска і двох відеокарт, сенсу в них просто немає, а в більшості стандартних систем вистачить і вентиляторів на процесорі і блоці живлення.

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

Вручну знизити число обертів кулера і ризикнути життям процесора і інших комплектуючих системника.

З викруткою ти вже повинен бути знайомий, тому перший пункт ми пропустимо і зупинимося на останніх двох докладніше.

Традиційно для управління частотою процесора в OS Linux застосовувалися файли каталогів / proc та / sys. Записавши певне значення в один з них, можна було перевести cpu (процесор) в енергозберігаючий режим, в результаті чого материнська плата сама знижувала кількість обертів вентилятора. Цей підхід працює і зараз, наприклад:

$ Cat / sys / devices / system / cpu / cpu0 / cpufreq / scaling_governor

За допомогою цієї команди можна дізнатися про поточний стан енергозбереження, а за допомогою наступної - змінити його:

# Echo conservative gt; / Sys / devices / system / cpu / cpu0 / cpufreq / scaling_governor

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

$ Ls -1 / sys / devices / system / cpu / cpu0 / cpufreq

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 - призначений для зміни частоти процесора

Є два ключових моменти, які стосуються зміни тактової частоти cpu в OS Linux, які слід запам'ятати раз і назавжди:

1. Технології управління частотами та енергозбереженням поліпшуються з виходом кожної нової моделі процесора, незалежно від його марки. Тому майже кожна модель cpu має власний драйвер, який необхідно завантажити в пам'ять для того, щоб отримати можливість змінювати файли каталогу 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 - змінює тактову частоту cpu залежно від навантаження на операційну систему.

conservative - аналог ondemand, що відрізняється плавним зміною частоти процесора (актуально для ноутбуків, оскільки дозволяє зберегти ресурси батареї).

powersave - завжди виставляє мінімальну частоту процесора.

userspace - не робить нічого, дозволяючи користувачеві самостійно виставити частоту.

У деяких дистрибутивах регулятори можуть бути винесені в окремі модулі, тому перед використанням їх доведеться завантажити в пам'ять за допомогою команди на зразок:

# Modprobe cpufreq_ondemand

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

# Echo ondemand gt; / Sys / devices / system / cpu / cpu0 / cpufreq / scaling_governor

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

# Echo 1000 gt; / Sys / devices / system / cpu / cpu0 / cpufreq / scaling_setspeed

Значення слід брати з файлу scaling_available_frequencies. Щоб не вбивати клавіатуру, набираючи довгі шляхи до керуючих файлів після кожної перезавантаження, раджу встановити пакет cpufrequtils, доступний в будь-якому дистрибутиві. У тому числі в Debian / Ubuntu:

$ Sudo apt-get install cpufrequtils

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

$ Sudo cpufreq-set -g powersave

Частота змінюється за допомогою прапора '-f':

$ Sudo cpufreq-set -f 1.22 GHz

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

Всі ці дії повинні привести до зниження тактової частоти процесора та зменшення рівня шуму, видаваного його вентилятором. Проте в деяких випадках це не спрацює, і доведеться використовувати спеціальні програми для керування швидкістю обертання кулера.

Одна з таких програм носить ім'я fancontrol і поширюється разом з пакетом lm-sensors. Для того щоб почати її використовувати, потрібно встановити lm-sensors, використовуючи менеджер пакетів, і запустити стандартну утиліту конфігурації sensors-detect. На запитання можна сміливо відповідати натисненням. Дійшовши до питання «Do you want to add these lines automatically?», Напиши yes, скопируй наведені в питанні імена модулів і згодуй їхній команді modprobe. У моєму випадку команда вийшла такою:

$ Sudo modprobe i2c-nforce2 asb100 w83l785ts

Щоб перевірити працездатність сенсорів, виконай команду sensors. На екрані ти повинен побачити масу інформації, знятої з самих різних датчиків. Зверни увагу на рядки «CPU Fan» і «CPU Temp», в них вказана поточна швидкість обертання кулера і температура процесора. Напевно швидкість кулера буде дуже високою (понад 4000 оборотів), а температура процесора - дуже низькою (набагато нижче 60 градусів). Все це вказує на нераціональне використання вентилятора. Щоб виправити ситуацію, слід задіяти демон fancontrol, який регулюватиме подається на вентилятор напругу, змінюючи його залежно від поточної температури процесора. Демон вимагає специфічних для даної машини налаштувань, тому перед його запуском ми скористаємося скриптом pwmconfig, який згенерує робочу конфігурацію.

Запусти pwmconfig і натискай клавішу у відповідь на будь-які питання. Коли конфігурація буде завершено, і на екрані з'явиться рядок «Select fan output to configure, or other action:», введи у відповідь цифру «1» і йди подальших інструкцій. Найбільш важливий - перше питання, скрипт потребують вибрати температурний датчик, який буде впливати на швидкість кулера. Особисто я отримав п'ять різних варіантів, неможливо ідентифікованих крім поточного значення, завдяки якому і вдалося визначити правильний варіант. Він виявився другим, швидше за все, в твоєму випадку буде так само. Далі скрипт попросить вибрати діапазони температур і швидкостей, відповідай, дефолтовий значення більш ніж розумні.

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

$ Sudo /etc/init.d/fancontrol start

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

Відеоадаптер

Отже, з кулерами всередині корпусу ніби розібралися, тепер треба щось зробити з вентилятором на відеокарті, який іноді виявляється навіть більш гучним, ніж всі інші. Насправді тут все набагато простіше: хороший відеоадаптер сам змінює швидкість обертання свого кулера, грунтуючись на показаннях температурного датчика відеочипа, який нагрівається тільки під час активної роботи (тобто ігор або використання 3D-редактора). Більшу ж частину часу відеочіп простоює, і його охолоджуючий вентилятор повинен працювати на знижених оборотах. Якщо ж цього не відбувається - пора звертатися до спеціальних утилітам.

Якщо у тебе відеокарта від nVidia, то для управління їй з Linux можна скористатися чудовою утилітою nvclock (www.linuxhardware.org/nvclock). Вона дозволяє не тільки змінювати робочі частоти відеочіпа і пам'яті, але і проводити безліч інших дій, включаючи регулювання швидкості обертання вентилятора.

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

$ Sudo nvclock -f -F 60

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

Жорсткий диск

Ну от, залишилося втихомирити накопичувач. До слова сказати, сучасні гвинти майже не шумлять, і почути їх навіть за низькооборотним кулером досить непросто. Однак, якщо ти володар системи, оснащеної старими жорсткими дисками - постійний тріск повинен бути тобі добре знайомий і не менш добре чутний. Як його позбутися?

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

Відключити своп, щоб при нестачі пам'яті ядро не зверталося до жорсткого диска, а застосовувало інші методи її очищення.

Зробити файлову систему менш фрагментованою, тоді при читанні файлу голівка не буде кидатися між доріжками в пошуках частин файлу.

Зробити так, щоб скидання «брудних» буферів ФС відбувався рідше, в цьому випадку запис на диск буде здійснюватися «ривками», з великими проміжками між операціями запису.

Перший спосіб радикальний, але при достатній кількості оперативної пам'яті цілком виправданий. Щоб зробити диск менш шумним з його допомогою, треба просто прибрати відповідний рядок з файлу / etc / fstab (слово swap в третій колонці).

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

Для дефрагментації будь-якої файлової системи можна використовувати універсальні дефрагментатори, наприклад defrag (https://ck.kolivas.org/apps/defrag) або Shake (https://vleu.net/shake). Спробуємо застосувати другий як більш просунутий і продуктивний варіант.

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

Після закінчення установки виконай наступну команду, щоб почати процес дефрагментірованія зазначеного каталогу:

$ Sudo shake -pvv / шлях / до / каталогу

Час роботи програми може скласти від 5 до 15 хвилин в залежності від кількості файлів і розміру каталогу.

Третій спосіб краще і дієвіше інших. Кращий спосіб змусити диск замовкнути - просто позбавити його роботи. Для цього можна використовувати так звану відкладену запис на диск. Жодна операційна система (крім зовсім уже простих) не проводить запис на диск відразу після запису даних у файл. Спочатку інформація потрапляє в буфер, в якому зберігається певний час, і тільки потім записується безпосередньо на жорсткий диск. Так вдається істотно підняти продуктивність підсистеми вводу-виводу і зробити процес запису на диск більш рівномірним і послідовним. Нас все це цікавить остільки, оскільки Linux відрізняється тим, що дозволяє самостійно задати інтервал між скидами цих самих «брудних» буферів. Робиться це за допомогою запису значень в перераховані в наступній таблиці файли каталогу / proc / sys / vm:

$ Ls -1 / proc / sys / vm

laptop_mode (120) - скільки секунд повинно пройти між початком читання будь-яких даних і скиданням брудних буферів на диск (якщо вже після читання даних зупинений раніше диск все одно розкрутився, чому б заодно не скинеш буфери?).

dirty_writeback_centisecs (12000) - квант часу між перевірками на наявність брудних буферів.

dirty_expire_centisecs (12000) - через скільки мілісекунд вважати буфери досить брудними для запису на диск.

dirty_ratio (10) - максимальний відсоток пам'яті, використовуваний для зберігання брудних буферів (при перевищенні вони будуть скинуті).

dirty_background_ratio (1) - мінімальний відсоток пам'яті, використовуваний для зберігання брудних буферів.

Важко сказати, які значення будуть оптимальними в конкретному випадку. В дужках вказані значення, які дозволять відкласти момент скидання буферів на досить тривалий період часу.

Якщо машина, що звільняється тобою від шуму, не повинна часто використовувати жорсткий диск, ти можеш налаштувати енергозберігаючий режим, при якому хард буде відключатися на час бездіяльності. Зробити це можна за допомогою відомої утиліти hdparm. Наприклад, так:

$ Sudo hdparm -B 1 -S 12 / dev / sda

Опція '-B 1' включає самий «агресивний» рівень заощадження енергії. Всього їх 254, з 1 по 127 з яких відрізняються тим, що призводять до зупинки вінчестера в разі потреби. Опція '-S 12' - це час, після якого жорсткий диск буде зупиняти шпиндель. Передбачено 255 значень: з 1 до 240 просто множаться на 5 секунд, а 0 - відключає зупинку шпинделя.

Менш згубний для жорсткого диска метод полягає в активації так званої функції Automatic Acoustic Management, завдяки якій позиционер головок буде видавати набагато менше шуму, ціною незначного зниження швидкості позиціонування головок (що, однак, веде до падіння продуктивності диска в середньому на 10%). Функція доступна в більшості більш-менш сучасних жорстких дисків і може бути включена за допомогою все того ж hdparm. Наприклад:

$ Sudo hdparm -M 128 / dev / sda

Ця команда активує самий тихий режим роботи вінчестера, за найбільш швидким закріплено значення 254. Вибираючи значення між цими двома порогами, ти зможеш підібрати оптимальне співвідношення шум / швидкість, але пам'ятай, що більшість жорстких дисків реально підтримує тільки два або три режими (наприклад, 128 - тихо, 254 - швидко, все, що між, буде або взагалі не працювати, або активувати один з двох режимів).

І тиша ...

Як ти зміг переконатися, знижувати рівень створюваного комп'ютером шуму програмно не тільки можна, а й треба. У більшості випадків цього буде цілком достатньо для того, щоб отримати кількість децибел, не дратівливе твій слух, без необхідності придбання дорогих кулерів і корпусів.