Введение
Равное распределение всех ресурсов несколькими идентичными процессорами.
Симметричная многопроцессорность или многопроцессорность с общей памятью (SMP) – это аппаратная и программная архитектура многопроцессорного компьютера, в которой два или более идентичных процессора подключены к единой совместно используемой основной памяти, имеют полный доступ ко всем устройствам ввода-вывода и управляются единственным экземпляром операционной системы, который относится ко всем процессорам одинаково, не резервируя ни один для специальных целей. Большинство современных многопроцессорных систем используют архитектуру SMP. В случае многоядерных процессоров архитектура SMP применяется к ядрам, рассматриваемым как отдельные процессоры. Профессор Джон Д. Кубиатович традиционно считает, что SMP-системы содержат процессоры без кэш-памяти. Каллер и Пал Сингх в своей книге "Параллельная компьютерная архитектура: аппаратно-программный подход" (1998) отмечают: "Термин SMP широко используется, но может вносить некоторую путаницу. […] Более точное описание SMP – это многопроцессор с общей памятью, где стоимость доступа к ячейке памяти одинакова для всех процессоров, то есть имеет единую стоимость доступа при обращении непосредственно к памяти. Если ячейка находится в кэше, доступ будет быстрее, но время доступа к кэшу и время доступа к памяти одинаковы для всех процессоров". Системы SMP – это тесно связанные многопроцессорные системы с пулом однородных процессоров, работающих независимо друг от друга. Каждый процессор, выполняющий различные программы и обрабатывающий различные наборы данных, имеет возможность совместно использовать общие ресурсы (память, устройства ввода-вывода, систему прерываний и т. д.), соединенные посредством системной шины или коммутационной матрицы.
Дизайн
Системы SMP имеют централизованную общую память, называемую основной памятью (MM), работающую под единой операционной системой с двумя или более однородными процессорами. Обычно каждый процессор имеет выделенную частную высокоскоростную память, известную как кэш-память (или кэш), для ускорения доступа к данным в основной памяти и снижения трафика системной шины. Процессоры могут быть соединены между собой с помощью шин, кроссбарных коммутаторов или межсоединений в виде сети на кристалле. Узким местом масштабируемости SMP при использовании шин или кроссбарных коммутаторов является пропускная способность и энергопотребление межсоединений между различными процессорами, памятью и дисковыми массивами. Архитектура сети (mesh) позволяет избежать этих узких мест и обеспечивает почти линейную масштабируемость для значительно большего числа процессоров, но в ущерб программируемости. С этим типом архитектуры остаются серьезные задачи программирования, поскольку она требует двух различных режимов программирования: один для самих процессоров и один для межсоединений между ними. Единый язык программирования должен быть способен не только разделять нагрузку, но и учитывать локальность памяти, которая критична в архитектуре на основе сети. IBM предлагала компьютерные системы с двумя процессорами на базе System/360 Model 65 и тесно связанных моделей 67 и 67–2. Операционными системами, работавшими на этих машинах, были OS/360 M65MP и TSS/360. Другое программное обеспечение, разработанное в университетах, в частности, Michigan Terminal System (MTS), использовало оба процессора. Оба процессора могли получать доступ к каналам данных и инициировать ввод/вывод. В OS/360 M65MP периферийные устройства обычно могли быть подключены к любому процессору, поскольку ядро операционной системы работало на обоих процессорах (хотя и с "большой блокировкой" вокруг обработчика ввода/вывода). Супервизор MTS (UMMPS) имеет возможность работать на обоих процессорах IBM System/360 модели 67–2. Блокировки супервизора были небольшими и использовались для защиты отдельных общих структур данных, к которым можно было одновременно обращаться с любого процессора. Другие мэйнфреймы, поддерживавшие SMP, включали UNIVAC 1108 II, выпущенный в 1965 году и поддерживавший до трех процессоров, а также GE 635 и GE 645, хотя GECOS на многопроцессорных системах GE 635 работал в асимметричном режиме, в отличие от Multics на многопроцессорных системах GE 645, который работал в симметричном режиме. Начиная с версии 7.0 (1972), операционная система TOPS 10 от Digital Equipment Corporation реализовала функцию SMP, а первой системой, работавшей с SMP, была система DECSystem 1077 с двумя процессорами KI10. Позднее система KL10 могла объединять до 8 процессоров в режиме SMP. В отличие от этого, первая многопроцессорная система VAX DEC, VAX 11/782, была асимметричной, но более поздние многопроцессорные системы VAX были SMP. Ранние коммерческие реализации Unix SMP включали Sequent Computer Systems Balance 8000 (выпущен в 1984 году) и Balance 21000 (выпущен в 1986 году). Обе модели были основаны на 10 МГц процессорах National Semiconductor NS32032, каждый из которых имел небольшой кэш с прямой записью, подключенный к общей памяти для формирования системы с общей памятью. Еще одной ранней коммерческой реализацией Unix SMP была система NUMA Honeywell Information Systems Italy XPS 100, разработанная Дэном Гиеланом из VAST Corporation в 1985 году. Ее конструкция поддерживала до 14 процессоров, но из-за электрических ограничений самой продаваемой версией была система с двумя процессорами. Операционная система была получена и портирована VAST Corporation из кода AT&T 3B20 Unix SysVr3, используемого внутри AT&T. Ранее существовали некоммерческие порты UNIX для многопроцессорной обработки, включая порт под названием MUNIX, созданный в Военно-морской аспирантуре в 1975 году.
<blockquote>Serious programming challenges remain with this kind of architecture because it requires two distinct modes of programming; one for the CPUs themselves and one for the interconnect between the CPUs. A single programming language would have to be able to not only partition the workload, but also comprehend the memory locality, which is severe in a mesh based architecture. IBM offered dual processor computer systems based on its System/360 Model 65 and the closely related Model 67 and 67–2. The operating systems that ran on these machines were OS/360 M65MP and TSS/360. Other software developed at universities, notably the Michigan Terminal System (MTS), used both CPUs. Both processors could access data channels and initiate I/O. In OS/360 M65MP, peripherals could generally be attached to either processor since the operating system kernel ran on both processors (though with a "big lock" around the I/O handler). The MTS supervisor (UMMPS) has the ability to run on both CPUs of the IBM System/360 model 67–2. Supervisor locks were small and used to protect individual common data structures that might be accessed simultaneously from either CPU. Other mainframes that supported SMP included the UNIVAC 1108 II, released in 1965, which supported up to three CPUs, and the GE 635 and GE 645, although GECOS on multiprocessor GE 635 systems ran in a master slave asymmetric fashion, unlike Multics on multiprocessor GE 645 systems, which ran in a symmetric fashion. Starting with its version 7.0 (1972), Digital Equipment Corporation's operating system TOPS 10 implemented the SMP feature, the earliest system running SMP was the DECSystem 1077 dual KI10 processor system. Later KL10 system could aggregate up to 8 CPUs in a SMP manner. In contrast, DECs first multi processor VAX system, the VAX 11/782, was asymmetric, but later VAX multiprocessor systems were SMP. Early commercial Unix SMP implementations included the Sequent Computer Systems Balance 8000 (released in 1984) and Balance 21000 (released in 1986). Both models were based on 10 MHz National Semiconductor NS32032 processors, each with a small write through cache connected to a common memory to form a shared memory system. Another early commercial Unix SMP implementation was the NUMA based Honeywell Information Systems Italy XPS 100 designed by Dan Gielan of VAST Corporation in 1985. Its design supported up to 14 processors, but due to electrical limitations, the largest marketed version was a dual processor system. The operating system was derived and ported by VAST Corporation from AT&T 3B20 Unix SysVr3 code used internally within AT&T. Earlier non commercial multiprocessing UNIX ports existed, including a port named MUNIX created at the Naval Postgraduate School by 1975.
Применение
Системы разделения времени и серверные системы часто могут использовать SMP без изменений в приложениях, так как они могут выполнять несколько процессов параллельно, а система с более чем одним процессом может запускать различные процессы на разных процессорах. На персональных компьютерах SMP менее эффективен для приложений, которые не были модифицированы. Если система редко запускает более одного процесса одновременно, SMP полезен только для приложений, адаптированных для многопоточной (многозадачной) обработки. Программное обеспечение может быть разработано или модифицировано для использования нескольких потоков, чтобы эффективно использовать несколько процессоров. Многопоточные программы также могут использоваться в системах разделения времени и серверах, поддерживающих многопоточность, что позволяет им в большей степени использовать преимущества нескольких процессоров.
Преимущества/недостатки
В современных SMP-системах все процессоры тесно связаны внутри одного корпуса с помощью шины или коммутатора; в более ранних SMP-системах один процессор занимал целый шкаф. Некоторые из общих компонентов включают глобальную память, диски и устройства ввода-вывода. На всех процессорах работает только одна копия операционной системы, и операционная система должна быть разработана с учетом этой архитектуры. Основные преимущества заключаются в экономически эффективных способах повышения производительности. Для решения различных задач SMP использует несколько процессоров для работы над одной проблемой, что известно как параллельное программирование. Однако масштабируемость SMP ограничена из-за когерентности кэша и общих ресурсов.
Программирование
Системы с однопроцессорной архитектурой и SMP требуют различных методов программирования для достижения максимальной производительности. Программы, работающие на SMP-системах, могут демонстрировать повышение производительности, даже если они были написаны для однопроцессорных систем. Это происходит потому, что аппаратные прерывания обычно приостанавливают выполнение программы, а ядро, обрабатывающее эти прерывания, может выполняться на свободном процессоре. В большинстве приложений (например, в играх) эффект проявляется не столько в увеличении производительности, сколько в более плавной работе программы. Некоторые приложения, особенно средства разработки программного обеспечения и некоторые проекты распределенных вычислений, выполняются быстрее во столько раз, в сколько примерно равно количество дополнительных процессоров. (Компиляторы сами по себе являются однопоточными, но при сборке программного проекта, состоящего из нескольких модулей, если каждый модуль обрабатывается независимо, это создает ситуацию с тривиальным параллелизмом во всем проекте, позволяя почти линейно масштабировать время компиляции. Проекты распределенных вычислений изначально спроектированы с учетом параллельности.) Системные программисты должны обеспечить поддержку SMP в операционной системе, иначе дополнительные процессоры будут простаивать, и система будет функционировать как однопроцессорная. Системы SMP также могут усложнить работу с наборами инструкций. Однородные процессорные системы обычно требуют дополнительных регистров для "специальных инструкций", таких как SIMD (MMX, SSE и т. д.), в то время как неоднородные системы могут использовать различные типы аппаратного обеспечения для разных инструкций и задач.
Выступление
Когда одновременно выполняется более одной программы, система SMP демонстрирует значительно более высокую производительность, чем однопроцессорная система, поскольку различные программы могут выполняться на разных процессорах одновременно. В отличие от этого, асимметричная мультипроцессорность (AMP) обычно позволяет только одному процессору выполнять программу или задачу в каждый момент времени. Например, AMP может использоваться для назначения конкретных задач процессорам в зависимости от приоритета и важности их завершения. AMP была разработана раньше SMP в плане обработки нескольких процессоров, что объясняет отсутствие повышения производительности, как в приведенном примере. В ситуациях, когда среда SMP обрабатывает большое количество задач, администраторы часто сталкиваются с потерей эффективности аппаратных ресурсов. Для планирования задач и других функций компьютера были разработаны программные средства, позволяющие достичь максимальной загрузки процессора. Качественное программное обеспечение может добиться этого максимума, планируя работу каждого процессора отдельно, а также интегрируя несколько SMP-машин и кластеров. Доступ к оперативной памяти осуществляется последовательно, и это, наряду с проблемами обеспечения когерентности кэша, приводит к тому, что производительность незначительно отстает от увеличения количества процессоров в системе.
Альтернативы
SMP использует единую общую системную шину, представляющую собой один из самых ранних стилей архитектур многопроцессорных машин, обычно применяемый для создания небольших компьютеров с количеством процессоров до 8. В более крупных компьютерных системах могут использоваться современные архитектуры, такие как NUMA (Non Uniform Memory Access), которая выделяет различные банки памяти для разных процессоров. В архитектуре NUMA процессоры могут быстро обращаться к локальной памяти и медленнее – к удаленной. Это может значительно повысить пропускную способность памяти, если данные локализованы в пределах конкретных процессов (и, следовательно, процессоров). Однако NUMA увеличивает стоимость перемещения данных между процессорами, например, при балансировке нагрузки. Преимущества NUMA проявляются в основном для определенных типов рабочих нагрузок, особенно на серверах, где данные часто тесно связаны с конкретными задачами или пользователями. Наконец, существует кластерная мультипроцессорность (например, Beowulf), в которой не вся память доступна всем процессорам. Методы кластеризации широко используются для создания очень больших суперкомпьютеров.