МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ Факультет радиофизики и электроники Кафедра информатики РАЗРАБОТКА СИСТЕМЫ УДАЛЁННОГО УПРАВЛЕНИЯ ВЫЧИСЛИТЕЛЬНЫМ КЛАСТЕРОМ Дипломная работа студента 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