Як Windows використовує кілька ядер процесора?
Нещодавно до нас зв’язався читач і задав питання, на яке варто відповісти у статті.
Як Windows (і, можливо, всі ОС) користуються перевагами декількох ядер? Якщо ж ця функція вбудована в апаратне забезпечення, як ядра знають, які програми виконувати і коли? Я припускаю, що більше ядер краще, але як саме це працює? І чи є способи налаштування програм / Windows для кращого використання більшої кількості ядер?
Коли ви вмикаєте ПК, до того, як ОС навіть завантажилася, ваш процесор і материнська плата “рукостискаються”, через відсутність кращого терміну. Ваш процесор передає певну інформацію про власні робочі характеристики до материнської плати UEFI, яка потім використовує цю інформацію для ініціалізації материнської плати та завантаження системи. Якщо UEFI не може правильно ідентифікувати ваш процесор, ваша материнська плата зазвичай не завантажується. Кількість основних процесорів - це одна з характеристик, про яку повідомляють як UEFI, так і операційна система.
Одним з найважливіших компонентів операційної системи називається планувальник. Планувальник складається з будь-якого методу, який використовується ОС для призначення роботи ресурсам, таким як CPU та GPU, які потім виконують цю роботу. «Одиниця» роботи - найменший блок роботи, яким керує планувальник ОС - називається потоком. Якщо ви хочете зробити аналогію, ви можете порівняти нитку з одним кроком на конвеєрі. На крок вище нитки, ми маємо процес. Процеси - це комп’ютерні програми, які виконуються в одному або декількох потоках. У цій спрощеній заводській аналогії процес являє собою всю процедуру виготовлення виробу, тоді як нитка - це кожне окреме завдання.
Проблема: ЦП можуть одночасно виконувати лише один потік. Для кожного процесу потрібен нарешті один потік. Як ми покращуємо продуктивність комп’ютера?
Рішення: Процесори з тактовою частотою швидше.
Протягом десятиліть масштабування Деннарда було подарунком, який продовжував дарувати. Закон Мура проголосив, що ми зможемо збирати транзистори у все менший і менший простір, але масштабування Деннарда - це те, що дозволило їм досягти вищих і вищих тактових частот при менших напругах.
Якщо комп'ютер працює досить швидко, його нездатність обробляти більше одного потоку одночасно стає значно меншою проблемою. Хоча існує чіткий набір проблем, які неможливо розрахувати за менший час, ніж очікуваний час життя Всесвіту на класичному комп’ютері, є багато-багато-багато проблем, які можна точно розрахувати таким чином.
По мірі того, як комп’ютери стали швидшими, розробники створювали більш досконале програмне забезпечення. Найпростішою формою багатопоточності є грубозерниста багатопотоковість, при якій операційна система перемикається на інший потік, а не сидить і чекає результатів розрахунку. Це стало важливим у 1980-х роках, коли тактові частоти процесора та оперативної пам'яті почали розділятися, причому швидкість і пропускна здатність пам'яті зростали набагато повільніше, ніж тактова частота процесора. Поява кеш-пам’яті означало, що центральні процесори могли зберігати поруч невеликі колекції інструкцій для негайного зминання номерів, тоді як багатопотоковість забезпечувала, що центральний процесор завжди мав чим зайнятися.
Важливий момент: усе, про що ми вже обговорювали, стосується одноядерних процесорів. Сьогодні терміни багатопотоковість та багатопроцесорність часто розмовно вживаються, щоб означати одне і те ж, але це не завжди було так. Симетрична багатопроцесорність та симетрична багатопотоковість - це дві різні речі. Простіше кажучи:
SMT = ЦП може виконувати більше одного потоку одночасно, плануючи другий потік, який може використовувати блоки виконання, які в даний час не використовуються першим потоком. Intel називає цю технологію Hyper-Threading, AMD - просто SMT. В даний час як AMD, так і Intel використовують SMT для підвищення продуктивності процесора. Обидві компанії історично застосовували його стратегічно, пропонуючи його на одних продуктах, але не на інших. У наші дні більшість процесорів обох компаній пропонують ЗПТ. У споживчих системах це означає, що у вас є підтримка кількості ядер процесора * 2 потоки, або 8C / 16T, наприклад.
SMP = симетрична багатопроцесорна обробка. Процесор містить більше одного ядра процесора (або використовує багаторозетну материнську плату). Кожне ядро процесора виконує лише один потік. Кількість потоків, які ви можете виконати за тактовий цикл, обмежена кількістю ядер, які у вас є. Написано як 6C / 6T.
Багатопотоковість в основному одноядерному контексті раніше означала "Наскільки швидко ваш процесор може перемикатися між потоками", а не "Чи може ваш центральний процесор виконувати більше одного потоку одночасно?"
"Чи може ваша ОС запускати кілька програм одночасно без збоїв?" також було частим проханням.
Оптимізація робочого навантаження та ОС
Сучасні центральні процесори, включаючи мікросхеми x86, побудовані 20 років тому, реалізують те, що відоме як Out of Order Execution, або OoOE. Усі сучасні високопродуктивні ядра процесора, включаючи "великі" ядра смартфонів у big.Little, мають дизайн OoOE. Ці процесори повторно впорядковують інструкції, які вони отримують в режимі реального часу, для оптимального виконання.
ЦП виконує код, який ОС відправляє йому, але ОС не має нічого спільного з фактичним виконанням потоку інструкцій. Це внутрішньо обробляє ЦП. Сучасні процесори x86 переупорядковують отримані інструкції та перетворюють ці інструкції x86 у менші, схожі на RISC мікрооперації. Винахід OoOE допоміг інженерам гарантувати певні рівні продуктивності, не покладаючись повністю на розробників, щоб написати ідеальний код. Дозвіл центральному процесору змінювати порядок власних інструкцій також сприяє багатопотоковій продуктивності, навіть у одноядерному контексті. Пам’ятайте, центральний процесор постійно перемикається між завданнями, навіть коли ми про це не знаємо.
Однак центральний процесор не робить жодного планування. Це повністю залежить від ОС. Поява багатопоточних процесорів це не змінює. Коли вийшла перша споживча плата з двома процесорами (ABIT BP6), потенційним багатоядерним ентузіастам довелося запустити Windows NT або Windows 2000. Сімейство Win9X не підтримувало багатоядерну обробку.
Підтримка виконання на декількох ядрах центрального процесора вимагає, щоб ОС виконувала всі ті самі завдання управління пам’яттю та розподілом ресурсів, які вона використовує, щоб уникнути збоїв різних програм, з додатковим захисним діапазоном, щоб центральні процесори не помилялись.
Сучасний багатоядерний процесор не має "головного планувальника", який призначає роботу кожному ядру або розподіляє іншим чином робоче навантаження. Це роль операційної системи.
Чи можете ви вручну налаштувати Windows для кращого використання ядер?
Як загальне правило, ні. Було кілька конкретних випадків, коли Windows потрібно було оновлювати, щоб скористатися перевагами, вбудованими в новий процесор, але це завжди було те, що Microsoft доводилося виконувати самостійно.
Винятків із цієї політики небагато, але існує декілька:
Нові процесори іноді вимагають оновлення ОС, щоб ОС могла повною мірою скористатися можливостями обладнання. У цьому випадку насправді не існує варіант вручну, якщо ви не маєте на увазі встановлення оновлення вручну.
AMD 2990WX є чимось винятком із цієї політики. Процесор працює досить слабо під Windows, оскільки Microsoft не замислювалася про існування центрального процесора з більш ніж одним вузлом NUMA, і він не дуже ефективно використовує ресурси 2990WX. У деяких випадках є продемонстровані способи покращення продуктивності 2990WX за допомогою присвоєння потоків вручну, хоча я відверто рекомендую перейти на Linux, якщо у вас є такий, лише для загального спокою щодо проблеми.
3990X - ще більш теоретичний випадок. Оскільки Windows 10 обмежує групи процесорів 64 потоками, ви не можете виділити більше 50 відсотків ресурсів виконання 3990X на одне робоче навантаження, якщо програма не реалізує спеціальний планувальник. Ось чому 3990X насправді не рекомендується для більшості програм - він найкраще працює з візуалізаторами та іншими професійними програмами, які зробили цей крок.
Поза системами з найбільшим числом ядер, де деякі налаштування вручну теоретично можуть підвищити продуктивність, оскільки Microsoft ще не справді оптимізувала ці випадки використання, ні, ви нічого не можете зробити, щоб реально оптимізувати розподіл робочих навантажень Windows. Чесно кажучи, ви дуже не хочете, щоб це було. Кінцевим користувачам не слід займатися призначенням потоків вручну для оптимальної продуктивності, оскільки оптимальна конфігурація змінюватиметься залежно від того, які завдання обробляються ЦП у будь-який момент. Довгострокова тенденція у розробці процесора та ОС спрямована на тіснішу співпрацю між центральним процесором та операційною системою з метою кращого спрощення управління живленням та турборежимів.
Примітка редактора: Дякую Брюсу Боркоскі за пропозицію статті.
Читати далі
Apple: Mac Mini M1 використовує одну третину електроенергії процесора Intel
Apple опублікувала офіційні дані про споживання енергії на M1 Mac mini. Нова система використовує менше третини потужності аналогічної системи Intel.
Google використовуватиме камеру Pixel для вимірювання пульсу та дихання
Як і багато інших проектів машинного навчання Google, цей перший виходить на перший план для телефонів Pixel, і більше телефонів, ймовірно, отримають це рішення.
Медіасервери Plex використовуються для посилення DDoS-атак
Дослідники стверджують, що належним чином використаний сервер Plex може збільшити розмір DDoS-пакетів майже в п’ять разів, роблячи ці атаки набагато більшими. Зараз користувачі Plex не можуть багато з цим зробити.
Графічні процесори, що використовуються для видобутку криптографічних даних, можуть втратити продукти
Чи буде майнінг на графічному процесорі довгостроково знижувати його продуктивність? Виникли деякі докази, які свідчать про те, що це можливо, але існують проблеми з набором даних, які виключають твердий висновок.