1 системы удалённого управления кластерами

advertisement
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ
БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Факультет радиофизики и электроники
Кафедра информатики
РАЗРАБОТКА СИСТЕМЫ УДАЛЁННОГО УПРАВЛЕНИЯ
ВЫЧИСЛИТЕЛЬНЫМ КЛАСТЕРОМ
Дипломная работа студента 5 курса
Богуша Анатолия Александровича
Руководитель: ассистент
Верхотуров А. Е.
Рецензент: ассистент
Ролич О. Ч.
«Допустить к защите»
зав. кафедрой
пр-р. _____________/Мулярчик С. Г./
« ___» _____________ 2005г.
Минск, 2005
РЕФЕРАТ
Дипломная работа 69 страниц, 10 рисунков, 1 таблица, 9 источников, 1
приложение.
Объектом работы являются вопросы создания системы удалённого
управления вычислительным кластером. Цель работы – создание системы
удалённого управления кластером на основе существующего кластера из 6
компьютеров.
Проанализированы пути решения подобных задач на основе операционной системы Windows и реализована система для существующей вычислительной системы.
2
СОДЕРЖАНИЕ
Перечень сокращений условных обозначений …………..…………….…....... 4
Введение ………………………………………….……………….….…………. 5
1 Системы удалённого управления кластерами .................................................. 6
1.1 Сферы применения суперкомпьютеров .......................................................... 6
1.2 Архитектура ....................................................................................................... 8
1.3 Перспективы систем удалённого управления .............................................. 10
1.4 Заключение ...................................................................................................... 11
2 Вычислительные системы ................................................................................ 12
2.1 Система MBC-1000 ......................................................................................... 12
2.1.2 Архитектура и системное ПО МВС-1000 .................................................. 12
2.1.3 Работа пользователя с МВС-1000............................................................... 16
2.2 Система СКИФ ................................................................................................ 19
3 Система удалённого доступа для вычислительных кластерных систем..... 28
3.1 Установка и настройка пакета MPICH ......................................................... 29
3.2 Описание системы удалённого управления кластером .............................. 31
3.2.1 Клиентская часть .......................................................................................... 31
3.2.2 Серверная часть ............................................................................................ 39
Заключение..……………………………………………………………….……. 43
Список использованных источников.. .……………………………………….. 44
Приложение А Исходные коды программ............………….……………..…. 45
3
ПЕРЕЧЕНЬ СОКРАЩЕНИЙ УСЛОВНЫХ ОБОЗНАЧЕНИЙ
ПК – персональный компьютер
ЭВМ – электронно-вычислительная машина
БД – база данных
4
ВВЕДЕНИЕ
В настоящее время всё большую важность приобретают системы большой вычислительной мощности. К таким системам можно отнести суперкомпьютеры, вычислительные кластеры и другие подобные системы. Такие
системы играют важные роли в нашем информационном обществе уже довольно много времени. С помощью современных вычислительных систем всё
больше задач решается с их помощью. Это такие задачи как различные моделирования физических процессов, расчёт каких либо биологических систем,
задач по криптографии, вопросы, связанные с прогнозированием погоды, исследования земной коры и многие другие задачи.
В основном подобные вычислительные системы ставят в научноисследовательских институтах. Они требуют больших специализированных
помещений для установки оборудования. Сам же пульт управления и контроля над вычислительной системой находится в отдельном помещении, к
которому имеет доступ ограниченное количество людей. Таким образом, получается, что вся мощь суперкомпьютера может быть не использована, что
несёт в себе убытки, как в научном плане, так и в материальном.
Для устранения этого недостатка были придуманы системы удалённого
управления и контроля над суперкомпьютером. Такие системы стали неотъемлемой частью любого суперкомпьютера или кластера.
Системы удалённого управления основываются на технологиях Internet.
В качестве клиента может выступать любой web-браузер. На сервере устанавливается сайт и сервис отвечающий за выполнение команд от пользователя. На сайте должны быть реализованы функции управления вычислительной системой, должна быть обеспечена безопасность такого соединения и
надёжность выполнения любых операций.
Таким образом, целью моей дипломной работы является разработка системы удалённого управления на базе существующего вычислительного кластера с обеспечением полного контроля над ним.
5
1 СИСТЕМЫ УДАЛЁННОГО УПРАВЛЕНИЯ КЛАСТЕРАМИ
1.1 Сферы применения суперкомпьютеров
Может показаться, что с ростом производительности настольных ПК и
рабочих станций, а также серверов, сама потребность в суперЭВМ будет
снижаться. Это не так. С одной стороны, целый ряд приложений может теперь успешно выполняться на рабочих станциях, но с другой стороны, время
показало, что устойчивой тенденцией является появление все новых приложений, для которых необходимо использовать суперЭВМ [1].
Прежде всего следует указать на процесс проникновения суперЭВМ в
совершенно недоступную для них ранее коммерческую сферу. Речь идет не
только скажем, о графических приложениях для кино и телевидения, где требуется все та же высокая производительность на операциях с плавающей запятой, а прежде всего о задачах, предполагающих интенсивную (в том числе,и оперативную) обработку транзакций для сверхбольших БД. В этот класс
задач можно отнести также системы поддержки принятия решений и организация информационных складов. Конечно, можно сказать, что для работы с
подобными приложениями в первую очередь необходимы высокая производительность ввода-вывода и быстродействие при выполнении целочисленных операций, а компьютерные системы, наиболее оптимальные для таких
приложений, например, MPP-системы Himalaya компании Tandem, SMPкомпьютеры SGI CHAL ENGE, AlphaServer 8400 от DEC - это не совсем суперЭВМ. Но следует вспомнить, что такие требования возникают, в частности, со стороны ряда приложений ядерной физики, например, при обработке
результатов экспериментов на ускорителях элементарных частиц.
Как бы то ни было, наметилась явная тенденция к сближению понятий
"мэйнфрейм", "многопроцессорный сервер", "суперЭВМ" и “кластер”.
Нелишне заметить, что это происходит на фоне начавшегося во многих областях массированного перехода к централизации и укрупнению в противопо6
ложность процессу разукрупненияи децентрализации.
Традиционной сферой применения суперкомпьютеров всегда были
научные исследования: физика плазмы и статистическая механика, физика
конденсированных сред, молекулярная и атомная физика, теория элементарных частиц, газовая динамика и теория турбулентности, астрофизика. В химии - различные области вычислительной химии: квантовая химия (включая
расчеты электронной структуры для целей конструирования новых материалов, например, катализаторов и сверхпроводников), молекулярная динамика,
химическая кинетика, теория поверхностных явлений и химия твердого тела,конструирование лекарств. Естественно, что ряд областей применения
находится на стыках соответствующих наук, например, химии и биологии, и
перекрывается с техническими приложениями. Так, задачи метеорологии,
изучение атмосферных явлений и, в первую очередь, задача долгосрочного
прогноза погоды, для решения которой постоянно не хватает мощностей современных суперЭВМ, тесно связаны с решением ряда перечисленных выше
проблем физики. Среди технических проблем, для решения которых используются суперкомпьютеры, укажем на задачи аэрокосмической и автомобильной промышленности, ядерной энергетики, предсказания и разработки месторождений полезных ископаемых, нефтедобывающей и газовой промышленности (в том числе проблемы эффективной эксплуатации месторождений,
особенно трехмерные задачи их исследования), и, наконец, конструирование
новых микропроцессоров и компьютеров, в первую очередь самих суперЭВМ.
Анализируя потенциальные потребности в суперЭВМ существующих
сегодня приложений, можно условно разбить их на два класса. К первому
можно отнести приложения, в которых известно, какой уровень производительности надо достигнуть в каждом конкретном случае, например, долгосрочный прогноз погоды. Ко второму можно отнести задачи, для которых
характерен быстрый рост вычислительных затрат с увеличением размера исследуемого объекта. Например, в квантовой химии неэмпирические расчеты
электронной структуры молекул требуют затрат вычислительных ресурсов,
7
пропорциональных N^4 или И^5, где N условно характеризует размер молекулы. Сейчас многие молекулярные системы вынужденно исследуются в
упрощенном модельном представлении. Имея в резерве еще более крупные
молекулярные образования (биологические системы, кластеры и т.д.), квантовая химия дает пример приложения, являющегося "потенциально бесконечным" пользователем суперкомпьютерных ресурсов.
Есть еще одна проблема применения суперЭВМ, о которой необходимо
сказать - это визуализация данных, полученных в результате выполнения
расчетов. Часто, например, при решении дифференциальных уравнений методом сеток, приходится сталкиваться с гигантскими объемами результатов,
которые в числовой форме человек просто не в состоянии обработать. Здесь
во многих случаях необходимо обратиться к графической форме представления информации. В любом случае возникает задача транспортировки информации по компьютерной сети. Решению этого комплекса проблем в последнее время уделяется все большее внимание. В частности, знаменитый Национальный центр суперкомпьютерных приложений США (NCSA) совместно с
компанией Silicon Graphics ведет работы по программе "суперкомпьютерного
окружения будущего". В этом проекте предполагается интегрировать возможности суперкомпьютеров POWER CHALLENGE и средств визуализации
компании SGI со средствами информационной супермагистрали.
1.2 Архитектура
В соответствии с классической систематикой Флинна [2], все компьютеры делятся на четыре класса в зависимости от числа потоков команд и данных. К первому классу (последовательные компьютеры фон Неймана) принадлежат обычные скалярные однопроцессорные системы: одиночный поток
команд - одиночный поток данных (SISD). Персональный компьютер имеет
архитектуру SISD, причем не важно, используются ли в ПК конвейеры для
ускорения выполнения операций.
Второй класс характеризуется наличием одиночного потока команд, но
8
множественного nomoka данных (SIMD). К этому архитектурному классу
принадлежат однопроцессорные векторные или, точнее говоря, векторноконвейерные суперкомпьютеры, например, Cray-1 [6]. В этом случае мы имеем дело с одним потоком (векторных) команд, а потоков данных - много:
каждый элемент вектора входит в отдельный поток данных. К этому же классу вычислительных систем относятся матричные процессоры, например,
знаменитый в свое время ILLIAC-IV. Они также имеют векторные команды и
реализуют векторную обработку, но не посредством конвейеров, как в векторных суперкомпьютерах, а с помощью матриц процессоров.
К третьему классу - MIMD - относятся системы, имеющие множественный поток команд и множественный поток данных. К нему принадлежат не
только многопроцессорные векторные суперЭВМ, но и вообще все многопроцессорные компьютеры. Подавляющее большинство современных суперЭВМ имеют архитектуру MIMD.
Четвертый класс в систематике Флинна, MISD, не представляет практического интереса,по крайней мере для анализируемых нами компьютеров.
В последнее время в литературе часто используется также термин SPMD (одна программа - множественные данные). Он относится не к архитектуре компьютеров, а к модели распараллеливания программ и не является расширением систематики Флинна. SPMD обычно относится к MPP (т.е. MIMD) - системам и означает, что несколько копий одной программы параллельно выполняются в разных процессорных узлах с разными данными.
Интересно также упомянуть о принципиально ином направлении в развитии компьютерных архитектур - машинах потоков данных. В середине 80х годов многие исследователи полагали, что будущее высокопроизводительных ЭВМ связано именно с компьютерами, управляемыми потоками данных,
в отличие от всех рассмотренных нами классов вычислительных систем,
управляемых потоками команд. В машинах потоков данных могут одновременно выполняться сразу много команд, для которых готовы операнды. Хотя
ЭВМ с такой архитектурой сегодня промышленно не выпускаются, некоторые элементы этого подхода нашли свое отражение в современных суперска9
лярных микропроцессорах, имеющих много параллельно работающих функциональных устройств и буфер команд, ожидающих готовности операндов. В
качестве примеров таких микропроцессоров можно привести HP РА-8000 и
Intel Pentium Pro .
В соответствии с классификацией Флинна, рассмотрение архитектуры
суперЭВМ следовало бы начать с класса SISD. Однако все векторноконвейерные (в дальнейшем - просто векторные) суперЭВМ имеют архитектуру "не меньше" SIMD. Что касается суперкомпьютерных серверов, использующих современные высокопроизводительные микропроцессоры, таких как
SGI POWER CHALLENGE на базе R8000 или DEC AlphaServer 8200/8400 на
базе Alpha 21164, то их минимальные конфигурации бывают однопроцессорными. Однако, если не рассматривать собственно архитектуру этих микропроцессоров, то все особенности архитектуры собственно серверов следует
анализировать в "естественной" мультипроцессорной конфигурации.
1.3 Перспективы систем удалённого
управления
Актуальность удалённого управления кластеров очень велика потому,
что с ростом информационного образования людей (что наблюдается в последнее время) им хочется решать задачи которые самим не под силу или у
них нет таких технических возможностей для этого. Суперкомпьютеры же
позволяют решать задачи такие, которые не могут быть решены на обычном
персональном компьютере.
Таким образом любой человек хоть как то знакомый с параллельными
вычислениями может использовать кластер в своих целях. Что может благотворно повлиять на научную жизнь страны которая поддерживает такие системы.
10
1.4 Заключение
Сегодня в суперкомпьютерном мире наблюдается новая волна, вызванная как успехами в области микропроцессорных технологий, так и появлением нового круга задач, выходящих за рамки традиционных научноисследовательских лабораторий. Налицо быстрый прогресс в производительности микропроцессоров RISC-архитектуры, которая растет заметно быстрее,
чем производительность векторных процессоров. Например, микропроцессор
HP РА-8000 отстает от Cray T90 всего примерно в два раза. В результате в
ближайшее время вероятно дальнейшее вытеснение векторных суперЭВМ
компьютерами,
использующими
RISC-микропроцессоры,
такими,
как,
например, IBM SP2, Convex/HP SPP, DEC AlphaServer 8400, SGI POWER
CHALENGE. Подтверждением этого стали результаты рейтинга ТОР500, где
лидерами по числу инсталляций стали системы POWER CHALLENGE и SP2,
опережающие модели ведущего производителя суперкомпьютеров - компании Cray Research.
Тем не менее, очевидна, будет продолжаться развитие векторных суперЭВМ, по крайней мере от Cray Research. Возможно, оно начинает сдерживаться из-за требований совместимости со старыми моделями. Так, не нашла
потребителя система Cray-4 компании Cray Computer, имеющая характеристики конфигурации и производительность, близкие к новейшей системе
Cray T90 от Cray Research при в 2 раза более низкой цене, но несовместимая
с компьютерами Cray Research. В результате Cray Computer разорилась.
Успешно развиваются системы на базе Mpp-архитектур, в том числе с
распределенной памятью. Появление новых высокопроизводительных микропроцессоров, использующих дешевую КМОП-технологию, существенно
повышает конкурентноспособность данных систем.
11
2 ВЫЧИСЛИТЕЛЬНЫЕ СИСТЕМЫ
2.1 Система MBC-1000
2.1.2 Архитектура и системное ПО МВС-1000
Общее описание архитектуры
Основой системы является масштабируемый массив процессорных узлов. Каждый узел содержит вычислительный микропроцессор Alpha 21164 с
производительностью 2 GFLOPS при тактовой частоте 500 MHz и оперативную память объемом 128 MB, с возможностью расширения.
Процессорные узлы взаимодействуют через коммуникационные процессоры TMS320C44 производства Texas Instruments, имеющие по 4 внешних
канала (линка) с общей пропускной способностью 80 Мбайт/с (20 Мбайт/с
каждый). Также разрабатывается вариант системы с использованием коммуникационных процессоров SHARC (ADSP 21060) компании Analog Devices,
имеющих по 6 каналов с общей пропускной способностью до 240 Мбайт/с
(40 Мбайт/с каждый).
Топология сети
Процессорные узлы связаны между собой по оригинальной схеме,
сходной с топологией двухмерного тора (для 4-линковых узлов)[3]. Структурный модуль (рис.1) состоит из 16 вычислительных модулей, образующих
матрицу 4x4. При этом четыре угловых элемента матрицы соединяются через
транспьютерные линки по диагонали попарно. Оставшиеся 12 линков преднзаначаются для подсоединения внешних устройств (4 линка угловых ВМ) и
соединений с подобными ВМ. Максимальная длина пути в таком структурном модуле равна трем (против шести в исходной матрице 4x4).
12
Рис. 1. Структурный модуль системы, решетка 4x4
Конструктивным образованием МВС-1000 является базовый вычислительный блок, содержащий 32 вычислительных модуля (рис. 2). Максимальная длина пути между любыми между любыми из 32 вычислительных модулей равна пяти, как в булевском гиперкубе. При этом число свободных линков после комплектации блока составляет 16, что позволяет продолжить процедуру объединения. Возможна схема объединения двух базовых блоков в
64-процессорную систему приведена на рис. 3.
Рис. 2. Базовый вычислительный блок, 32 вычислительных модуля.
13
Рис. 3. Топология 64-процессорной системы МВС-1000.
Рис. 4. Структура 128-процессорной системы МВС-1000, 4 базовых
блока.
Конструктивные решения МВС-1000
Процессорный узел смонтирован на типовой многослойной плате. В
конструктивном модуле в виде стандартной стойки размером 0.6x0.8x2.2 м3
размещается до 64 узлов с системой электропитания и охлаждения. Вес стой-
14
ки - 200 кг, электропотребление - 4 кВт. Система МВС-1000 с производительностью до 1 TFLOPS состоит из 8 стоек (512 узлов).
Внешний доступ и управление системой
Для управления массивом процессоров и внешними устройствами, а
также для доступа к системе извне используется так называемый хосткомпьютер
(управляющая
машина).
Обычно
это
рабочая
станция
AlphaStation с процессором Alpha и операционной системой Digital Unix
(Tru64 Unix) или ПК на базе Intel с операционной системой Linux.
Программное обеспечение
Пользователям предоставляются компиляторы языков Fortran 77 и
C/C++. Коммуникационное ПО в МВС-1000 строится на основе специализированной транспортной службы Router+. На базе Router+ реализована адаптированная к МВС-1000 реализация интерфейса параллельного программирования MPI. Аналогично могут быть реализованы интерфейсы PVM, GNS,
DVM, HPF и др. Пользователи могут также вызывать функции Router+ непосредственно в своих программах. В планах разработчиков также поддержка
на вычислительных узлах стандартных протоколов TCP/IP.
Для задач визуализации разработана специализированная библиотека
GraphLib.
В настоящее время производится разработка системы управления очередями и распределения нагрузки, а также адаптация системы профилирования и трассировки параллельных программ.
Реализован многопользовательский режим и удаленный доступ к системе через специальный промежуточный компьютер (gateway). Для пользователей обеспечивается Unix-совместимая среда компиляции и запуска программ.
15
2.1.3 Работа пользователя с МВС-1000
Общие понятия
Построение системы МВС-1000 с точки зрения пользователя Internet
выглядит следующим образом. Система состоит из четырех важных компонент: многопроцессорного вычислителя, управляющей ЭВМ (далее - hostмашина), сервера и шлюза. Host-машина и сервер представляют собой рабочие станции Alpha. Шлюз - рабочая Intel-совместимая станция с ОС Linux.
Для примеров далее будет считаться, что сетевое имя host-машины - alpha,
сетевое имя сервера - alpha2, имя шлюза - gateway.
Шлюз является рабочим местом пользователей Internet. На шлюзе виден под тем же именем домашний каталог пользователя на сервере. При этом
каждый пользователь видит лишь свой домашний каталог, чем обеспечивается разграничение доступа. На шлюз пользователи "входят" из Internet, здесь
же они выполняют все действия по подготовке программ и данных и выполнению программ на вычислителе.
Трансляция и запуск программ для МВС-1000 в данной ситуации происходит следующим образом. Системным администратором МВС-1000 поддерживается ограниченный набор команд, которые пользователь Internet,
находясь на шлюзе, может выполнить на сервере и host-машине. Тем не менее, данного набора команд полностью хватает для изготовления всех возможных на сегодня приложений для МВС-1000 и их выполнения на вычислителе. В состав данного набора команд входят вызовы всех компиляторов
для МВС-1000 и все команды запуска задач (см. выше). На шлюзе данные
команды (трансляции и запуска) имеют точно такие же названия и форматы,
как и на сервере.
При выполнении команды компиляции на шлюзе запускается специальная программа, которая соединяется с сервером и передает ему на исполнение команду компиляции. Поскольку домашний каталог пользователя до16
ступен и на шлюзе и на сервере с одинаковым именем, то результаты компиляции можно наблюдать сразу и непосредственно. Пользователь совершенно
спокойно может включать эти вызовы команд компиляции в свои makeфайлы - все должно работать.
Старт (завершение, получение информации) задачи инициируется запуском на шлюзе пользователем команд уже описанной системы запуска.
Программа, принимающая от пользователя эти команды на шлюзе, соединяется с host-машиной и передает ей команды для исполнения.
Порядок работы пользователя
Для работы из Internet зарегистрированный в системе пользователь
должен:
1.
Установить на своем компьютере систему, поддерживаю-
щую протокол ssh.
2.
Зайти с использованием этого протокола на шлюз gateway.
3.
Произвести подготовку и трансляцию своей программы.
4.
Оформить паспорт задачи в системе запуска.
5.
Запустить задачу.
Пользователю доступна оболочка Midnight Commander (напоминающая Norton), которую можно вызвать, выполнив команду:
mc -c -a
Пользовательский конфигурационный файл
Имя конфигурационного файла .crunmvs и он должен находиться в
домашнем каталоге пользователя. Формат файла следующий :
# Это комментарий
# Следующая строка - название секции
17
# Все строки - аналогичны уже упоминавшимся
# Добавляется только одна строка
[General]
tmp_directory = ~/tmp
host = alpha
user_editor = /usr/local/bin/mcedit
# Добавленная срока определяет имя сервера
compile_server = alpha2
[Login]
user = USER
password
= tmsC40
При отсутствии секции Login имя и пароль будут запрашиваться системой при каждом вызове любой команды системы запуска и компиляции.
Необходимо отметить, что пользовательские пароли на сервере
(alpha2) и на host-машине (alpha) должны быть одинаковыми и могут изменяться только системным администратором. Для замены пароля на hostмашине и сервере надо связаться с системным администратором МВС-1000.
Заменить свой пароль на шлюзе пользователь может сам, выполнив команду:
passwd
Копирование файлов
Для копирования файлов пользователь может воспользоваться ftpклиентом, который доступен на шлюзе gateway. Копирование файлов возможно только через промежуточный ftp-сервер. При этом шлюз gateway может выступать только в роли ftp-клиента (не может быть сервером).
Отметим, что в составе оболочки Midnight Commander имеется встроенный удобный ftp-клиент.
18
Использование программы ssh для пользователей UNIX
При использовании, в качестве рабочей операционной системы, UNIX
можено использовать, при установлении соединения с удаленным сервером
института, программу ssh. Для этого надо ввести в командной строке:
ssh -l имя пользователя gateway.kiam.ru.
где "имя пользователя" - имя, под которым пользователь зарегистрирован на удаленном сервере.
2.2 Система СКИФ
Базовая кластерная архитектура
Концепция
создания
моделей
семейства
суперкомпьютеров
"СКИФ"[4] базируется на масштабируемой кластерной архитектуре, реализуемой на классических кластерах из вычислительных узлов (Рис.1) на основе
компонент широкого применения (стандартных микропроцессоров, модулей
памяти, жестких дисков и материнских плат, в том числе с поддержкой
SMP).
Кластерный архитектурный уровень - это тесносвязанная сеть (кластер) вычислительных узлов, работающих под управлением ОС Linux-одного
из клонов широко используемой многопользовательской универсальной операционной системы UNIX. Для организации параллельного выполнения прикладных задач на данном уровне используются:
разрабатываемая в рамках Программы оригинальная система поддержки параллельных вычислений - Т-система, реализующая автоматическое динамическое распараллеливание программ;
классические системы поддержки параллельных вычислений, обеспечивающие эффективное распараллеливание прикладных задач различных
классов (как правило, задач с явным параллелизмом): MPI, PVM, Norma,
DVM и др. В семействе суперкомпьютеров "СКИФ" в качестве базовой клас19
сической системы поддержки параллельных вычислений выбран MPI, что не
исключает использование других средств.
Рис.5 Базовая кластерная архитектура
На кластерном уровне с использованием Т-системы и MPI эффективно реализуются фрагменты со сложной логикой вычисления, с крупноблочным (явным статическим или скрытым динамическим) параллелизмом.
Фрагменты же с простой логикой вычисления, с конвейерным или мелкозернистым явным параллелизмом, с большими потоками информации, требующими обработки в реальном режиме времени, на кластерных конфигурациях
реализуются менее эффективно. Для организации параллельного исполнения
задач с подобными фрагментами наиболее адекватна модель потоковых вычислений (data-flow).
Кластерная архитектура является открытой и масштабируемой, т.е.
не накладывает жестких ограничений к программно-аппаратной платформе
узлов кластера, топологии вычислительной сети, конфигурации и диапазону
производительности суперкомпьютеров.
Для организации взаимодействия вычислительных узлов суперком20
пьютера в его составе используются различные сетевые (аппаратные и программные) средства, в совокупности образующие две системы передачи данных:
Cистемная сеть кластера (СС) или System Area Network (SAN) объединяет узлы кластерного уровня в кластер. Данная сеть поддерживает масштабируемость кластерного уровня суперкомпьютера, а также пересылку и
когерентность данных во всех вычислительных узлах кластерного уровня суперкомпьютера. Системная сеть кластера строится на основе специализированных высокоскоростных линков класса SCI, Myrinet, cLan и др., предназначенных для эффективной поддержки кластерных вычислений и соответствующей программной поддержки на уровне ОС Linux и систем организации параллельных вычислений (Т-система, MPI).
Вспомогательная сеть суперкомпьютера (ВС) с протоколом TCP/IP
объединяет узлы кластерного уровня в обычную (TCP/IP) локальную сеть
(TCP/IP LAN). Данная сеть может быть реализована на основе широко используемых сетевых технологий класса Fast Ethernet, Gigabit Ethernet, ATM и
др. Данная сеть предназначена для управления системой, подключения рабочих мест пользователей, интеграции суперкомпьютера в локальную сеть
предприятия и/или в глобальные сети. Кроме того, данный уровень может
быть использован и системой организации параллельных кластерных вычислений (Т-система, MPI) для вспомогательных целей (основные потоки информации, возникающие при организации параллельных кластерных вычислений, передаются через системную сеть кластера).
Примечание: В некоторых случаях аппаратура системной сети,
например, Myrinet, позволяет без ущерба для реализации кластерных вычислений поддержать на этой же аппаратуре реализацию сети TCP/IP. В этих
случаях аппаратные части обеих сетей (SAN и TCP/IP LAN) могут быть совмещены.
Кластерные конфигурации на базе только вспомогательной сети
TCP/IP без использования дорогостоящих специализированных высокоскоростных линков класса SCI могут быть реализованы в рамках семейства
21
"СКИФ" в виде самостоятельных изделий (TCP/IP кластеры). Программное
обеспечение таких кластеров - ОС Linux, T-система и соответствующая реализация MPI. Реализация сравнительно недорогих TCP/IP кластеров на базе
"масштабирования вниз" архитектурных решений "СКИФ" (дополнительный
или вторичный эффект) существенно расширяет область применения результатов реализации Программы.
Кластерные конфигурации на базе только вспомогательной сети могут быть реализованы как на базовых конструктивах "СКИФ", так и путем
кластеризации имеющихся у пользователей ПЭВМ ("персональные кластеры" или "супер ПЭВМ").
Универсальная двухуровневая архитектура
Для оптимизации организации на суперкомпьютерах "СКИФ" параллельного счета задач как с крупноблочным (явным статическим или
скрытым динамическим) параллелизмом, так и с конвейерным или мелкозернистым явным параллелизмом, с большими потоками информации, требующими обработки в реальном режиме времени, Концепция предусматривает
возможность реализации универсальной двухуровневой архитектуры суперкомпьютеров (Рис. 6):
1-й уровень - базовый (кластерный) архитектурный уровень;
2-й уровень - потоковый архитектурный уровень, реализующий модель
потоковых вычислений (data-flow).
Концепция предусматривает реализацию потокового архитектурного
уровня как на базе однородной вычислительной среды (ОВС) с использованием оригинальных СБИС ОВС, разрабатываемых в рамках Программы, так
и на базе других (альтернативных) структурных и технических решений
(например, на базе нейроструктур, FPGA типа XILINX и др.). По сути, вычислительные модули потокового уровня являются сопроцессорами вычислительных ресурсов кластерной конфигурации.
Предпосылкой объединения двух программно-аппаратных решений
(кластерного и потокового) для организации параллельной обработки в рам22
ках одной вычислительной системы, является то, что эти два подхода, как
уже отмечалось, своими сильными сторонами компенсируют недостатки
друг друга. Тем самым, в общем случае, каждая прикладная проблема может
быть разбита на:
фрагменты со сложной логикой вычисления, с крупноблочным (явным
статическим или скрытым динамическим) параллелизмом, эффективно реализуемые на кластерном уровне с использованием Т-системы и других (классических) систем поддержки параллельных вычислений;
фрагменты с простой логикой вычисления, с конвейерным или мелкозернистым явным параллелизмом, с большими потоками информации, требующими обработки в реальном режиме времени, эффективно реализуемые
на потоковом уровне.
23
Рис.6 Универсальная двухуровневая архитектура
На потоковом уровне может быть эффективно реализован высокоскоростной потоковый обмен со стандартной компьютерной периферией
и/или с нестандартными устройствами-датчиками, например, с датчиками
медицинских и других приборов.
Программные средства сопряжения кластерного и потокового
архитектурных уровней.
Средства взаимодействия двух уровней суперкомпьютера обеспечивают возможность взаимодействия между кластерным и потоковым уровнями суперкомпьютера и реализуются в рамках сетей SAN или TCP/IP LAN.
24
Следовательно, при реализации в модулях потокового уровня соответствующих сетевых интерфейсов, эти модули, в принципе, могут выступать в качестве устройств системной сети (SAN) и/или вспомогательной сети суперкомпьютера (TCP/IP LAN).
Программные средства сопряжения в части кла-
стерного уровня должны включать в себя:
-набор драйверов устройств, обеспечивающих сопряжение кластерного
и потокового уровней;
-базовую библиотеку стандартных примитивов обмена информацией и
управления потоковым уровнем;
-библиотеку прикладных задач и подпрограмм, реализуемых с использованием потокового уровня;
-структуры данных и программные механизмы, обеспечивающие:
-передачу Т-процесса, из которого осуществляется взаимодействие с
модулем потокового уровня, в один из вычислительных узлов кластерного
уровня, имеющих физический интерфейс с модулем потокового уровня;
-осуществление удаленного вызова функции/прикладной задачи из вычислительного узла кластерного уровня, не имеющего интерфейса с модулем
потокового уровня с использованием механизмов, предназначенных для распределенной работы с файлами.
В части потокового уровня программные средства сопряжения должны включать в себя реализованный в виде специализированной библиотеки
набор фрагментов программного кода, предназначенных для загрузки из кластерной компоненты в потоковую. Каждый из фрагментов непосредственно
реализует на потоковом архитектурном уровне ту или иную прикладную задачу или фрагмент вычислений, в частности:
-получает из кластерного уровня наборы входных данных;
-организует и осуществляет выполнение вычислений в модуле потокового уровня в соответствии с алгоритмом решения соответствующей прикладной задачи;
-передает из потокового в кластерный уровень наборы данных, содержащие результаты вычислений.
25
Описанный набор программных средств, структур данных и механизмов поддерживает возможности:
-передачи фрагмента решаемой задачи из Т-программы на вычисление
в модуль потокового уровня;
-передачи фрагмента решаемой задачи из выполняемого в модуле потокового уровня кода на вычисление в кластерную компоненту.
Отличительные особенности архитектуры семейства суперкомпьютеров "СКИФ"
Предложенная многоуровневая схема реализации архитектурных
принципов обладает рядом особенностей и преимуществ (по сравнению с
аналогичными разработками), позволяющими достичь современный мировой
уровень в суперкомпьютерной отрасли:
в части Т-системы: обеспечивается автоматическое динамическое распараллеливание программ, что освобождает программиста от большинства
трудоемких аспектов разработки параллельных программ, свойственных различным системам ручного статического распараллеливания:
обнаружение готовых к выполнению фрагментов задачи (процессов);
их распределение по процессорам;
их синхронизацию по данным.
Все эти (и другие) операции выполняются в Т-системе автоматически
и в динамике (во время выполнения задачи). Тем самым при более низких затратах на разработку параллельных программ обеспечивается более высокая
их надежность.
По сравнению с использованием распараллеливающих компиляторов, Т-система обеспечивает более глубокий уровень параллелизма во время
выполнения программы и более полное использование вычислительных ресурсов мультипроцессоров. Это связано с принципиальными алгоритмическими трудностями (алгоритмически неразрешимыми проблемами), не позволяющими во время компиляции (в статике) выполнить полный точный
анализ и предсказать последующее поведение программы во время счета.
26
Кроме указанных выше принципиальных преимуществ Т-системы
перед известными сегодня методами организации параллельного счета, в реализации Т-системы имеется ряд технологических находок, не имеющих аналогов в мире, в частности:
-реализация понятия "неготовое значение" и поддержка корректного
выполнения некоторых операций над неготовыми значениями. Тем самым
поддерживается возможность выполнение счета в некотором процессепотребителе в условиях, когда часть из обрабатываемых им значений еще не
готова, т. е. не вычислена в соответствующем процессе-поставщике. Данное
техническое решение обеспечивает обнаружение более глубокого параллелизма в программе;
-оригинальный алгоритм динамического автоматического распределения процессов по процессорам. Данный алгоритм учитывает особенности неоднородных распределенных вычислительных сетей. По сравнению с известными алгоритмами динамического автоматического распределения процессов по процессорам (например, с диффузионным алгоритмом и его модификациями), алгоритм Т-системы имеет существенно более низкий трафик
межпроцессорных передач. Тем самым, Т-система обеспечивает снижение
накладных расходов на организацию параллельного счета и предъявляет менее жесткие требования к пропускной способности аппаратуры объединения
процессорных элементов в кластер.
-в части потокового уровня: архитектура вычислительных модулей потокового уровня позволяет использовать естественный параллелизм решаемой задачи вплоть до битового уровня, то есть уровня структуры обрабатываемых данных, а также позволяет строить конвейеры произвольной глубины. Потоковый уровень предоставляет возможность одновременной обработки множества независимых некогерентных потоков.
Фактически, при решении конкретной функции или самостоятельной
задачи, на вычислительных модулях потокового уровня путем ввода соответствующей программы организуется спецпроцессор, реализующий решаемую
функцию или задачу с наибольшей эффективностью. На матрице модулей
27
потокового уровня одновременно могут решаться несколько независимых задач и функций, причем механизм перезагрузки сегментов потокового уровня
позволяет перезагружать часть матрицы без остановки выполнения еще незавершенных задач. Потоковый уровень обладает высокой гибкостью и перестраиваемостью, в частности, полной аппаратной и программной масштабируемостью, что позволяет строить на его основе вычислительные системы с
большим быстродействием. Производительность матрицы модулей потокового уровня, теоретически, растет линейно с увеличением рабочей частоты
поля и площади вычислительной матрицы.
Вычислительные модули потокового уровня позволяют создавать системы с высоким уровнем надежности и отказоустойчивости, эффективно реализовывать нейросетевые алгоритмы.
Предложенные архитектурные принципы позволяют эффективно реализовывать любые виды параллелизма. Архитектура является открытой и
масштабируемой, то есть не накладывает жестких ограничений к программно-аппаратной платформе узлов кластера, топологии вычислительной сети,
конфигурации и диапазону производительности суперкомпьютеров. Вычислительные системы, создаваемые на базе основополагающих концептуальных архитектурных принципов могут оптимально решать как классические
вычислительные задачи математической физики и линейной алгебры, так и
специализированные задачи обработки сигналов, моделирования виртуальной реальности, задачи управления сложными системами в реальном времени и другие приложения.
3 СИСТЕМА УДАЛЁННОГО ДОСТУПА ДЛЯ
ВЫЧИСЛИТЕЛЬНЫХ КЛАСТЕРНЫХ СИСТЕМ
Система удалённого доступа реализована для кластера состоящего из
компьютеров учебного класса на основе процессоров Intel Pentium и стоящей
на них ОС Windows.
28
3.1 Установка и настройка пакета MPICH
Пакет MPICH[5] существует в двух вариантах: для ОС Linux и для ОС
Windows. Мы остановим свой выбор на пакете для ОС Windows т.к. кластер стоит под управлением этой системы.
Разархивируем содержимое инсталляционного файла в локальную папку C:\Apps\mpich. После этого следует прописать пути к программам и
подключаемым файлам для всех пользователей кластера, либо для системы
в целом.
Необходимо добавить пути (path) к подключаемым файлам и программам библиотеки MPICH в переменные path, include и lib. Для нашего примера пути описаны в таблице 3.1.
Таблица 3.1.
Пути к подключаемым файлам
include C:\Apps\Microsoft Visual Studio\VC98\atl\include;
C:\Apps\Microsoft Visual Studio\VC98\mfc\include;
C:\Apps\Microsoft Visual Studio\VC98\include;
C:\Apps\mpich\include;C:\Apps\mpich\mpe\include
lib
C:\Apps\Microsoft Visual Studio\VC98\mfc\lib;
C:\Apps\Microsoft Visual Studio\VC98\lib;
C:\Apps\mpich\lib
29
path
%SystemRoot%\system32;
%SystemRoot%;
%SystemRoot%\System32\Wbem;
C:\Apps\mpich\bin;
C:\Apps\mpich\lib;
C:\Apps\Microsoft Visual Studio\VC98\Bin;
C:\Apps\Microsoft Visual Studio\Common\Tools;
C:\Apps\Microsoft Visual Studio\Common\MSDev98\Bin;
C:\Apps\Microsoft Visual Studio\Common\Tools\WinNT
Обратим внимание, что у MPICH в переменную path попадают 2 папки:
bin и lib, так как в lib содержится библиотека mpich.dll, необходимая для
работы MPICH-программ.
Далее необходимо установить mpd (multi-purpose daemon) в качестве
системного сервиса, вызвав из папки C:\Apps\mpich\bin команду
mpd -install -interact
Для получения списка машин, которые будут использоваться для запуска MPI-программ, нужно сконфигурировать mpd, вызвав его с опцией
–console:
mpd -console
либо с помощью программы mpiconfig без параметров:
mpiconfig.
При вызове этой программы появляется окно, выбрав кнопку “Select”
и в появившемся диалоге режим “Action/Scan hosts”, можно получить список доступных машин кластера, затем установить этот список в переменную “hosts” в mpd (“Apply all”).
30
Для установки пользователя, с правами которого запускаются
MPI-программы, существует команда
mpiregister
без параметров. Она запросит имя и пароль пользователя, затем запросит
подтверждение на внесение данных. Данные с настройками mpd хранятся в
реестре
Windows
в
ключе
HKEY_LOCAL_
MACHINE\
SOFTWARE\MPICH\MPD, т.е. едины для всех пользователей данной машины, в отличие от данных о пользователе, которые сохраняются в ключе реестра HKEY_CURRENT_USER\Software\MPICH и, следовательно, для каждого пользователя свои. Теперь, перезагрузив OC Windows, можно проверить
правильность установки MPICH, запустив примеры.
3.2 Описание системы удалённого
управления вычислительным кластером
Для реализации системы был выбран путь подключения к кластеру через Internet посредством web-браузера. Для этого система разделялась на две
части: 1 – клиентская часть (web-сайт для работы с конечным пользователем), 2 – серверная часть (сервис, отвечающий за выполнение задач на кластере).
3.2.1 Клиентская часть
Для разработки клиентской части были использованы такие технологии
как: ASP.Net[6], Microsoft .Net Framework 1.1, MySQL Server[7]. ASP.Net и
Microsoft .Net Framework 1.1 были применены в написании сайта, а MySQL
для хранения данных о пользователе и задачах поставленных им.
На сайте реализованы автоматическая регистрация, безопасность соединения для пользователя, страницы для управления кластером и удалённого администрирования кластера.
Безопасность соединения осуществляется посредством аутентификации, т.е. ввода Имени пользователя и Пароля (рис. 7). Для того чтобы пользователь не мог сразу зайти на страницу управления кластером, было исполь31
зовано переменные Session и написан объект SessionSequencer, контролирующий положение пользователя на сайте:
Imports System.Web
Public Class SessionSequencer
Private expectedPage As String
Private requestedPage As String
Private sequenceIndex As Integer
Private sequence() As String = {"login.aspx", "general.aspx"}
Private Request As HttpRequest
Private Response As HttpResponse
Private Session As SessionState.HttpSessionState
Public Sub New()
Request = HttpContext.Current.Request
Response = HttpContext.Current.Response
Session = HttpContext.Current.Session
If Session("sequenceIndex") Is Nothing Then
Session("sequenceIndex") = 0
End If
sequenceIndex = Session("sequenceIndex")
requestedPage
=
Request.ServerVariables("SCRIPT_NAME").ToLower
requestedPage
=
requestedPage.Substring(requestedPage.LastIndexOf("/") + 1)
If sequenceIndex < 0 Or sequenceIndex > sequence.GetUpperBound(0)
Then
sequenceIndex = 0
End If
expectedPage = sequence(sequenceIndex)
If requestedPage <> expectedPage Then
Response.Redirect(expectedPage)
End If
End Sub
Public Sub showSessionVars()
Dim aKey As String
For Each aKey In Session.Keys
Response.Write(aKey & "=" & Session.Item(aKey) & "<br>")
Next
End Sub
32
Public Sub NextPage()
If sequenceIndex + 1 < sequence.GetLength(0) Then
sequenceIndex += 1
Else
sequenceIndex = sequence(sequence.GetUpperBound(0))
End If
Session("sequenceIndex") = sequenceIndex
Session("sequence") = sequence(sequenceIndex)
Response.Redirect(sequence(sequenceIndex))
End Sub
End Class
Рис. 7 Вид страницы Аутентификации.
Регистрация пользователя (Рис. 8) доступна автоматически и данные
сохраняются в базе данных MySQL:
33
Рис. 8 Страница Регистрации пользователя.
Главная страница удалённого управления кластером (Рис. 9) позволяет:
просматривать содержимое личной папки пользователя на сервере; скачивать, удалять и закачивать файлы на сервер; компилировать файлы и ставить
их в очередь на выполнение.
34
Рис. 9 Страница Удалённого управления кластером.
Удаление файлов:
Dim fi As FileInfo
fi = New FileInfo("c:\inetpub\wwwroot\cluster\usersdirectory\" & Session("directory") & "\" & Session("selectfile"))
If fi.Exists Then
fi.Delete()
End If
Response.Redirect("general.aspx")
Закачка файлов на сервер:
Dim filename As String = File1.PostedFile.FileName.Remove(0,
File1.PostedFile.FileName.LastIndexOf("\") + 1)
If
File1.PostedFile.ContentLength
>
1048576
Or
File1.PostedFile.FileName = "" Then
Label3.Text = "Файл не закачан: или файл больше положенного
размера или введён неправильный путь."
Response.Redirect("general.aspx")
Else
:
File1.PostedFile.SaveAs("C:\Inetpub\wwwroot\cluster\usersdirectory\"
35
& Session("directory") & "\" & filename)
Label3.Text = "Файл успешно закачан."
'ListBox1.Items.Clear()
Response.Redirect("general.aspx")
End If
Компилирование файлов:
If Me.TextBox1.Text = "" Then
Label1.Text = ""
Response.Redirect("general.aspx")
Else
Dim clfile As String = Session("compilefile")
Dim str As String = clfile & " mpich2.lib"
Dim _pi As New ProcessStartInfo("cl", str)
_pi.UseShellExecute = False
_pi.RedirectStandardInput = True
_pi.RedirectStandardOutput = True
_pi.WorkingDirectory
=
"C:\Inetpub\wwwroot\cluster\usersdirectory\" & Session("directory")
& "\"
Dim _pr As Process = Process.Start(_pi)
Label1.Text = ""
Response.Redirect("general.aspx")
End If
Постановка файлов на выполнение:
Session("comp") = DropDownList1.SelectedValue
Session("process") = TextBox3.Text
Session("parametrs") = TextBox5.Text
Session("time") = TextBox4.Text
Session("email") = CheckBox1.Checked
If TextBox2.Text = "" Then
Label1.Text = ""
Response.Redirect("general.aspx")
Else
Dim myConnectionString As String = "Database=information;Data
Source=localhost;User Id=tol;Password=tol"
Dim myConnection As New MySqlConnection(myConnectionString)
36
Dim myInsertQuery As String = "INSERT INTO files (comp, process,
directory, filename, parametrs, queue, time, email) Values(" & Session("comp") & "," & Session("process") & ",'" & Session("directory")
& "','" & Session("runfile") & "','" & Session("parametrs") & "'," & 0
& "," & Session("time") & "," & Session("email") & ")"
Dim myCommand As New MySqlCommand(myInsertQuery)
myCommand.Connection = myConnection
myConnection.Open()
myCommand.ExecuteNonQuery()
myCommand.Connection.Close()
Response.Redirect("general.aspx")
End If
На странице удалённого администрирования (Рис. 10) расположены
элементы просмотра содержимого личной папки; скачивания, удаления и закачки файлов на сервер; управление кластером через командную строку, а
так же состояние работы кластера.
Рис. 10 Страница Администрирования кластера.
Управление кластера через командную строку:
If TextBox1.Text = "" Then
Label1.Text = ""
37
Response.Redirect("admin.aspx")
Else
Dim _pi As New ProcessStartInfo(TextBox1.Text, TextBox2.Text)
_pi.UseShellExecute = False
_pi.RedirectStandardInput = True
_pi.RedirectStandardOutput = True
_pi.WorkingDirectory
=
"C:\Inetpub\wwwroot\cluster\usersdirectory\" & Session("directory")
& "\"
Dim _pr As Process = Process.Start(_pi)
Label1.Text = ""
Response.Redirect("admin.aspx")
End If
Состояние кластера:
Dim SessionSequencer As New SessionSequencer3
Dim DirStr As String = Session("directory")
'ListBox1.Items.Clear()
Dim
di
As
New
DirectoryInfo(Server.MapPath(".")
&
"\usersdirectory\" & DirStr)
Dim fi As FileInfo
For Each fi In di.GetFiles
Me.ListBox1.Items.Add(fi.Name)
Next
Dim mySelectQuery As String = "SELECT * FROM files"
Dim mySelectQuery2 As String = "SELECT * FROM computers"
Dim
myConnection
As
New
MySqlConnection("Database=information;Data
Source=localhost;User
Id=tol;Password=tol")
Dim myCommand As New MySqlCommand(mySelectQuery, myConnection)
Dim myCommand2 As New MySqlCommand(mySelectQuery2, myConnection)
myConnection.Open()
Dim myReader As MySqlDataReader
myReader = myCommand.ExecuteReader()
DataGrid1.DataSource = myReader
DataGrid1.DataBind()
myReader.Close()
38
Dim myReader2 As MySqlDataReader
myReader2 = myCommand2.ExecuteReader()
DataGrid2.DataSource = myReader2
DataGrid2.DataBind()
myReader2.Close()
myConnection.Close()
3.2.2 Серверная часть
Серверная часть отвечает за выполнением задач на кластере. Она была
реализована в виде исполняемого файла и написана на Visual Basic .Net с использованием технологий MySQL. Программа имеет возможности: опроса
состояния кластера с внесением этой информации в базу данных, оптимизации очереди выполнения задач и непосредственно выполнение программ на
вычислительной кластерной системе.
Оптимизация очереди выполнения задач:
Public Sub Optimizer()
Dim myConnString As String = "Database=information;Data
Source=localhost;User Id=tol;Password=tol"
Dim mySelectQuery As String = "SELECT MIN(ID), MAX(ID)
FROM files"
Dim myConnection As New MySqlConnection(myConnString)
Dim myCommand As New MySqlCommand(mySelectQuery, myConnection)
myConnection.Open()
Dim myReader As MySqlDataReader
myReader = myCommand.ExecuteReader()
While myReader.Read()
MinID = myReader.GetInt32(0)
MaxID = myReader.GetInt32(1)
End While
myReader.Close()
Dim id As Integer = MinID
Dim Queue, FierstID, SecondID, Comp1, Comp2 As Integer
Comp1 = 0
Queue = 1
For i As Integer = MinID To MaxID
39
mySelectQuery = "SELECT Comp FROM files WHERE ID=" & i
myCommand = New MySqlCommand(mySelectQuery, myConnection)
myReader = myCommand.ExecuteReader()
While myReader.Read()
Comp2 = myReader.GetInt32(0)
End While
myReader.Close()
If Comp1 + Comp2 <= 6 Then
Dim myUpdateQuery As String = "UPDATE files SET Queue =" &
Queue & " WHERE ID=" & i
Dim myCommand1 As New MySqlCommand(myUpdateQuery,
myConnection)
myCommand1.ExecuteNonQuery()
Comp1 = Comp1 + Comp2
Else
Queue = Queue + 1
Dim myUpdateQuery As String = "UPDATE files SET
Queue =" & Queue & " WHERE ID=" & i
Dim myCommand1 As New MySqlCommand(myUpdateQuery,
myConnection)
myCommand1.ExecuteNonQuery()
Comp1 = Comp2
End If
Next i
myConnection.Close()
End Sub
Выполнение задач на сервере:
Public Sub GoJobs()
Dim datarecordsint(6, 3) As Integer
Dim datarecordsstr(6, 3) As String
Dim Queue As Integer = 1
Dim myConnString As String = "Database=information;Data
Source=localhost;User Id=tol;Password=tol"
While True
For i As Integer = MinID To MaxID
40
Dim mySelectQuery As String = "SELECT Comp, Process,
directory, FileName, Parametrs, Time FROM files WHERE Queue ="
& Queue
Dim myConnection As New MySqlConnection(myConnString)
Dim
myCommand
As
New
MySqlCommand(mySelectQuery, myConnection)
myConnection.Open()
Dim myReader As MySqlDataReader
myReader = myCommand.ExecuteReader()
Dim j As Integer = 0
While myReader.Read()
datarecordsint(j, 0) = myReader.GetInt32(0)
datarecordsint(j, 1) = myReader.GetInt32(1)
datarecordsstr(j, 0) = myReader.GetString(2)
datarecordsstr(j, 1) = myReader.GetString(3)
datarecordsstr(j, 2) = myReader.GetString(4)
datarecordsint(j, 2) = myReader.GetInt32(5)
j=j+1
End While
myReader.Close()
myConnection.Close()
Dim MaxTime As Integer = 0
For k As Integer = 0 To j - 1
MaxTime = Math.Max(MaxTime, datarecordsint(k, 2))
Next k
Dim message As String = ""
For k As Integer = 1 To j
Dim str As String = " -np 2 icpi.exe"
Dim _pi As New ProcessStartInfo("mpiexec", str)
_pi.UseShellExecute = False
_pi.RedirectStandardInput = True
_pi.RedirectStandardOutput = True
_pi.WorkingDirectory
=
"C:\Inetpub\wwwroot\cluster\usersdirectory\" & datarecordsstr(k - 1,
0) & "\"
Dim _pr As Process = Process.Start(_pi)
Thread.Sleep(MaxTime * 1)
message = _pr.StandardOutput.ReadToEnd
41
Dim
path
As
String
=
"C:\Inetpub\wwwroot\cluster\usersdirectory\" & datarecordsstr(k - 1,
0) & "\" & datarecordsstr(k - 1, 1) & ".txt"
Dim fi As FileInfo = New FileInfo(path)
If fi.Exists = False Then
'Create a file to write to.
Dim sw As StreamWriter = fi.CreateText()
sw.WriteLine(message)
sw.Flush()
sw.Close()
End If
Next
Dim myDeleteQuery As String = "DELETE FROM files
WHERE Queue =" & Queue
Dim myCommand1 As New MySqlCommand(myDeleteQuery,
myConnection)
myConnection.Open()
myCommand1.ExecuteNonQuery()
myConnection.Close()
Queue = Queue + 1
Next
Optimizer()
End While
End Sub
42
ЗАКЛЮЧЕНИЕ
В ходе проделанной работы были изучены системы удалённого управления кластеров (МВС-1000 (российской разработки) и СКИФ (совместной
белорусско-российской разработки)).
Была разработана и реализована система удалённого управления на базе существующего вычислительного кластера. В разработке были задействованы такие технологии как: ASP.Net, Microsoft .Net Framework 1.1, MySQL.
Для самой системы было реализовано безопасность соединения (аутентификация); скачивание, удаление и закачивание файлов на сервер; компилирование исходных кодов, постановка задач на выполнение в очередь, оптимизация очереди и непосредственно запуск задач на существующем кластере.
Данная работа может использоваться в дальнейшем совместно с другими обучающими системами, а так же на других более сложных вычислительных системах.
43
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Современные
суперкомпьютеры:
состояние
http://osp.admin.tomsk.ru/os/1995/06/33.htm
и
перспективы:
2. Gropp W., Lusk E., Skjellum A. Using MPI: Portable Parallel
Programming with the Message-Passing Interface. Second edition,
published in 1999 by MIT Press, 371 p.
3. МВС-1000
-
Архитектура
и
системное
ПО:
http://www.parallel.ru/mvs/mvs1000.html
4. Руководство
пользователя
системы
МВС-1000:
http://www.parallel.ru/mvs/user.html
5. СКИФ: http://skif.bas-net.by/
6. Шпаковский Г.И., Серикова Н.В. Программирование для многопроцессорных систем в стандарте MPI: Пособие / Мн.: БГУ, 2002. -323 с.
ISBN 985-445- 727-3
7. А. Рассел Джонс. Программирование ASP.NET средствами VB.NET.
Полное руководство.: Пер. с англ. – К.: ВЕК+, СПб.: КОРОНА принт,
К: НТИ, М.: Энтроп, 2003. – 784 с.
8. Справочное руководство по MySQL: http://www.mysql.ru/docs/man
9. O'Reilly - Programming Visual Basic .NET, Second Edition. ISBN: : 0-59600438-9, 800 Pages, April 2003
44
ПРИЛОЖЕНИЕ А
Исходные коды программ
Серверная часть:
Imports MySql.Data.MySqlClient
Imports System.IO
Imports System.Threading
Public Class Form1
Inherits System.Windows.Forms.Form
Dim MinID, MaxID As Integer
#Region " Windows Form Designer generated code "
Public Sub New()
MyBase.New()
'This call is required by the Windows Form Designer.
InitializeComponent()
'Add any initialization after the InitializeComponent() call
End Sub
'Form overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
45
Friend WithEvents Button1 As System.Windows.Forms.Button
Friend WithEvents Button2 As System.Windows.Forms.Button
Friend WithEvents MainMenu1 As System.Windows.Forms.MainMenu
Friend WithEvents MenuItem1 As System.Windows.Forms.MenuItem
Friend WithEvents MenuItem2 As System.Windows.Forms.MenuItem
Friend
WithEvents
ContextMenu1
As
System.Windows.Forms.ContextMenu
Friend WithEvents MenuItem3 As System.Windows.Forms.MenuItem
Friend WithEvents NotifyIcon1 As System.Windows.Forms.NotifyIcon
Friend WithEvents MenuItem4 As System.Windows.Forms.MenuItem
Friend WithEvents MenuItem5 As System.Windows.Forms.MenuItem
Friend WithEvents Timer1 As System.Windows.Forms.Timer
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container
Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(Form1))
Me.Button1 = New System.Windows.Forms.Button
Me.Button2 = New System.Windows.Forms.Button
Me.MainMenu1 = New System.Windows.Forms.MainMenu
Me.MenuItem1 = New System.Windows.Forms.MenuItem
Me.MenuItem2 = New System.Windows.Forms.MenuItem
Me.ContextMenu1 = New System.Windows.Forms.ContextMenu
Me.MenuItem4 = New System.Windows.Forms.MenuItem
Me.MenuItem5 = New System.Windows.Forms.MenuItem
Me.MenuItem3 = New System.Windows.Forms.MenuItem
Me.NotifyIcon1
=
New
System.Windows.Forms.NotifyIcon(Me.components)
Me.Timer1 = New System.Windows.Forms.Timer(Me.components)
Me.SuspendLayout()
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(24, 8)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(80, 24)
Me.Button1.TabIndex = 0
Me.Button1.Text = "Старт"
46
'
'Button2
'
Me.Button2.Location = New System.Drawing.Point(144, 8)
Me.Button2.Name = "Button2"
Me.Button2.Size = New System.Drawing.Size(80, 24)
Me.Button2.TabIndex = 1
Me.Button2.Text = "Стоп"
'
'MainMenu1
'
Me.MainMenu1.MenuItems.AddRange(New
System.Windows.Forms.MenuItem() {Me.MenuItem1})
'
'MenuItem1
'
Me.MenuItem1.Index = 0
Me.MenuItem1.MenuItems.AddRange(New
System.Windows.Forms.MenuItem() {Me.MenuItem2})
Me.MenuItem1.Text = "Файл"
'
'MenuItem2
'
Me.MenuItem2.Index = 0
Me.MenuItem2.Shortcut = System.Windows.Forms.Shortcut.CtrlE
Me.MenuItem2.Text = "Выход"
'
'ContextMenu1
'
Me.ContextMenu1.MenuItems.AddRange(New
System.Windows.Forms.MenuItem()
{Me.MenuItem4,
Me.MenuItem5,
Me.MenuItem3})
'
'MenuItem4
'
Me.MenuItem4.Index = 0
Me.MenuItem4.Text = "Старт"
'
47
'MenuItem5
'
Me.MenuItem5.Index = 1
Me.MenuItem5.Text = "Стоп"
'
'MenuItem3
'
Me.MenuItem3.Index = 2
Me.MenuItem3.Shortcut = System.Windows.Forms.Shortcut.CtrlE
Me.MenuItem3.Text = "Выход"
'
'NotifyIcon1
'
Me.NotifyIcon1.ContextMenu = Me.ContextMenu1
Me.NotifyIcon1.Icon
=
CType(resources.GetObject("NotifyIcon1.Icon"), System.Drawing.Icon)
Me.NotifyIcon1.Text = "NotifyIcon1"
Me.NotifyIcon1.Visible = True
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(248, 42)
Me.ContextMenu = Me.ContextMenu1
Me.Controls.Add(Me.Button2)
Me.Controls.Add(Me.Button1)
Me.FormBorderStyle
=
System.Windows.Forms.FormBorderStyle.FixedSingle
Me.MaximizeBox = False
Me.Menu = Me.MainMenu1
Me.MinimizeBox = False
Me.Name = "Form1"
Me.Text = "Cluster"
Me.ResumeLayout(False)
End Sub
#End Region
48
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Optimizer()
GoJobs()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
End Sub
Private Sub MenuItem3_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles MenuItem3.Click
Close()
End Sub
Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles MenuItem2.Click
Close()
End Sub
Public Sub Optimizer()
Dim myConnString As String = "Database=information;Data
Source=localhost;User Id=tol;Password=tol"
Dim mySelectQuery As String = "SELECT MIN(ID), MAX(ID)
FROM files"
Dim myConnection As New MySqlConnection(myConnString)
Dim myCommand As New MySqlCommand(mySelectQuery, myConnection)
myConnection.Open()
Dim myReader As MySqlDataReader
myReader = myCommand.ExecuteReader()
While myReader.Read()
MinID = myReader.GetInt32(0)
MaxID = myReader.GetInt32(1)
End While
myReader.Close()
49
Dim id As Integer = MinID
Dim Queue, FierstID, SecondID, Comp1, Comp2 As Integer
Comp1 = 0
Queue = 1
For i As Integer = MinID To MaxID
mySelectQuery = "SELECT Comp FROM files WHERE ID=" & i
myCommand = New MySqlCommand(mySelectQuery, myConnection)
myReader = myCommand.ExecuteReader()
While myReader.Read()
Comp2 = myReader.GetInt32(0)
End While
myReader.Close()
If Comp1 + Comp2 <= 6 Then
Dim myUpdateQuery As String = "UPDATE files SET Queue ="
& Queue & " WHERE ID=" & i
Dim myCommand1 As New MySqlCommand(myUpdateQuery,
myConnection)
myCommand1.ExecuteNonQuery()
Comp1 = Comp1 + Comp2
Else
Queue = Queue + 1
Dim myUpdateQuery As String = "UPDATE files SET Queue ="
& Queue & " WHERE ID=" & i
Dim myCommand1 As New MySqlCommand(myUpdateQuery,
myConnection)
myCommand1.ExecuteNonQuery()
Comp1 = Comp2
End If
Next i
myConnection.Close()
End Sub
Public Sub WorkComp()
End Sub
Public Sub GoJobs()
50
Dim datarecordsint(6, 3) As Integer
Dim datarecordsstr(6, 3) As String
Dim Queue As Integer = 1
Dim myConnString As String = "Database=information;Data
Source=localhost;User Id=tol;Password=tol"
While True
For i As Integer = MinID To MaxID
Dim mySelectQuery As String = "SELECT Comp, Process, directory, FileName, Parametrs, Time FROM files WHERE Queue =" & Queue
Dim myConnection As New MySqlConnection(myConnString)
Dim myCommand As New MySqlCommand(mySelectQuery,
myConnection)
myConnection.Open()
Dim myReader As MySqlDataReader
myReader = myCommand.ExecuteReader()
Dim j As Integer = 0
While myReader.Read()
datarecordsint(j, 0) = myReader.GetInt32(0)
datarecordsint(j, 1) = myReader.GetInt32(1)
datarecordsstr(j, 0) = myReader.GetString(2)
datarecordsstr(j, 1) = myReader.GetString(3)
datarecordsstr(j, 2) = myReader.GetString(4)
datarecordsint(j, 2) = myReader.GetInt32(5)
j=j+1
End While
myReader.Close()
myConnection.Close()
Dim MaxTime As Integer = 0
For k As Integer = 0 To j - 1
MaxTime = Math.Max(MaxTime, datarecordsint(k, 2))
Next k
Dim message As String = ""
For k As Integer = 1 To j
Dim str As String = " -np 2 icpi.exe"
Dim _pi As New ProcessStartInfo("mpiexec", str)
_pi.UseShellExecute = False
_pi.RedirectStandardInput = True
_pi.RedirectStandardOutput = True
51
_pi.WorkingDirectory
=
"C:\Inetpub\wwwroot\cluster\usersdirectory\" & datarecordsstr(k - 1, 0) & "\"
Dim _pr As Process = Process.Start(_pi)
Thread.Sleep(MaxTime * 1)
message = _pr.StandardOutput.ReadToEnd
Dim
path
As
String
=
"C:\Inetpub\wwwroot\cluster\usersdirectory\" & datarecordsstr(k - 1, 0) & "\" &
datarecordsstr(k - 1, 1) & ".txt"
Dim fi As FileInfo = New FileInfo(path)
If fi.Exists = False Then
'Create a file to write to.
Dim sw As StreamWriter = fi.CreateText()
sw.WriteLine(message)
sw.Flush()
sw.Close()
End If
Next
Dim myDeleteQuery As String = "DELETE FROM files WHERE
Queue =" & Queue
Dim myCommand1 As New MySqlCommand(myDeleteQuery,
myConnection)
myConnection.Open()
myCommand1.ExecuteNonQuery()
myConnection.Close()
Queue = Queue + 1
Next
Optimizer()
End While
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Reply As ICMP_ECHO_REPLY
Dim lngSuccess As Long
Dim strIPAddress As String
52
'Get the sockets ready.
If SocketsInitialize() Then
'Address to ping
strIPAddress = "10.144.50.60"
'Ping the IP that is passing the address and get a reply.
lngSuccess = ping(strIPAddress, Reply)
'Display the results.
Debug.Write("Address to Ping: " & strIPAddress)
Debug.Write("Raw ICMP code: " & lngSuccess)
Debug.Write("Ping
Response
Message
:
"
&
atePingResponse(lngSuccess))
Debug.Write("Time : " & Reply.RoundTripTime & " ms")
'Clean up the sockets.
SocketsCleanup()
Else
'Winsock error failure, initializing the sockets.
Debug.Write(WINSOCK_ERROR)
End If
End Sub
End Class
Клиентская часть:
SessionSequencer.vb
Imports System.Web
Public Class SessionSequencer
Private expectedPage As String
Private requestedPage As String
Private sequenceIndex As Integer
Private sequence() As String = {"login.aspx", "general.aspx"}
53
Evalu-
Private Request As HttpRequest
Private Response As HttpResponse
Private Session As SessionState.HttpSessionState
Public Sub New()
Request = HttpContext.Current.Request
Response = HttpContext.Current.Response
Session = HttpContext.Current.Session
If Session("sequenceIndex") Is Nothing Then
Session("sequenceIndex") = 0
End If
sequenceIndex = Session("sequenceIndex")
requestedPage
=
Request.ServerVariables("SCRIPT_NAME").ToLower
requestedPage
=
requestedPage.Substring(requestedPage.LastIndexOf("/") + 1)
If sequenceIndex < 0 Or sequenceIndex > sequence.GetUpperBound(0)
Then
sequenceIndex = 0
End If
expectedPage = sequence(sequenceIndex)
If requestedPage <> expectedPage Then
Response.Redirect(expectedPage)
End If
End Sub
Public Sub showSessionVars()
Dim aKey As String
For Each aKey In Session.Keys
Response.Write(aKey & "=" & Session.Item(aKey) & "<br>")
Next
End Sub
Public Sub NextPage()
If sequenceIndex + 1 < sequence.GetLength(0) Then
sequenceIndex += 1
Else
sequenceIndex = sequence(sequence.GetUpperBound(0))
End If
Session("sequenceIndex") = sequenceIndex
Session("sequence") = sequence(sequenceIndex)
54
Response.Redirect(sequence(sequenceIndex))
End Sub
End Class
Login.vb
Public Class WebForm6
Inherits System.Web.UI.Page
#Region " Web Form Designer Generated Code "
'This call is required by the Web Form Designer.
<System.Diagnostics.DebuggerStepThrough()> Private
izeComponent()
Sub
Initial-
End Sub
Protected WithEvents Label1 As System.Web.UI.WebControls.Label
Protected
WithEvents
TxtUserName
As
System.Web.UI.WebControls.TextBox
Protected
WithEvents
UsernameValidator
As
System.Web.UI.WebControls.RegularExpressionValidator
Protected WithEvents Label2 As System.Web.UI.WebControls.Label
Protected
WithEvents
TxtPassword
As
System.Web.UI.WebControls.TextBox
Protected WithEvents Button1 As System.Web.UI.WebControls.Button
Protected
WithEvents
PasswordValidator
As
System.Web.UI.WebControls.RegularExpressionValidator
Protected
WithEvents
HyperLink1
As
System.Web.UI.WebControls.HyperLink
Protected
WithEvents
HyperLink2
As
System.Web.UI.WebControls.HyperLink
Protected
WithEvents
loginFieldValidator1
As
System.Web.UI.WebControls.RequiredFieldValidator
Protected
WithEvents
passFieldValidator
As
System.Web.UI.WebControls.RequiredFieldValidator
Protected WithEvents label3 As System.Web.UI.WebControls.Label
Protected
WithEvents
HyperLink3
As
System.Web.UI.WebControls.HyperLink
55
'NOTE: The following placeholder declaration is required by the Web
Form Designer.
'Do not delete or move it.
Private designerPlaceholderDeclaration As System.Object
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: This method call is required by the Web Form Designer
'Do not modify it using the code editor.
InitializeComponent()
End Sub
#End Region
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Put user code to initialize the page here
Dim SessionSequencer As New SessionSequencer
label3.Text = ""
If IsPostBack Then
Page.Validate()
If Page.IsValid Then
Dim str As String
Dim myConnString As String = "Database=information;Data
Source=localhost;User Id=tol;Password=tol"
Dim mySelectQuery As String = "SELECT password, directory
FROM usersinfo WHERE login ='" & TxtUserName.Text & "'"
Dim myConnection As New MySqlConnection(myConnString)
Dim myCommand As New MySqlCommand(mySelectQuery,
myConnection)
myConnection.Open()
Dim myReader As MySqlDataReader
myReader = myCommand.ExecuteReader()
Dim filedir As String
While (myReader.Read())
str = myReader.GetString(0)
filedir = myReader.GetString(1)
End While
56
myReader.Close()
myConnection.Close()
Session("directory") = filedir
If str = TxtPassword.Text Then
Session("username") = Me.TxtUserName.Text
Session("password") = Me.TxtPassword.Text
Call SessionSequencer.NextPage()
Else : label3.Text = "Неправильные Имя пользователя или
Пароль. Введите пожалуйста данные заново."
End If
End If
End If
End Sub
' Private Sub Button1_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles Button1.Click
' Page.Validate()
' If Page.IsValid Then
'End Sub
Registration.vb
Imports System.IO
Public Class WebForm2
Inherits System.Web.UI.Page
#Region " Web Form Designer Generated Code "
'This call is required by the Web Form Designer.
<System.Diagnostics.DebuggerStepThrough()> Private
izeComponent()
Sub
Initial-
End Sub
Protected
WithEvents
HyperLink1
As
System.Web.UI.WebControls.HyperLink
Protected WithEvents Label1 As System.Web.UI.WebControls.Label
Protected WithEvents Label2 As System.Web.UI.WebControls.Label
Protected WithEvents Label3 As System.Web.UI.WebControls.Label
57
Protected WithEvents Label4 As System.Web.UI.WebControls.Label
Protected WithEvents Label5 As System.Web.UI.WebControls.Label
Protected WithEvents Label6 As System.Web.UI.WebControls.Label
Protected WithEvents Button1 As System.Web.UI.WebControls.Button
Protected
WithEvents
TxtRegName
As
System.Web.UI.WebControls.TextBox
Protected
WithEvents
TxtRegSoname
As
System.Web.UI.WebControls.TextBox
Protected
WithEvents
TxtRegEmail
As
System.Web.UI.WebControls.TextBox
Protected
WithEvents
TxtRegUsername
As
System.Web.UI.WebControls.TextBox
Protected
WithEvents
TxtRegPassword
As
System.Web.UI.WebControls.TextBox
Protected
WithEvents
TxtRegConfPassword
As
System.Web.UI.WebControls.TextBox
Protected
WithEvents
RegNameValidator
As
System.Web.UI.WebControls.RegularExpressionValidator
Protected
WithEvents
RegSonameValidator
As
System.Web.UI.WebControls.RegularExpressionValidator
Protected
WithEvents
RegEmailValidator
As
System.Web.UI.WebControls.RegularExpressionValidator
Protected
WithEvents
RegUsernameValidator
As
System.Web.UI.WebControls.RegularExpressionValidator
Protected
WithEvents
RegPasswordValidator
As
System.Web.UI.WebControls.RegularExpressionValidator
Protected
WithEvents
RequiredFieldValidator1
As
System.Web.UI.WebControls.RequiredFieldValidator
Protected
WithEvents
RequiredFieldValidator2
As
System.Web.UI.WebControls.RequiredFieldValidator
Protected
WithEvents
RequiredFieldValidator3
As
System.Web.UI.WebControls.RequiredFieldValidator
Protected
WithEvents
RequiredFieldValidator4
As
System.Web.UI.WebControls.RequiredFieldValidator
Protected
WithEvents
RequiredFieldValidator5
As
System.Web.UI.WebControls.RequiredFieldValidator
Protected
WithEvents
RequiredFieldValidator6
As
System.Web.UI.WebControls.RequiredFieldValidator
58
Protected WithEvents Label7 As System.Web.UI.WebControls.Label
Protected WithEvents Label8 As System.Web.UI.WebControls.Label
Protected
WithEvents
HyperLink2
As
System.Web.UI.WebControls.HyperLink
'NOTE: The following placeholder declaration is required by the Web
Form Designer.
'Do not delete or move it.
Private designerPlaceholderDeclaration As System.Object
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: This method call is required by the Web Form Designer
'Do not modify it using the code editor.
InitializeComponent()
End Sub
#End Region
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Put user code to initialize the page here
Dim SessionSequencer2 As New SessionSequencer2
Label7.Text = ""
Label8.Text = ""
If IsPostBack Then
Page.Validate()
If Page.IsValid Then
If TxtRegPassword.Text = TxtRegConfPassword.Text Then
Dim str As String
Dim myConnString As String = "Database=information;Data
Source=localhost;User Id=tol;Password=tol"
Dim mySelectQuery As String = "SELECT login FROM usersinfo WHERE login ='" & TxtRegUsername.Text & "'"
Dim myConnection As New MySqlConnection(myConnString)
Dim myCommand As New MySqlCommand(mySelectQuery,
myConnection)
myConnection.Open()
59
Dim myReader As MySqlDataReader
myReader = myCommand.ExecuteReader()
While (myReader.Read())
str = myReader.GetString(0)
End While
myReader.Close()
myConnection.Close()
If str Is Nothing Then
Dim Direct As String = System.Guid.NewGuid.ToString
Dim myInsertQuery As String = "INSERT INTO usersinfo
(FierstName, LastName, Login, Password, Email, Directory, Admin) Values('" &
TxtRegName.Text & "','" & TxtRegSoname.Text & "','" & TxtRegUsername.Text
& "','" & TxtRegPassword.Text & "','" & TxtRegEmail.Text & "','" & Direct & "',"
& "0)"
Dim
myCommand1
As
New
MySqlCommand(myInsertQuery)
myCommand1.Connection = myConnection
myConnection.Open()
myCommand1.ExecuteNonQuery()
myCommand1.Connection.Close()
Dim di As DirectoryInfo
di
=
New
DirectoryInfo("c:\inetpub\wwwroot\cluster\usersdirectory\" & Direct)
If Not di.Exists Then
di.Create()
End If
Session("txtregname") = Me.TxtRegName.Text
Session("txtregsoname") = Me.TxtRegSoname.Text
Call SessionSequencer2.NextPage()
Else : Label7.Text = "Это Имя пользователя уже используется. Введите пожалуста другое."
End If
Else : Label8.Text = "Пароли не совпадают. Введите их заново."
End If
End If
End If
End Sub
60
General.vb
Imports System.IO
Imports System.Diagnostics
Imports System.ComponentModel
Public Class WebForm7
Inherits System.Web.UI.Page
#Region " Web Form Designer Generated Code "
'This call is required by the Web Form Designer.
<System.Diagnostics.DebuggerStepThrough()> Private
izeComponent()
Sub
Initial-
End Sub
Protected
WithEvents
HyperLink1
As
System.Web.UI.WebControls.HyperLink
Protected WithEvents ListBox1 As System.Web.UI.WebControls.ListBox
Protected WithEvents Button1 As System.Web.UI.WebControls.Button
Protected WithEvents Button3 As System.Web.UI.WebControls.Button
Protected
WithEvents
TextBox1
As
System.Web.UI.WebControls.TextBox
Protected WithEvents Button4 As System.Web.UI.WebControls.Button
Protected
WithEvents
TextBox2
As
System.Web.UI.WebControls.TextBox
Protected WithEvents Button5 As System.Web.UI.WebControls.Button
Protected WithEvents Button6 As System.Web.UI.WebControls.Button
Protected WithEvents Button7 As System.Web.UI.WebControls.Button
Protected WithEvents Label1 As System.Web.UI.WebControls.Label
Protected WithEvents Label2 As System.Web.UI.WebControls.Label
Protected WithEvents Label3 As System.Web.UI.WebControls.Label
Protected WithEvents Button2 As System.Web.UI.WebControls.Button
Protected
WithEvents
File1
As
System.Web.UI.HtmlControls.HtmlInputFile
Protected
WithEvents
CheckBox1
As
System.Web.UI.WebControls.CheckBox
Protected
WithEvents
TextBox3
As
System.Web.UI.WebControls.TextBox
Protected
WithEvents
DropDownList1
As
Sys61
tem.Web.UI.WebControls.DropDownList
Protected
WithEvents
TextBox4
As
System.Web.UI.WebControls.TextBox
Protected
WithEvents
TextBox5
As
System.Web.UI.WebControls.TextBox
Protected WithEvents Label4 As System.Web.UI.WebControls.Label
Protected WithEvents Label5 As System.Web.UI.WebControls.Label
Protected WithEvents Label6 As System.Web.UI.WebControls.Label
Protected
WithEvents
HyperLink2
As
System.Web.UI.WebControls.HyperLink
'NOTE: The following placeholder declaration is required by the Web
Form Designer.
'Do not delete or move it.
Private designerPlaceholderDeclaration As System.Object
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: This method call is required by the Web Form Designer
'Do not modify it using the code editor.
'ListBox1.Items.Clear()
InitializeComponent()
End Sub
#End Region
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Put user code to initialize the page here
Dim SessionSequencer As New SessionSequencer
Dim DirStr As String = Session("directory")
'ListBox1.Items.Clear()
TextBox1.Text = Session("compilefile")
TextBox2.Text = Session("runfile")
Dim di As New DirectoryInfo(Server.MapPath(".") & "\usersdirectory\"
& DirStr)
Dim fi As FileInfo
For Each fi In di.GetFiles
62
Me.ListBox1.Items.Add(fi.Name)
Next
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim filename As String = File1.PostedFile.FileName.Remove(0,
File1.PostedFile.FileName.LastIndexOf("\") + 1)
If
File1.PostedFile.ContentLength
>
1048576
Or
File1.PostedFile.FileName = "" Then
Label3.Text = "Файл не закачан: или файл больше положенного
размера или введён неправильный путь."
Response.Redirect("general.aspx")
Else
:
File1.PostedFile.SaveAs("C:\Inetpub\wwwroot\cluster\usersdirectory\" & Session("directory") & "\" & filename)
Label3.Text = "Файл успешно закачан."
'ListBox1.Items.Clear()
Response.Redirect("general.aspx")
End If
'ListBox1.Items.Clear()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Response.Redirect("\cluster\usersdirectory"
&
"\"
&
Session("directory") & "\" & Session("selectfile"))
End Sub
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object,
ByVal
e
As
System.EventArgs)
Handles
ListBox1.SelectedIndexChanged
Session("selectfile") = Me.ListBox1.SelectedItem.Text
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
Dim fi As FileInfo
63
fi = New FileInfo("c:\inetpub\wwwroot\cluster\usersdirectory\" & Session("directory") & "\" & Session("selectfile"))
If fi.Exists Then
fi.Delete()
End If
Response.Redirect("general.aspx")
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button4.Click
TextBox1.Text = Session("selectfile")
Session("compilefile") = TextBox1.Text
Response.Redirect("general.aspx")
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button5.Click
TextBox2.Text = Session("selectfile")
Session("runfile") = TextBox2.Text
Response.Redirect("general.aspx")
End Sub
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button6.Click
If Me.TextBox1.Text = "" Then
Label1.Text = ""
Response.Redirect("general.aspx")
Else
Dim clfile As String = Session("compilefile")
Dim str As String = clfile & " mpich2.lib"
Dim _pi As New ProcessStartInfo("cl", str)
_pi.UseShellExecute = False
_pi.RedirectStandardInput = True
_pi.RedirectStandardOutput = True
_pi.WorkingDirectory
=
"C:\Inetpub\wwwroot\cluster\usersdirectory\" & Session("directory") & "\"
Dim _pr As Process = Process.Start(_pi)
Label1.Text = ""
64
Response.Redirect("general.aspx")
End If
End Sub
Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button7.Click
Session("comp") = DropDownList1.SelectedValue
Session("process") = TextBox3.Text
Session("parametrs") = TextBox5.Text
Session("time") = TextBox4.Text
Session("email") = CheckBox1.Checked
If TextBox2.Text = "" Then
Label1.Text = ""
Response.Redirect("general.aspx")
Else
Dim myConnectionString As String = "Database=information;Data
Source=localhost;User Id=tol;Password=tol"
Dim
myConnection
As
New
MySqlConnection(myConnectionString)
Dim myInsertQuery As String = "INSERT INTO files (comp, process, directory, filename, parametrs, queue, time, email) Values(" & Session("comp") & "," & Session("process") & ",'" & Session("directory") & "','" &
Session("runfile") & "','" & Session("parametrs") & "'," & 0 & "," & Session("time") & "," & Session("email") & ")"
Dim myCommand As New MySqlCommand(myInsertQuery)
myCommand.Connection = myConnection
myConnection.Open()
myCommand.ExecuteNonQuery()
myCommand.Connection.Close()
Response.Redirect("general.aspx")
End If
End Sub
End Class
Admin.vb
Imports System.IO
Imports System.Diagnostics
Imports System.ComponentModel
65
Public Class WebForm10
Inherits System.Web.UI.Page
#Region " Web Form Designer Generated Code "
'This call is required by the Web Form Designer.
<System.Diagnostics.DebuggerStepThrough()> Private
izeComponent()
Sub
Initial-
End Sub
Protected
WithEvents
HyperLink1
As
System.Web.UI.WebControls.HyperLink
Protected
WithEvents
HyperLink2
As
System.Web.UI.WebControls.HyperLink
Protected WithEvents Button1 As System.Web.UI.WebControls.Button
Protected WithEvents Label3 As System.Web.UI.WebControls.Label
Protected WithEvents Button3 As System.Web.UI.WebControls.Button
Protected WithEvents Button2 As System.Web.UI.WebControls.Button
Protected WithEvents ListBox1 As System.Web.UI.WebControls.ListBox
Protected
WithEvents
File1
As
System.Web.UI.HtmlControls.HtmlInputFile
Protected WithEvents Label1 As System.Web.UI.WebControls.Label
Protected
WithEvents
TextBox1
As
System.Web.UI.WebControls.TextBox
Protected
WithEvents
TextBox2
As
System.Web.UI.WebControls.TextBox
Protected WithEvents Button4 As System.Web.UI.WebControls.Button
Protected
WithEvents
DataGrid1
As
System.Web.UI.WebControls.DataGrid
Protected WithEvents Label2 As System.Web.UI.WebControls.Label
Protected WithEvents Label4 As System.Web.UI.WebControls.Label
Protected
WithEvents
DataGrid2
As
System.Web.UI.WebControls.DataGrid
'NOTE: The following placeholder declaration is required by the Web
Form Designer.
'Do not delete or move it.
Private designerPlaceholderDeclaration As System.Object
66
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: This method call is required by the Web Form Designer
'Do not modify it using the code editor.
InitializeComponent()
End Sub
#End Region
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Put user code to initialize the page here
Dim SessionSequencer As New SessionSequencer3
Dim DirStr As String = Session("directory")
'ListBox1.Items.Clear()
Dim di As New DirectoryInfo(Server.MapPath(".") & "\usersdirectory\"
& DirStr)
Dim fi As FileInfo
For Each fi In di.GetFiles
Me.ListBox1.Items.Add(fi.Name)
Next
Dim mySelectQuery As String = "SELECT * FROM files"
Dim mySelectQuery2 As String = "SELECT * FROM computers"
Dim
myConnection
As
New
MySqlConnection("Database=information;Data Source=localhost;User Id=tol;Password=tol")
Dim myCommand As New MySqlCommand(mySelectQuery, myConnection)
Dim myCommand2 As New MySqlCommand(mySelectQuery2, myConnection)
myConnection.Open()
Dim myReader As MySqlDataReader
myReader = myCommand.ExecuteReader()
DataGrid1.DataSource = myReader
DataGrid1.DataBind()
myReader.Close()
Dim myReader2 As MySqlDataReader
myReader2 = myCommand2.ExecuteReader()
67
DataGrid2.DataSource = myReader2
DataGrid2.DataBind()
myReader2.Close()
myConnection.Close()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim filename As String = File1.PostedFile.FileName.Remove(0,
File1.PostedFile.FileName.LastIndexOf("\") + 1)
If
File1.PostedFile.ContentLength
>
1048576
Or
File1.PostedFile.FileName = "" Then
Label3.Text = "Файл не закачан: или файл больше положенного
размера или введён неправильный путь."
Response.Redirect("general.aspx")
Else
:
File1.PostedFile.SaveAs("C:\Inetpub\wwwroot\cluster\usersdirectory\" & Session("directory") & "\" & filename)
Label3.Text = "Файл успешно закачан."
'ListBox1.Items.Clear()
Response.Redirect("admin.aspx")
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Response.Redirect("\cluster\usersdirectory"
&
"\"
&
Session("directory") & "\" & Session("selectfile"))
End Sub
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object,
ByVal
e
As
System.EventArgs)
Handles
ListBox1.SelectedIndexChanged
Session("selectfile") = Me.ListBox1.SelectedItem.Text
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
68
Dim fi As FileInfo
fi = New FileInfo("c:\inetpub\wwwroot\cluster\usersdirectory\" & Session("directory") & "\" & Session("selectfile"))
If fi.Exists Then
fi.Delete()
End If
Response.Redirect("admin.aspx")
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button4.Click
If TextBox1.Text = "" Then
Label1.Text = ""
Response.Redirect("admin.aspx")
Else
Dim _pi As New ProcessStartInfo(TextBox1.Text, TextBox2.Text)
_pi.UseShellExecute = False
_pi.RedirectStandardInput = True
_pi.RedirectStandardOutput = True
_pi.WorkingDirectory
=
"C:\Inetpub\wwwroot\cluster\usersdirectory\" & Session("directory") & "\"
Dim _pr As Process = Process.Start(_pi)
Label1.Text = ""
Response.Redirect("admin.aspx")
End If
End Sub
End Class
69
Download