Заглядывая в будущее

Марк Л. Ван-Нейм, Билл Кетчингс

Обычно когда появляются новые аппаратные возможности, большинство программ еще не готово использовать их в полной мере. Например, ныне устаревший Intel 386  -  это 32-разрядный процессор, способный поддерживать настоящие многозадачные операционные системы. Но пока такие ОС только начинают претендовать на ощутимую долю рынка серверов и настольных ПК.

То же самое происходит с многоироцессорностью. Оборудование уже есть. Делать многопроцессорные серверы и даже настольные машины на базе микропроцессоров следующего поколения типа Intel Р6 будет легко, как никогда. Однако поставщики программ продолжают играть в "догонялки".

Самый отстающий игрок в этой команде  -  NetWare, которая вообще не поддерживает многопроцессорные системы. Большинство других ОС для серверов работают с ними, но еще в недостаточной мере.

В любой ОС неизбежно есть несколько компонентов, не допускающих распараллеливания и функционирующих строго в одном потоке и на одном процессоре. Теоретически все прекрасно: несколько таких точек необходимо для управления.

ПОЖАЛУЙТЕ В ОДИН ФАЙЛ!

Проблемы начинаются, когда в ОС слишком много частей, представляющих собой отдельные потоки. Каждая из них действует как "развязка" на уровне одного потока на многопроцессорной магистрали. Приложения, рассчитанные на скоростное параллельное выполнение, будут в результате надолго застревать в этих "развязках".

Возьмем, например, текущую версию SCO Unix. Это зрелая операционная система, которая давно поддерживает многопроцессорные платформы. Но значительная часть ее сетевых функций являются однопоточными. Поэтому даже если сервер с SCO Unix имеет четыре процессора, большинство сетевых заданий будет стоять в очереди к одному. При возрастании загрузки сети начиная с некоторого момента три процессора будут вынуждены ждать, когда четвертый завершит обработку сетевого задания.

Справедливости ради заметим, что разработчики SCO знают об этой неприятности и планируют устранить ее в следующей версии системы, названной Everest. Однако SCO не одинока: протокол NetBIOS в OS/2 тоже не способен использовать преимущество многопроцессорности. Есть и другие примеры.

Даже если ваша ОС хорошо структурирована, это совсем не означает, что вы вздохнете свободно: программы-серверы могут создавать "пробки" в однопоточных компонентах. Так, серверы баз данных часто используют строго последовательный механизм для управления блокированием и синхронизации. Это допущение сможет вновь привести вас к состоянию "пробки". Впрочем, поставщики типа Oracle давно разрешили данную проблему, хотя и реализовали не во всех продуктах.

Ситуация кажется настолько очевидной и легко устранимой, что впору удивиться, как она вообще могла возникнуть. Дело в том, что во всех подобных случаях ПО должно управлять некоторым ресурсом согласованно. Ведь сохранить состояние целостности ресурса при одновременном доступе к нему многих процессоров нелегко, поэтому поставщики ПО составляют однопоточные программы.

К счастью, эта ситуация со временем улучшается. Тем не менее некоторая осмотрительность позволит избежать проблем в будущем.

Главное, не ждите, что, купив многопроцессорный компьютер, вы сможете воспользоваться его достоинствами. Проанализируйте однопоточные компоненты операционной системы и приложений: в них возможны заторы. Нельзя сказать, чтобы они были "смертельно опасны" для вашей работы, но могут причинить беспокойство, когда вы решите нарастить возможности своего оборудования (если три процессора ждут четвертого, то пятый не ускорит дела.  -  Прим. ред.).

Сделаем вывод: не покупайте многопроцессорный компьютер до тех нор, пока не убедитесь, что не будете застревать в заторах на "развязках", заплатив за целую супермагистраль.

Вы можете обратиться к Марку Ван-Нэйму и Биллу Кэтчингсу по МСI Mail: 668-8916 и 666-8914 соответственно.

Марк Л. Ван-Нейм

Билл Кетчингс