Откуда пошли многоядерные процессоры
Для начала немного истории, без которой будет непонятна причина самого возникновения многоядерности. Дело в том, что еще двадцать лет назад у процессоров не было ни ядер, ни потоков в нынешнем понимании, а задачу повышения скорости обработки информации производители решали за счет увеличения тактовой частоты, которая на рубеже веков превысила 1 ГГц, а затем за 5 лет выросла еще почти в 4 раза. Достигалось это при помощи размещения в одном кристалле все большего числа миниатюрных транзисторов, формирующих вычислительные схемы процессора:
- в первом процессоре компании Intel их было 2300, размер каждого — 10 мкм;
- Intel 80286, на котором был построен компьютер IBM PC/AT, содержал 134 000 транзисторов с длиной затвора 1,5 мкм;
- в последний одноядерный серверный процессор Intel Xeon было вмонтировано уже 178 миллионов транзисторов, каждый из которых был в тысячу раз тоньше человеческого волоса (90-нм техпроцесс).
В 2005 году предел разрешающей способности оборудования, на котором изготавливали процессоры, был практически достигнут. Кроме того, при такой степени интеграции появились серьезные проблемы с отводом тепла. Уткнувшись в свой потолок, технология была вынуждена пойти по иному пути, и вот тогда заговорили о ядрах.
Что такое процессорные ядра
Следующий очевидный шаг — поставить на одну материнскую плату несколько процессоров и распределить нагрузку между ними. Такая реализация — распространенная вещь, особенно для серверных платформ, но она имеет свои недостатки: исполнительные устройства находятся далеко друг от друга, необходимо организовывать их совместную работу и доступ к памяти. Это требует наличия высокопроизводительных шин данных и негативно сказывается на габаритах, стоимости и энергопотреблении сервера.
Значит, схемы, которые исполняют разные части программы, нужно располагать как можно ближе друг к другу. Совсем хорошо, если они будут находиться в пределах одного чипа. Так появились процессоры с несколькими ядрами — вычислительными блоками, работающими независимо друг от друга. По сути, каждое ядро — это бывший отдельный процессор, способный выполнять свою последовательность инструкций.
На что влияет количество ядер процессора
От того, сколько ядер имеется в процессоре, напрямую зависит его производительность. Для сервера это особенно важно, потому что он должен одновременно обрабатывать множество запросов от рабочих станций и периферийного оборудования. Современные операционные системы и клиентские приложения оптимально распределяют потоки команд на все доступные ядра процессора. То есть сервер работает во столько раз быстрее (по сравнению с одноядерным), сколько ядер есть у его процессора.
Что такое потоки в процессоре
Если представить себе процессорное ядро в виде конвейера, на который постоянно выкладываются инструкции для вычислений, можно понять, что максимальное быстродействие будет достигнуто в том случае, когда на каждом такте этому ядру есть, что делать, то есть в его регистрах присутствует вся необходимая ему информация.
На практике так бывает далеко не всегда. Физические ядра процессора могут простаивать, причем по разным причинам. Например, если во встроенном кеше не оказалось нужных данных (кеш-промах), и необходимо ждать, пока они поступят из внешней среды:
- из кеша третьего уровня. Он значительно медленнее, чем L1 и L2. Задержка может составлять 40–60 тактов CPU;
- из оперативной памяти. Она еще медленнее, поэтому число тактов простоя может измеряться сотнями;
- с жесткого диска. Время ожидания в этом случае — целая вечность (по меркам процессора). К счастью, подобная ситуация встречается довольно редко.
Чтобы избежать нерационального использования ресурсов, производители усовершенствовали архитектуру ядра, добавив дополнительный контроллер и набор регистров для создания второго канала обработки данных. Пока основной процесс простаивает, в этот канал из очереди поступает другая задача, которой временно отдается вся доступная вычислительная мощность.
Эти каналы (основной и дополнительный) и называются потоками. У каждого ядра их два, поэтому в большинстве современных моделей Intel и AMD число потоков вдвое превышает количество ядер процессора.
Разница между ядрами и потоками процессора
Для того, чтобы окончательно разобраться, чем отличаются ядра от потоков, важно запомнить, что каждое ядро — это физически обособленная единица производительности серверного процессора.
Напротив, потоки — это логические каналы, которые выделяются программно для того, чтобы обеспечить параллельное выполнение нескольких задач на одном ядре. Пропускная способность ядра от наличия второго потока не увеличивается. Если у процессора, например, 8 ядер и 16 потоков, то одновременно и по-настоящему независимо он может обслуживать только 8 разных процессов. Дополнительные 8 виртуальных каналов служат лишь для оптимизации работы восьми основных.
Что важнее для производительности сервера: ядра или потоки
Все, конечно, зависит от конкретной реализации, но в общем случае важнее мультиядерность. То есть 8-ядерный процессор без Hyper-Threading будет работать быстрее, чем 4-ядерный с дополнительными потоками. Особенно большое значение количество ядер имеет в высоконагруженных проектах:
- терминальный сервер. На рабочих местах стоят простые устройства удаленного доступа, а управление и все вычисления делегированы серверу;
- виртуализация. На одном сервере работает несколько виртуальных машин, имитирующих разные программные среды;
- обработка больших объемов данных. Сервер обслуживает локальную сеть компании, которая занимается 3D-моделированием, рендерингом, созданием IT-приложений с монолитной архитектурой и т. д.
Итого, как уже говорилось выше, чем больше ядер, тем быстрее работает процессор. Больше того, если на какое-то ядро поступает задача, требующая повышенной вычислительной мощности, его тактовая частота временно увеличивается (конечно, в рамках допустимого нагрева) за счет снижения скорости выполнения операций другими ядрами. Эта технология называется Turbo Boost (у Intel) или Precision Boost (у AMD).
Что касается потоков, то они будут играть важную роль, если на сервере выполняется много фоновых процессов. Это может быть архивация файлов, работа с офисными приложениями, ресурсоемкий корпоративный чат и т. д. Поддержка Hyper-Threading поможет также, когда по сети производится обработка медиафайлов (например, тот же рендеринг), так как в соответствующие клиент-серверные приложения уже встроены эффективные алгоритмы распараллеливания нагрузки. По данным компании Intel, многопоточность, реализованная в рамках технологии Hyper-Threading, позволяет получить до 30% прироста производительности, что при высокой нагрузке весьма неплохо.
Стоит отметить, что чаще всего многопоточность вы получаете бонусом, поскольку она есть в большинстве современных серверных процессоров по умолчанию. Поэтому основное внимание надо уделить тому, сколько ядер в процессоре. Слишком много (сейчас у AMD доступны процессоры с 64 ядрами, на подходе решения на 96) их тоже не нужно, это лишняя трата денег в том случае, если объем выполняемых задач будет не способен загрузить ядра на 100%. Выбор конфигурации в данном случае должен зависеть от ожидаемого объема вычислений.
Если вам требуется профессиональная консультация о том, как правильно сконфигурировать сервер, обращайтесь к менеджерам интернет-магазина «Маркет.Марвел». Мы поможем подобрать оптимальное оборудование для решения любых ваших бизнес-задач.