Здравствуйте,  Гость     0  Home Персональные данные Поиск Карта сайта Гостевая книга Контакты  
  корзина   home   профайл   поиск   подписка   книга   контакты   


 
 

Параллельные системы, их создание и применение

23.06.2003
   Отзывы на статью
А. Кильпио, П. Кайгородов

Введение

       Рано или поздно, все пользователи персональных компьютеров сталкиваются с нехваткой производительности. Недостаточно быстрая реакция на сигналы клавиатуры и мыши могут вывести из себя кого угодно. Так что не удивительно, что пользователи сравнительно легко готовы тратить суммы порядка 1000$ на покупку более быстрого процессора, дополнительную память, графические ускорители и прочие компоненты, широко представленные на рынке. Как правило, пользователь всегда может найти решение, подходящее ему по производительности.

       Несколько по иному обстоят дела у тех, кто занят обслуживанием крупных web-серверов, баз данных, файловых архивов. Производительности даже самых мощных персоналок как правило не хватает для обеспечения должного качества обслуживания. Кроме того, надежность даже для самых лучших "ширпотребовских" компонентов оставляет желать лучшего. Выходом в данном случае является покупка специализированных решений от SUN, HP, IBM и других производителей.

       Стоимость таких систем может составлять десятки и сотни тысяч долларов, в добавок необходимо нанять для их обслуживания грамотный персонал -- программистов, техников, системных администраторов, обеспечить надежное электропитание, охлаждение и прочие условия. А если со временем потребность в вычислительных ресурсах возрастет, необходимо будет озаботиться весьма недешевой модернизацией или покупкой новой системы.
       Однако, существует класс задач, для решения которых даже самый мощный IBM не годится. Это вычислительные задачи, которые необходимо решать ученым-физикам, химикам, математикам, биологам. Для них строятся поистине гигантские машины, стоимость которых может составлять десятки миллионов долларов. Каждая из таких машин может занимать большой зал, потреблять сотни киловатт электроэнергии, требовать обслуживания десятками техников и системных администраторов. Нередко для охлаждения используются криогенные установки с жидким азотом. Каждая их этих машин уникальна и строится как большой корабль, усилиями нескольких крупных фирм и научных центров.
       Таким вычислительным машинам дают собственные имена, которые становятся широко известны благодаря прессе. Наверняка вам приходилось слышать о Deep Blue, ASCI White, Earth Simulator ? Постройка, наладка и обслуживание таких монстров требуют столь больших затрат, что только самые крупные научные и военные центры могут позволить себе роскошь их иметь.

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

Параллельные архитектуры и методика выбор средств решения поставленной задачи.

       С точки зрения пользователя, идеальный компьютер должен обладать следующими свойствами:

  1. Иметь большую производительность
  2. Быть хорошо масштабируемым (позволять наращивать производительность с минимальными затратами на модернизацию)
  3. Быть надежным, простым и дешевым в обслуживании
  4. Быть простым с точки зрения программирования.

       В погоне за идеалом было разработано множество различных аппаратных решений. Рассмотрим наиболее удачные из них.

       Симметричные (SMP) системы:

       Состоят из двух или более процессоров, единого массива оперативной памяти и набора устройств ввода-вывода (картинка). Каждый процессор может свободно оперировать любыми данными находящимися в оперативной памяти, что делает все процессоры равноправными а систему симметричной. К достоинствам SMP можно отнести сравнительную простоту программирования, что позволяет адаптировать для них множество программ, используя сравнительно простые приемы. К сожалению, для получения высокой производительности, программист должен соблюдать ряд условий, например постараться исключить одновременное обращение двух или более процессоров к одной области памяти, так как при этом возникают слишком большие накладные расходы на аппаратное поддержание "когерентности кэшей" процессоров. Вдобавок, во многих SMP системах процессоры и память соединены общей шиной, пропускной способности которой зачастую едва хватает для обеспечения нужд одного процессора. Не трудно догадаться, как будут себя чувствовать 2, 4, 8 или большее их количество при одновременной работе. Все это, плюс плохая масштабируемость (очень трудно соединить в SMP более 16 процессоров без применения различных технических ухищрений) делают SMP-системы малопригодными для действительно крупных задач.

       Массивно-параллельные (MPP) системы (кластеры):

       Состоят из множества так называемых "узлов". В общем случае, каждый узел содержит процессор, собственную память и (возможно) устройства хранения информации (диск). Все узлы объединены в локальную сеть, так что могут достаточно быстро взаимодействовать друг с другом (картинка). В качестве узлов можно использовать практически любые компьютеры, в том числе и SMP-системы. Наиболее дешевые кластеры можно строить даже на базе персональных компьютеров, которые в большинстве учреждений все равно простаивают в ночное время. Единственным необходимым условием является объединение узлов надежной высокопроизводительной сетью передачи данных. В качестве таковой можно использовать (в зависимости от потребностей) как дешевые системы на базе Ethernet и FastEthernet, так и более дорогие и высокопроизводительные сети Gigabit Ethernet, Myrinet, SCI и пр.
       К достоинствам кластерных систем можно отнести высокую пиковую производительность (правда, на ограниченном классе задач), хорошую масштабируемость -- можно наращивать число узлов постепенно, упираясь практически только в финансовые ограничения, дешевизна, сравнительная простота в обслуживании и настройке. К списку достоинств можно добавить надежность системы -- надлежащим образом сконфигурированный кластер может сохранять работоспособность даже в случае выхода из строя одного или нескольких узлов.
       К недостаткам можно отнести сложность программирования и адаптации уже существующих программ для исполнения их на кластере. Для получения производительности близкой к пиковой, помимо хорошей коммуникационной сети требуются подчас весьма серьезные изменения алгоритмов работы программы. Необходимо минимизировать число взаимодействий между узлами и объединить их по возможности в большие пакеты. Все это накладывает ограничение на класс задач, для решения которых могут быть использованы кластеры. К счастью, большинство задач обладают "внутренним параллелизмом" и могут быть адаптированы сравнительно легко. Плюс, существуют уже готовые приложения и библиотеки программ, специально оптимизированные для исполнения на кластерах. Это сервера баз данных (Oracle, DB2), популярный web-сервер apache, пакеты компьютерной графики, параллельные версии библиотек для решения систем линейных и дифференциальных уравнений. Так как использование кластеров зачастую является единственной возможностью получить требуемую производительность, в последнее время полным ходом идет написание новых и адаптация старых приложений.

       При выборе кластера следует прежде всего очертить класс задач, которые на нем будут решаться. Обычно задачи можно разделить на два типа -- вычислительные задачи и задачи массового обслуживания.

       К задачам массового обслуживания можно отнести все задачи, где критично время отклика системы на внешние запросы. Например, web-сервер, сервер баз данных, файловый сервер и пр. Для большинства из них могут быть применимы кластеры. Помимо высокой производительности при этом часто многократно повышается устойчивость системы к сбоям.
       Как правило, для задач массового обслуживания следует выделить один узел, который будет "воротами во внешний мир" для всего кластера. Этот узел будет принимать соединения от клиентов, проводить его первичную обработку и передавать для дальнейшего обслуживания одному из свободных узлов. При этом следует озаботиться не столько скоростной сетью передачи данных (хотя она и не помешает), сколько хорошим, высокопроизводительным и надежным хранилищем данных. Это может быть как централизованный (один на весь кластер) файловый сервер (как рекомендует Oracle), так и распределенные по кластеру диски (как рекомендует IBM для DB2). Для других приложений может оказаться оптимальным смешанный подход, при котором часть данных храниться на центральном сервере, а часть – на локальных дисках узлов. Выбор той или иной стратегии должен осуществляться с учетом требований программного обеспечения. В качестве узла, осуществляющего распределение нагрузки можно использовать как программные решения, так и аппаратные, предлагаемые различными фирмами (например CISCO Load Director [?])
       Средства обеспечения устойчивости к сбоям, распределения нагрузки и ресурсов работающие на уровне операционной системы производятся фирмами RedHat (для Linux), Microsoft (для Windows), SUN (для Solaris), HP, IBM и другими.

       Для вычислительных задач, требования несколько иные. Здесь главную роль играет пропускная способность сети и ее латентность (задержки прохождения пакетов). Хорошо заранее определить объемы передачи данных и частоту взаимодействий. Если один вычислительный шаг вашей задачи длится 10 секунд, после чего каждый процессор обменивается с двумя другими массивами данных размером в 1 мегабайт, то при пропускной способности сети 10 мегабит (обычный Ethernet), задержки составят ~4 секунд (так как надо и послать и принять данные), либо ~2 секунды если связь дуплексная (см. ниже -- обсуждение аппаратной части кластеров). При этом результирующая производительность составит соответственно 60 или 80% от пиковой. При использовании FastEthernet (100 мегабит), задержки составят соответственно ~0.4 и ~0.2 секунды, а производительность -- 96 или 98%. Однако, если время обработки данных между обменами составляет 0.1 секунды, то потери даже при использовании FastEthernet составят более 60-80 процентов времени. При этом уже следует задуматься о применении более высокопроизводительной сети, например Myrinet.

       Часто можно встретить заблуждение, что только использование суперкомпьютера может само по себе дать прирост производительности. Это не верно. Если ваша задача не имеет внутреннего параллелизма и не адаптирована соответствующим образом, максимум, что вы можете получить от кластера -- это запуск на выполнение нескольких экземпляров программы одновременно, работающих с различными начальными данными. Это не ускорит выполнение одной конкретной программы, но позволит сэкономить много времени, если необходимо посчитать множество вариантов за ограниченное время. Можно привести следующую аналогию: один корабль переплывает море за 7 дней, но семь кораблей не смогут переплыть море за день. За то, они смогут перевезти за неделю в 7раз больше груза. Если объемы вашей задачи таковы, что только один прогон на однопроцессорной машине может длиться сутками, неделями и месяцами, то очевидно, следует приложить усилия по адаптации алгоритма. Следует разделить задачу на несколько (по числу процессоров) более мелких подзадач, которые могут выполняться независимо, а в тех местах, где независимое выполнение невозможно, явно вызывать процедуры синхронизации, для обмена данными через сеть. Например, если вы обрабатываете большой массив данных, то разумно будет разделить его на области и распределить их по процессорам, обеспечив равномерную загрузку всего кластера.

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

       Если вы успешно прошли все эти этапы, больших вопросов о типе аппаратного обеспечения у вас уже быть не должно. Тем не менее, если вы собираетесь самостоятельно разрабатывать приложения для своего кластера, вам необходимо озаботиться подбором подходящих средств разработки. Например, если вы собираетесь использовать процессоры Intel, то лучшим выбором будет разработанные Intel компиляторы с языков C/C++/Fortran95 (доступны бесплатно для некоммерческого использования в версии Linux), либо компиляторы от Portland Group (С/С++/Fortran90/HPF). Для процессоров DEC Alpha (ныне принадлежит HP) наиболее продвинутыми являются компиляторы от Compaq (тоже доступные для Linux бесплатно). Для процессоров других типов (PPC, SUN и пр.) тоже существуют специализированные компиляторы, позволяющие выжимать из них максимально возможную производительность. Однако, даже если вам не удалось достать "родные" компиляторы, вы можете использовать свободно распространяемые компиляторы серии gcc (Gnu Compiller Collection), которые поддерживают большинство современных аппаратных и программных платформ и поставляются практически со всеми дистрибутивами Linux и Unix.
       Кроме компиляторов вам наверняка потребуются библиотеки для упрощения межпроцессорного обмена. Стандартом де-факто является коммуникационная библиотека MPI. Существуют как коммерческие, так и бесплатные (LAM, mpich) ее реализации для различных операционных систем. Альтернативой MPI является библиотека PVM, доступная свободно.

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

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

       Выбор аппаратной платформы

       Выбор аппаратной платформы - важнейший шаг. Очень просто сэкономить в начале, но очень нелегко бороться с капризным железом потом. Один компьютер, стоящий на рабочем столе под вечным приглядом неутомимого пользователя – не проблема. Все огрехи и глюки ловятся быстро и более или менее своевременно исправляются. Другое дело, когда машин не одна и не две, а несколько десятков. Неотлучно при них находиться никто не будет, поэтому, даже предоставленные сами себе, они должны работать безупречно. Ну, или почти безупречно. Компоненты, из которых собирается кластер, должны изначально считаться надежными. Еще один важный фактор - в узлах кластера не должно быть ничего лишнего. Во-первых, каждый лишний десяток долларов, помноженный на число узлов, выльется в круглую сумму, а во-вторых, чем сложнее система, тем ниже по определению ее надежность. Наличие интегрированных компонентов на системной плате в виде звуковой платы или RAID-контроллера вам не пригодится, хотя встроенная графическая плата может оказаться хорошим решением. Интегрированный сетевой контроллер, скорее всего, также окажется ненужным. Почему? Об этом чуть ниже.
       Нужен ли жесткий диск для узла кластера? Теоретически, без него можно обойтись. У бездисковых узлов есть ряд преимуществ – меньше энергопотребление и тепловыделение, ниже шумность, выше отказоустойчивость. Однако не все так просто. Высокая производительность кластера естественным образом приводит к тому, что на нем будет обрабатываться большое количество данных. Следовательно, их придется где-то хранить. Для этих целей можно использовать хранилище данных необходимого объема, подключенное к серверу. Скорее всего, такое решение окажется более дорогим, а данные, которые постоянно будут передаваться по сети, уменьшат ее пропускную способность. В рамках бюджетного кластера, когда сеть используется и для обмена данными между параллельными процессами, и для передачи данных использование центрального хранилища может негативно отразиться на вычислительной производительности кластера в целом. Поэтому разумнее будет укомплектовать каждый узел небольшим жестким диском, тем более что при необходимости вы сможете объединить все диски в одно распределенное хранилище, установив кластерную файловую систему. Графические контроллеры не пригодятся для работы кластера, но значительно помогут при установке. Более того, далеко не всякая операционная система согласиться загружаться без графического контроллера. Так что без раздумий можете устанавливать на узлы кластера самые простенькие графические платы (или используйте интегрированные контроллеры). Вы не раз поблагодарите себя за то, что установили их, когда вам придется восстанавливать сбойный узел.
       Флоппи-дисководы потребуются при начальной установке и в случае ремонта. Если у вас нет веских (финансовых) причин ими пренебречь – не пренебрегайте.
       Сетевые платы в кластере занимают одно из важнейших мест. Если процессор в состоянии перелопачивать гигабайты данных в секунду, обмениваясь ими по быстрой шине с кэшем и оперативной памятью, то взаимодействие между процессорами при выполнении параллельных программ будет происходить по сети. Сеть гораздо медленнее системной шины, и при неудачном выборе сетевых компонентов (аппаратных и программных) больше половины времени при счете может уходить на пересылку данных от одного процессора к другому. Таким образом, платы должны быть достаточно быстрыми и иметь минимальное время задержки. Другим важным фактором является наличие драйверов, оптимизированных для работы сетевой платы в кластере. Поскольку речь сейчас идет о создании бюджетного кластера, мы не будем касаться специализированных сетевых технологий, например Myrinet, которые, безусловно, обеспечивают более высокую производительность, чем 100 Мбит/с Fast Ethernet, но стоят гораздо дороже. Процессор-память-материнская плата - от сочетания этих компонентов требуется устойчивость и высокая производительность. Более быстрая память и более быстрый процессор скорее всего не повредят. Здесь все ограничивается вашим бюджетом. Объем памяти должен определяться задачами, которые планируется запускать на кластере.
       Однородность - еще один важный фактор. Гораздо проще настраивать и эксплуатировать кластер, созданный на базе одинаковых аппаратных компонентов. Для одинаковых узлов гораздо проще обеспечить удаленную загрузку операционной системы. В случае если вычислительная мощностьпроцессоров кластера разная, то самый медленный процессор будет заставлять более быстрых собратьев ожидать результатов своих вычислений, в результате чего окажется, что все процессоры функционируют со скоростью самого медленного. Решения, позволяющие динамически распределять загрузку процессоров в зависимости от их мощности, существуют, но уверенности в том,что они подойдут именно для вашей задачи, нет. Добавлять новые узлы в кластер хорошо большими блоками. В любом случае, компьютеры двух типовгораздо проще эксплуатировать, чем десяток разнородных машин.
       Клавиатуры и мыши - не нужны.
       Настройки BIOS позволяют запускать компьютер должно кондиционироваться. Это непреложный факт. При 100% нагрузке мощность (активная), потребляемая одним узлом кластера, составляет 90-120 Вт и рассеивается в виде тепла. Несложные арифметические подсчеты показывают, что кластер из 16 узлов сравниться по мощности с неплохим бытовым нагревателем, причем вентиляторы шасси и блоков питания будут обеспечивать дополнительную конвекцию. Без кондиционера такая батарея источников тепла нагреет любое помещение выше критической температуры очень быстро. Позаботьтесь о том, чтобы тепловая мощность установленного кондиционера была бы, по крайней мере, в два раза больше тепловой мощности вашего <вычислительного обогревателя>. Наращивая число узлов, не забывайте о дополнительном кондиционировании.

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

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

       Электропитание. Конечно же, питание должно быть бесперебойным. Обеспечить бесперебойное питание можно при помощи одного матричного ИБП, обслуживающего весь кластер, либо с помощью отдельных источников бесперебойного питания, к которым подключено по нескольку узлов. Устанавливать матричный ИБП становится экономически выгодно только при достаточно большом числе узлов, так что для пары десятков компьютеров, соединенных в кластер, подойдут и отдельные ИБП. Рассчитывая мощность ИБП следует, во-первых, определить, в течение какого времени кластер должен работать в случае пропадания напряжения, а во-вторых, необходимо помнить что Ватты и Вольт-Амперы – не одно и тоже. Для поддержки работы четырех узлов в течение 15-20 минут должно хватить ИБП мощностью 1000 ВА. Выбирая ИБП, следует позаботиться и о том, чтобы он вовремя мог предупредить операционную систему об отсутствии напряжения питания в сети, чтобы система смогла корректно завершить все задачи, прежде чем иссякнет энергия аккумуляторов ИБП, если напряжение так и не появится. Качественный ИБП - еще и залог долгой жизни всех аппаратных компонентов кластера.

       Сигнализация. Большое количество дорогой техники в небольшом помещении -- чем не лакомый кусок для вора? Конечно же, стоит позаботиться о надежной охране своего сокровища. В небольшом помещении есть и свои плюсы - обеспечить его охрану проще, чем множества компьютеров, разбросанных по разным местам. Стандартные средства охраны помещений вполне подойдут для кластера. Не стоит ими пренебрегать! Постарайтесь также сократить число сотрудников, имеющих доступ к помещению, где находится кластер. Узлы можно опечатать или опломбировать. Конечно, пропажу целого компьютера легко обнаружить. Однако в течение долгого времени вы можете и не замечать, что объем оперативной памяти во всех узлах кластера уменьшился, по непонятной причине, ровно наполовину!
       Надеемся, что наши замечания сугубо практического характера помогут Вам создать и использовать параллельные системы.

       Ссылки по теме

  1. http://www.parallel.ru Самый обширный российский сайт, посвященный суперкомпьютерам, параллельным вычислениям, кластерам.
  2. http://www.beowulf.org/ Проект, посвященный созданию высокопроизводительных массивно-параллельных выч. систем
  3. http://www.computerra.ru/offline/2002/430/15838/ Обзорная статья (Параллельные архитектуры и вычисления)
  4. http://www.computerra.ru/offline/2002/430/15844/ Обзорная статья (сборка простейшего кластера)




Вернуться к списку >>
 

  Ваши отзывы
ФИО (*) :
E-mail:
Текст сообщения (*) :
(*) - обязательные для заполнения поля



  Имя: boettcher, ilia     ilia2002@gmx.de
15.05.2005
Текст:spasibo bolshoe.ochen pomoglo dlya sozdaniya prezentazii w uniwersitete.zhal', chto nado bilo wso perewodit na innostrannij yazik :-)
 

Top
 ХИТЫ
ТОВАР ДНЯ
Принтер лазерный цветной A4 Epson AcuLaser 2600N (C11C585031BZ) LPT+USB 2.0+LAN 64MB
Цена:  $304.22

 Bestseller
БЕСТСЕЛЛЕР
Принтер лазерный цветной A4 Epson AcuLaser 2600N (C11C585031BZ) LPT+USB 2.0+LAN 64MB
Цена:  $304.22

 СЕРВИС

UPS | Аксессуары, опции | Аудио-видео, приставки | Бумага, канцелярия | Видеокарты, ТВ-тюнеры | Видеонаблюдение | Дисководы | Доп. оборудование HP | Доп. оборудование SuperMicro | Доп. оборудование Xerox (-) | Жесткие диски и боксы для них | Запчасти и БП | Звуковые устройства | Игровые консоли (-) | Кабели, переключатели, разъемы | Клавы, мыши и пр. | Компьютеры, платформы | Контроллеры | Копиры | Корпуса | Материнские платы | Мебель | Модемы & DSL | Мониторы CRT | Мониторы LCD | Навигаторы GPS | Наладонники, коммуникаторы, навигаторы, электронные книги... | Ноутбуки | Оборудование Kramer | Оборудование Lanmaster | Оборудование Legrand | Оборудование TWT | Оперативная память | Оптические приборы (-) | Оргтехника и банковское оборудование | Плазменные панели | Плоттеры | Принтеры и МФУ | Программное обеспечение | Проекторы и экраны | Процессоры | Прочее | Расходники - дискеты, картриджи, тонеры, чернила, пленка, лента | Сетевое оборудование активное | Сканеры | СТОЙКИ ДЛЯ АУДИО - ВИДЕО АППАРАТУРЫ И ДОМАШНЕГО КИНОТЕАТРА (-) | Стримеры | Телефоны, факсы и АТС | Фото-видео аппаратура | Цифровые диктофоны | Электроинструмент

©2003-2006 X-Form Computers. All rights reserved.
Design by SeaDesign.ru