Диссертация (1148255), страница 4
Текст из файла (страница 4)
cluster computers и COWS — Clustersof Workstations — кластерами рабочих станций).Мультикомпьютерные системы оказались не только гораздо привлекательнее в плане масштабируемости, но и проще в создании, чем мультипроцессорные(хотя два этих термина часто используются как синонимы и иногда сложно понять, какого типа система имеется в виду). Однако сложность программирования таких систем существенно возросла. Действительно, если в мультипроцессо20Локальная памятьЛокальная памятьЦентральный процессорЦентральный процессорСхема соединенийРисунок 1.4 – Концепция мультикомпьютерной системы с распределённой памятьюрах с общей памятью, а тем более с локальным кэшем, вопросы синхронизациии обеспечения когерентности решались аппаратно, то теперь они полностьюперекладывались на программистов.
Традиционно, коммуникации в многопроцессорных системах без общей памяти реализуются в модели, подразумевающейпередачу данных. Это означает, что если программисту необходимо наладитькакое-либо взаимодействие между процессорами, он вынужден использоватьтакие примитивы как классические Send и Receive.
В некоторых случаях этипримитивы могут быть представлены чем-то более высокоуровневым – например, как в модели удаленного вызова процедур (англ. remote procedure call –RPC). Тем не менее в каждом из случаев мы имеем дело с механизмами явнойпередачи данных.Программные решения, основанные на передаче сообщений (данных) между компьютерами, оказались чрезвычайно сложны, и программисты стали создавать новые коммуникационные абстракции. Закономерно, одной из такихабстракций стала концепция общей памяти (англ. shared memory), такженазываемой совместно используемой памятью, с которой разработчики уже были знакомы по мультипроцессорам.
Даже в ситуации, когда общая память физически отсутствует, оказалось возможным создать программную прослойку,успешно такую память имитирующую.Дальнейшим логичным шагом по повышению масштабируемости вычислительных систем стал переход от тесно- или сильносвязанных (англ. tightly coupled) к слабо- или гибкосвязанным системам (англ.21loosely coupled), также известным как распределённые системы (англ.distributed systems).
Концепция общей памяти оказалась применима и кним, закономерно получив название распределённой общей памяти (англ.distributed shared memory – DSM) [44].Отметим, что несмотря на выделение DSM в независимую задачу в области распределённых систем, имеется существенное пересечение в назначенииданного механизма с аналогичными механизмами ряда других технологий: какуже было отмечено, это организация работы процессорных кэшей в мультипроцессорах с физически общей памятью, а также кэширующие распределённыефайловые системы, распределённые базы данных, NUMA-мультипроцессоры собщей памятью неоднородного доступа (где различается время доступа к разным областям памяти) и других.
В каждой области имеется своя существеннаяспецифика, тем не менее, общие принципы остаются едины и решения в однойобласти зачастую могут быть применены (по крайней мере частично) в другой.1.3. Описание концепции DSMИтак, DSM – это концепция совместно используемой (или общей) памяти,примененная к распределённым (слабо связанным) системам.В отличие от модели явной передачи данных (сообщений), модель общейпамяти предоставляет процессорам системы возможность работы в едином адресном пространстве. Кроме прочего, это позволяет реализовывать распределённые приложения тем же способом, что и классические, централизованные, атакже относительно легко портировать уже существующее ПО, приспосабливаяего для работы в распределённом окружении.
По сравнению с моделью явнойпередачи данных, на смену операциям Send и Receive выходят операции Readи Write:data = Read ( a d d r e s s )Write ( a d d r e s s , data )22Операция Read возвращает данные, расположенные по адресу address,указанному параметром. Write же имеет два параметра, записывая по адресу address данные data. Возможны различные реализации данных примитивов– под другими именами, некоторыми изменениями в параметрах, однако с сохранением общих принципов.Таким образом, базируясь на классических Send и Receive, новая абстракция скрывает всю сложность низкоуровневого взаимодействия узлов распределённой сети под более высокоуровневыми интерфейсами специальных системных библиотек или ядра операционной системы.Впервые модель коммуникаций DSM была предложена в диссертации1986 года [32] (автор использовал теперь редко употребляющееся наименование «shared virtual memory»).
Организация виртуальной памяти была страничной, и когда происходило обращение к странице, отсутствующей в данный момент на конкретном узле системы, производилась пересылка этой страницы сдругого узла сети. Новая система отлично зарекомендовала себя, обеспечиваяпростое программирование распределённых систем без общей физической памяти. Платой же стала относительно низкая производительность (по сравнениюс механизмами простой пересылки сообщений). Интенсивные исследования последующих лет позволили нивелировать этот недостаток, предложив ряд менеестрогих моделей консистентности (что обычно означает внедрение новых ограничений и допущений, а также требований к способам использования), старясьсохранить баланс между удобством для разработчика (основной причиной появления DSM) и производительностью. Наиболее известные модели будут рассмотрены в следующем разделе, заметим лишь что исследования в этой областидо сих пор продолжаются, сосредоточившись в целом на нюансах той или иноймодели, эффективности её реализации и привнесении в вычислительную систему новых свойств – например таких, как устойчивость к сбоям.231.4.
Модели консистентностиРассмотрим сценарий, аналогичный разобранному в работе [32] – имеетсяраспределённая вычислительная система из рабочих станций (узлов), объединенных в сеть. Виртуальная память организована странично, и каждая страница имеет единственного владельца. Допустим, один из узлов системы производит обращение к данным, расположенным на странице, которая отсутствует локально. В таком случае системой производится пересылка необходимойстраницы с удаленного узла. Запросивший страницу узел становится её новымвладельцем. В случае, когда разные узлы часто обращаются к данным, расположенным на данной странице, система вынуждена часто пересыласть страницумежду узлами, создавая высокую нагрузку на каналы передачи данных и снижая общую производительность системы.Улучшить ситуацию с нагрузкой на каналы можно, в том числе, допустивналичие множества копий одной и той же страницы.
В таком случае пересылкиданных во многих случаях удастся избежать, однако возникает другая проблема– необходимо обеспечить консистентность (согласованность) всех копий однойи той же страницы. В идеале, обращение любого узла к своей копии любойстраницы должно приводить ровно к тому же эффекту, как и в случае, когдавладелец у страницы один, и её единственная копия постоянно пересылается.
Напрактике же оказывается, что для достижения данного результата всё ещё требуется большое количество служебных сообщений (например, чтобы убедиться,что имеющиеся у узла данные до сих пор актуальны), что в случае распределённых систем и, соответственно, медленных каналов связи, не позволяет добитьсявысокого уровня производительности.В результате стремления снизить нагрузку на сеть и повысить производительность DSM, было предложено множество альтернативных моделей консистентности – менее строгих, чем интуитивно понятная эталонная (далее упоминаемая как строгая консистентность, англ. strict consistency – SC).
В работе24[36] проводится тщательный обзор основных моделей консистентности, а такжеих влияния на язык программирования, компилятор и среду выполнения. Хотяв данной работе указывается на отсутствие общепринятой классификации моделей, уже год спустя, в 1994, выходит книга [46], предложившая простую, новполне удобную классификацию, которой мы и будем придерживаться.1.4.1. Строгая консистентностьМодель строгой консистентности – самая строгая модель, реализующая интуитивно ожидаемое поведение системы. Формальное определение звучит следующим образом:Определение 1.
Система соответствует модели строгой консистентности в том случае, если чтение из памяти по адресу всегда возвращаетзначение, сохраненное последней предшествующей операцией записи по данному адресу.1В однопроцессорных системах данная модель справедлива по умолчанию,поэтому может представляться единственно возможной. Однако несмотря накажущуюся простоту и очевидность, в случае распределённых систем модельоказывается нереализуемой на практике (часто её даже не упоминают), так какразница во времени между операциями записи и чтения, если они производятся в разных узлах, может быть бесконечно малой, что препятствует любымпопыткам добиться эталонной синхронизации этих операций.При объяснении и сравнении различных моделей часто используют определенную нотацию (см.