Статьи

Формула успіху, або Секрети професійної оптимізації кремнієвих коней в прикладах і картинках

  1. Вступ
  2. Налаштування системи за допомогою Диспетчера Завдань
  3. Оцінка потужності процесора
  4. Оцінка необхідної кількості оперативної пам'яті
  5. Практичний приклад тюнінга системи
  6. системний Монітор
  7. В ядрі процесора
  8. Налаштування системи за допомогою Профілювальники
  9. Висновок

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

Ви хочете зробити свій кремниевому одному «апгрейд»? Чудово! Але чи впевнені ви, що зможете безпомилково визначити, який з численних вузлів комп'ютера дійсно потребує заміни? Марно купувати більш швидкий процесор, якщо вузьким місцем системи є пропускна здатність підсистеми пам'яті і, відповідно, навпаки. Діючи навмання, ви ризикуєте викинути на вітер пристойну суму грошей, перш ніж досягнете очікуваного результату.

Тим часом, операційні системи сімейства Windows і процесорні системи класу Pentium підтримують так звані лічильники продуктивності (performance counters), що дозволяють швидко і достовірно визначити головних винуватців «гальмування». Хочете навчитися ними користуватися? Тоді ця стаття розповімо вам, як!

Вступ

Строго кажучи, те, чим ми будемо зараз займатися, не є тюнинг системи в загальноприйнятому розумінні. Швидше, це спортивний біг з перешкодами. Професіонали, які займаються оптимізацією, не мислять своє життя без цілого комплексу програмно-апаратного забезпечення, що дозволяє обмацати кожну сигнальну трасу, кожну життєво важливу артерію комп'ютера. Складність управління всім цим обладнанням може повалити в жах навіть бувалих фахівців. Але саме так створюються комп'ютери brandname-виробників.

Ми ж з вами - люди маленькі, і запити у нас куди як більш скромні. Презентаційна точність юстування системи нам не потрібна. Досить лише зробити її більш-менш працездатною і збалансованою. На щастя, сучасні процесори і ОС настільки уми, що необхідний мінімум вимірювальних засобів в них уже є.

Налаштування системи за допомогою Диспетчера Завдань

«Диспетчер Завдань», вбудований в операційні системи сімейства Windows NT і викликається після натискання клавіш Ctrl-Alt-Del, являє собою потужний засіб моніторингу системи, яке, до того ж, завжди під рукою. (В операційних системах сімейства Windows 9x Диспетчер Завдань відсутня, але його замінює утиліта WinTop з набору Microsoft Resource Kit.)

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

Оцінка потужності процесора

Швидше, ще швидше ... і ось ми буквально летимо, накручуючи мегагерци на кардан, пролітаючи по трасі зі швидкістю напівсонної черепахи, ні на йоту не зрушивши з того з а мого місця, де вона була рік, а то й два роки тому. На жаль! Занадто швидкий процесор переважній більшості додатків просто не потрібен, і збільшення тактової частоти вдвічі в кращому випадку збільшує продуктивність системи лише на третину. Подивіться: якщо індикатор завантаження ЦП ліниво осциллирует біля нульової позначки, або крива завантаження нагадує лапаті гірський ланцюг на кшталт місячних Апеннін (або земного Кавказу), - обчислювальної потужності вашого процесора для вирішення поставлених перед ним завдань більш ніж достатньо! Нарощування тактової частоти злегка звузить ширину підстави «піків», але загальний час виконання завдання виявиться практично незмінним.

Реальне збільшення продуктивності досягається лише на тих завданнях, чиї потреби в процесорному часу досягають 100% (наприклад, пошук регулярних виразів, обробка зображень і т. Д.). Однак ніяких гарантій того, що Диспетчер Завдань не лже, у нас немає. Показник продуктивності, іменований «завантаження процесора», насправді являє собою готовність віддачі квантів часу усіма іншими процесами системи. Висока завантаженість процесора може бути викликана і дисковою підсистемою, і підсистемою оперативної пам'яті, і ... та багато ще що!

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

Попутно зауважимо, що неправильно спроектоване додаток здатне пожирати жахливе кількість процесорного часу навіть при повному байдикуванні. Цим, зокрема, грішать ранні версії словника Context і перекладача Socrat, що викликають 100-відсоткове завантаження центрального процесора і, як наслідок, сильне гальмування системи. Всі версії Microsoft Word (аж до XP включно) також мають один дуже неприємний дефект проектування, при певних обставинах призводить до 92-95-процентному завантаженні ЦП. Причому збільшення тактової частоти процесора не виправляє ситуацію і практично не збільшує загальну продуктивність системи! Єдино правильним рішенням буде повна відмова від «неправильних» додатків або перехід на їх альтернативні версії.

Якщо стабільно працююча система раптом без видимих ​​причин починає гальмувати, викличте Диспетчер Завдань і, клацнувши мишкою по вкладці «Процеси», подивіться - який з процесів поглинає найбільшу кількість часу (колонка ЦП).

Оцінка необхідної кількості оперативної пам'яті

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

Якщо при перемиканні між раніше запущеними завданнями відбувається звернення до жорсткого диска, значить, кількості наявної в розпорядженні системи оперативної пам'яті більш ніж недостатньо, і має сенс її наростити, встромивши в материнську плату ще один модуль. Але от питання: а якого цей модуль повинен бути обсягу? Як дізнатися, скільки саме мегабайтів вам потрібно? Немає нічого простіше! Викликаємо Диспетчер Завдань, переходимо до вкладки «Швидкодія», знаходимо графу «Виділена пам'ять», а в ній - поточний і пікову кількість виділеної пам'яті за останній сеанс роботи з системою.

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

Якщо ви хочете заощадити свої гроші, то просто стежте за положенням індикатора «Пам'ять» (вкладка «Швидкодія»), відзначаючи його «среднемаксімальние» значення. Попрацювавши в такому режимі тиждень-другий, ви зможете точно з'ясувати, скільки саме пам'яті вам реально необхідно. Якщо ж ви цінуєте свій час дорожче, ніж гроші, то встановіть в комп'ютер максимальну кількість виділялася за кілька останніх сеансів оперативної пам'яті (рядок «Пік»).

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

Графа «Виділена пам'ять» якраз і відображає кількість виділеної, тобто зарезервованої пам'яті, але не дає прямої відповіді на питання, використовується ця пам'ять чи ні. Для прояснення ситуації слід звернутися до графи «Фізична пам'ять», що містить серед іншої інформації доступний обсяг оперативної пам'яті. Чим він більший - тим краще. Вважається, що якщо вільно хоча б 50 або 100 мегабайтів фізичної пам'яті, то потреби системи в ній повністю задоволені. Насправді, це припущення в корі невірно. Якщо перед зверненням до Диспетчера Завдань ви завершите яке-небудь «монстроідальное» додаток, то вся зайнята ним пам'ять виявиться вільної і залишатиметься такою, поки ви не переключіться на додаток, повністю або частково «висвопленное» на диск. Наочний доказ того приведено нижче (див. Рис). Дивіться: в системі встановлено 256 МБ пам'яті, з них 235 МБ виділено, а 98 МБ - вільно. Погодьтеся, що 235 + 98> 256! Тому слід спиратися не на поточне, а на мінімальну кількість вільної фізичної пам'яті. Тримайте очі широко розкритими і періодично поглядайте на Диспетчер Завдань в ході роботи з іншими додатками.

Практичний приклад тюнінга системи

Один з приятелів автора якось поскаржився на свій Pentium 4: мовляв, працює він повільно, та й відеофільми йдуть з великим гальмуванням, «ривками». Розгін процесора, супроводжуваний панічної перевстановлення модулів пам'яті і копирсання налаштувань BIOS, нічого не дав, і вкрай зневірений експериментатор вирішив запросити до свого комп'ютера мене (за принципом: якщо я його зламаю, гірше вже не буде).

Запуск Диспетчера Завдань показав, що процесор тут взагалі ні до чого, оскільки його завантаження стабільно трималася на рівні ~ 40%, і більшу частину часу він проводив у сплячці, охолоджуючи свої нутрощі від перегріву (див. Рис.). Отже, найбільш імовірним винуватцем «гальм» ставала дискова підсистема, і свідчення Системного Монітору повністю підтвердили це припущення: моменти «смикання» зображення добре узгоджувалися з «вильотами» графіка довжини черги запитів на читання [диска]. Тобто, привід час від часу впадав у якийсь «ступор», не реагуючи ні на які спроби звернення. Причина? Запуск ASUS PC Probe виявив значну просідання напруги на лінії +12 В, потенціал якої склав всього +10,2 В. Комп'ютер все ще працював, але - нестабільно. Після заміни блоку живлення ситуація нормалізувалася, і все гальма негайно зникли.

системний Монітор

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

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

Пуск -> Налаштування -> Панель Управління -> Адміністрування -> Системний Монітор. (В Windows 9x Системний Монітор теж є, але простіше, шукайте його в меню службових програм.) Тепер викликаємо контекстне меню посередині з'явилася консолі, вибираємо в ньому пункт «Додати лічильники» і додаємо три наступних лічильника: лічильник завантаженості процесора (об'єкт: процесор) , лічильник активності диска (об'єкт: фізичний диск) і лічильник поточної довжини черги диска (об'єкт той же). Додавши всі необхідні лічильники, ми повертаємося до головного вікна Системного Монітору, натискаючи кнопку «Закрити». Кнопка «Пояснення» видає коротку довідку по поточному лічильнику продуктивності - звертайтеся до неї всякий раз, коли зустрінетеся з чимось незрозумілим.

«Процес пішов!» - як кажуть в Одесі. Системний Монітор починає протоколювання, процарапивая на екрані три криві. Зелена відповідає за завантаженість диска, червона - за завантаженість ЦП, блакитна - за довжину черги запитів на диск (зрозуміло, такі кольори кривим призначаються за умовчанням - вони можуть бути змінені вручну і будуть переплутані, якщо ви додавали лічильники в іншому порядку).

Лівий малюнок (див. Нижче) ілюструє приклад добре збалансованої системи. Дивіться: завантаження жорсткого диска тримається на досить високому рівні. Це означає, що тривалість евристичного аналізу [антивірусним сканером] одного файлу порівнянна з часом читання іншого. Причому процесор працює на межі. Зверніть увагу на те, як добре збігаються піки завантаження процесора з провалами активності диска! Заміна диска на більш швидкий практично не збільшить продуктивності, оскільки б о більшу частину часу цей диск буде простоювати. Не вірите? А ось переведіть свій погляд на правий графік, знятий на тій же з а мій системі, але вже після апгрейда вінчестера.

Завантаження процесора різко зросла, а на графіку активності диска з'явилися довгі і глибокі провали, схожі на Великий Каньйон. Причому більш швидкий диск виявився більш «швидким» тільки наполовину. Швидкість лінійного читання явно зросла, але разом з нею зросла і час пошуку. На підставі чого був зроблений такий висновок? В цьому нам допомогла розібратися блакитна крива, яка відображає динаміку зростання довжини черги запитів до диска. Маєте доступ до цього високий пік посередині? Так, той самий, що доводиться на спад завантаження процесора, але на максимум дискової активності! У цьому місці вінчестер стрекотів як очманілий, але все одно не встигав обробляти надходять до нього запити.

Таким чином, для збільшення продуктивності оновленої системи нам потрібно замінити процесор на більш потужний. Стоп! Я не сказав «швидший»! Ми ще не знаємо напевно, в чому справжня причина «гальм»: може бути, бракує ємності кеш-пам'яті, а може - тактової частоти. Детальніше про це ми поговоримо в розділі «У ядрі процесора», а зараз повернемося до наших баранів. Очевидно, що подібна методика може бути застосована не тільки до оптимізації системи під антивірусне сканування, але і до її балансуванню під будь-яку іншу задачу.

В ядрі процесора

Процесори сімейства Pentium мають неймовірно розвинену систему моніторингу, відстежуючи практично всі більш-менш значущі події, як-то: звернення до пам'яті, помилки передбачення переходів, витіснення даних з кеш-пам'яті в оперативну пам'ять і т. Д. Процесор перестає бути монолітним кристалом кремнію , це вже не річ в собі! Тепер не потрібно гадати, швидкодії яких саме вузлів нам найбільше не вистачає, досить лише сказати лічильників продуктивності «Фас!» І, давши їм нетривалий час на збір статистики, проаналізувати видобутий результат.

Тепер до справи. Лічильників продуктивності всього два, і з прикладного рівня вони за умовчанням недоступні. Але хіба справжніх хакерів такими заборонами зупиниш? Для роботи з лічильниками продуктивності створено величезну кількість різноманітних програм, розкиданих по всій Мережі. сходіть на сайт Марка Русиновича і скачайте звідти утиліту під назвою CPUMon розміром всього в 40 КБ.

Розібратися з нею нескладно (не забудьте тільки, що під Windows NT вона вимагає наявності прав адміністратора). У вікні «Class» ми вибираємо цікавить нас клас подій, а у вікні «Counter» вказуємо, яка з подій ми, власне, хочемо вважати. І так - для обох лічильників.

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

Як ми будемо діяти? У вікні «Class» лічильника 0 ми вибираємо «Bus» (шина), а у вікні «Counter» - BUS_TRAN_MEN. Цей лічильник буде відстежувати кількість звернень до пам'яті, пропущених через шину. Для лічильника 1 в вікні «Class» ми виберемо «Cache» (кеш), а у вікні «Counter» - DATA_MEM_REFS. Цей лічильник буде фіксувати загальна кількість звернень до пам'яті.

Запустивши піддослідна додаток, натискаємо «Start» і даємо лічильників кілька секунд для накопичення статистично достовірної інформації. Коли ж наше терпіння вичерпається, глибоко утопимо «Stop» і розглянемо з'явилося на екрані діалогове вікно.

Приклад добре збалансованої системи - більшість запитів до пам'яті обробляється локально

Так ... 1180 млн. Звернень до пам'яті за неповні 7 секунд, причому 30 млн. З них пройшли через шину і адресувалися до основної оперативної пам'яті, а всі інші були оброблені локально.

Отже, ємності кеш-пам'яті цілком достатньо, і головний камінь спотикання - тактова частота ядра процесора. (Увага! Тут неявно мається на увазі, що ми говоримо лише про процесорах однієї архітектури, в іншому випадку аналіз ризикує стати взаємно суперечливим і неоднозначним!)

А ось нижче наведений приклад системи з більшою тактовою частою, але урізаною кеш-пам'яті другого рівня (смертельний бій: Celeron проти Pentium III «Coppermine» - це якщо бути вже зовсім точним). 290 млн. Звернень до пам'яті за 8 секунд, причому мало не половина з них (120 млн.) Була пропущена через шину, і лише друга половина - оброблена локально. Чому кількість загальних звернень до пам'яті за одиницю часу таке різне? Так адже основна оперативна пам'ять - це вам не кеш, і друга система моторошно гальмує, пересуваючись зі швидкістю черепахи.

Для збільшення продуктивності ми повинні або придбати процесор з більш ємним кешем (і це найкраще рішення з усіх можливих), або збільшити тактові частоти процесорної шини і оперативної пам'яті, або ж перейти до використання двоканального чіпсета (це рекомендація загального характеру, яка не має прямого відношення до ситуації з процесорами часів ядра «Coppermine»).

Детальніше з лічильниками продуктивності ви можете познайомитися в керівництві Intel Architecture Software Developer's Manual Volume 3: System Programming Guide, електронну копію якого можна безкоштовно завантажити з сервера компанії Intel. Повний опис всіх наявних лічильників зайняло б занадто багато місця і тому тут не наводиться.

Налаштування системи за допомогою Профілювальники

Ще б про льшие можливості для тонкого тюнінга системи відкриває профілювання. Кращий профілювальник всіх часів і народів - це, безперечно, VTune , Розроблений компанією Intel. До сих пір, кажучи про визначення слабких місць системи, ми весь час не брали до уваги той факт, що слабким місцем може бути не тільки «залізо», а й, наприклад, драйвера. Також ми обійшли стороною питання вибору графічної підсистеми і оцінки її впливу на загальну продуктивність.

Що ж! Настала пора заповнити цю прогалину! З'єднавшись з FTP-сервером Intel і поставивши VTune на скачку (а це ціла туша на сто з гаком метрів вагою), відвідайте будь-яку книгарню вашого міста в пошуках відповідної літератури. Грамотна робота з профілювальником вимагає певної підготовки, і метод «тику» тут навряд чи допоможе. Непогане практичний посібник з VTune для початківців можна знайти, наприклад, тут .

Приклад результатів профілювання одного з додатків наведено нижче. За вертикальної осі відкладається час, проведений процесором в кожному з модулів системи, а по горизонтальній розташовуються самі модулі. Як видно, левова частка загального часу виконання доводиться на ядро ​​(~ 25%), за ним з невеликим відривом слідує системну бібліотеку NTDLL.DLL і прикладної процес парольного перебиральників PSWD.EXE (~ 20% і 18% відповідно). Частка впливу графічної підсистеми в особі бібліотеки G400.DLL (Matrox Millennium G450 Dual Head, для довідки) становить менше 5% і з усією очевидністю ні в якій оптимізації не потребує. Драйвер файлової системи: - NTFS.SYS - не забрав взагалі жодного відсотка часу, значить, швидкодія жорсткого диска в даному випадку також некритично.

Отже, найбільш вузьке місце системи локалізовано в NTOSKRNL.EXE, що, звичайно, далеко не нецікаво саме по собі, але для відповіді на одвічне питання «Хто винен і що робити?» Ми повинні заглянути всередину ядра! У VTune ця операція здійснюється подвійним клацанням миші по відповідному [ядру] прямокутника. Перш здавалося монолітним, ядро ​​раптово розщеплюється на з'їдений ерозією гірський кряж з високими піками і глибокими западинами. Чим вище пік, тим більше він пожирає процесорних тактів. Найвищі гори пофарбовані червоним кольором, так що на цій місцевості дуже легко орієнтуватися.

Підігнавши курсор миші до Евересту системи, ми, по-перше, дізнаємося, з якою системної функцій він пов'язаний (її ім'я з'явиться праворуч від курсора), а по-друге, двічі клацнувши по піку правою клавішею миші, ми потрапимо всередину дізассемблерного коду ... Ой , немає. У дізассемблерний ліс нам годі й говорити. Обмежимося іменами функцій. Як правило, за описом функції легко зрозуміти, чи пов'язана вона з підсистемою введення / виводу, пам'яттю або обчислювальними процесорними ресурсами (опис більшості системних функцій Windows можна знайти сервері MSDN ). В даному випадку основний винуватець усіх гальм - швидкодія оперативної пам'яті, а точніше - відсутність оного (подробиці ви знайдете в керівництві по VTune, посилання на яке вже була дана вище), і тому перехід на пам'ять з більш високою тактовою частотою виявляється кращим засобом збільшення продуктивності системи.

Саме чудове, що VTune здатний емулювати безліч різних процесорів. Припустимо, ви працюєте на Pentium III і хочете дізнатися, який виграш дасть перехід на Pentium 4. Звичайно, оцінки такого роду дуже приблизні (адже це віртуальний процесор, і такти у нього віртуальні), проте деяку інформацію для роздумів вони все-таки дають.

Висновок

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

Ви хочете зробити свій кремниевому одному «апгрейд»?
Але чи впевнені ви, що зможете безпомилково визначити, який з численних вузлів комп'ютера дійсно потребує заміни?
Хочете навчитися ними користуватися?
Що вміє Диспетчер Завдань?
Але от питання: а якого цей модуль повинен бути обсягу?
Як дізнатися, скільки саме мегабайтів вам потрібно?
Причина?
Не вірите?
На підставі чого був зроблений такий висновок?
Маєте доступ до цього високий пік посередині?

Новости