Программист на Марсе: Shutdown Dammit Until

в 10:52, , рубрики: C, Блог компании Edison, марс, марсоход, отладка, Программирование, Промышленное программирование, разработка, тестирование, Тестирование IT-систем

— Хьюстон, у нас проблемы.
— Нет, Марк, это у тебя проблемы.

Как спится программистам и тестировщикам марсохода за 400 миллионов долларов? Особенно если на 18 сол аппарат не вышел на связь.

Программист на Марсе: Shutdown Dammit Until - 1

Марк Адлер — американский разработчик программного обеспечения, который работает в сфере исследования космоса. Более всего он известен благодаря своей работе в области сжатия данных, являясь автором хеш-функции Adler-32, а так же как со-автор библиотеки для сжатия данных zlib и gzip. Он участвовал в разработке Info-ZIP и формата изображений Portable Network Graphics (PNG). Адлер также был ответственным за миссию марсохода «Спирит» в рамках программы «Mars Exploration Rover».

Вместе с компанией Edison (которая специализируется на разработке защитных релейных систем и приложений для моделирования опытов), расскажем вам о разработчике ПО марсохода и о том, как развивались события, когда пытались исправить ошибку софта на расстоянии 225 миллионов километров.

Биография

Адлер родился в Маями (штат Флорида), был единственным ребенком Дэвида и Берты Адлер. Он получил степень бакалавра наук в области математических расчетов и мастера наук в области электротехники в Университете Флориды в 1981 г. И 1985 г. соответственно. В 1990 г. Адлер стал кандидатом наук по физике в Калифорнийском технологическом институте. Проживает в г. Ла Каньяда (штат Калифорния) месте с Дианой Сэйнт-Джеймс, у них двое детей – Джошуа и Захари. Диана работает в Калифорнийском технологическом институте, занимается постановкой и участвует в театральных выступлениях.

Программист на Марсе: Shutdown Dammit Until - 2

За совместную работу с Дж. Гейлли (автор gzip) получил награду 2009 USENIX за вклад в разработку FLOSS алгоритмов по сжатию данных. [Источник — STUG Award]

Карьера

После защиты докторской Адлер работал в компании Hughes Aircraft в подразделении Космоса и Коммуникаций над различными проектами, в том числе анализ эффектов рентгеновских всплесков на спутниковые каналы, разработка помехоустойчивоого кодирования (error-correcting codes), разработка противоугонного автомобильного ключа, исследования сжатия видео и изображений (wavelets и MPEG-2). [Источник — Caltech: About Mark Adler]

Исследование Марса

С 1992 г. по 1995 г. Адлер был ведущим инженером миссии Кассини-Гюйгенс. После этого был назначен на должность координатора программы по исследованию Марса в Jet Propulsion Laboratory (JPL) с 1996 г. по 1998 год. Таким образом, он был ответственным за планирование миссий по исследованию Марса с 2001 года.

В период 1999-2000 работал над проектом по доставке образцов с Марса (Mars Sample Return), в рамках которого планировалось осуществить три миссии на Марс (2003-2005) и привезти образцы на Землю в 2005 году. Однако проект был отклонен из-за провала миссии Mars Polar Lander.

Mars Exploration Rover

Программист на Марсе: Shutdown Dammit Until - 3

Адлер инициировал проект по исследованию Марса Mars Exploration Rover (марсоходы «Спирит» и «Оппортьюнити») и принимал активное участие в его осуществлении.

В настоящее время Адлер является главой проекта Low Density Supersonic Decelerator – разработка средства по спуску на Марса грузов весом от двух до трех тонн.

Размышления Марка о Марсе и о своей работе (англ).

Сейчас Марк руководитель проекта «Сверхзвуковой замедлитель низкой плотности» (Low Density Supersonic Decelerator или LDSD)

«Spirit». 18-й сол. Аномалия

Рассказывает Марк Адлер. 22 сентября 2006 г. Архивные материалы Планетарного Сообщества.

В предыдущем посте я обещал рассказать о том, что произошло со «Спирит» через неделю после того, как Президент объявил о национальной программе «Взгляд на исследование космоса».

И так, беглый взгляд изнутри на то, как управлять бесценной национальной собственностью.

21 января 2004 г. 18 марсианских дней (солов) прошло с того момента, как «Спирит» успешно приземлился на Марсе и около недели после его успешного выезда с посадочной платформы на поверхность Марса. Все шло так невероятно хорошо, что мы с трудом в это верили. Это было на самом деле странно наблюдать: ровер работал на Марсе намного лучше, чем во время тестирования. «Спирит» был задействован в настоящей геологической разведке на поверхности чужого мира! Мы чувствовали себя самыми счастливыми людьми на Земле.

Что ж, удача вскоре отвернулась от нас.

Дженнифер Троспер и я поочередно исполняли обязанности по тактическому управлению миссией «Спирита». 18-й сол дежурила Дженнифер, а у меня был выходной. Правда я все равно пришел в ЛРД около полудня дать интервью для документального фильма. На выходе я столкнулся со Стивом Скваерсом, научным руководителем программы MER (Mars Exploration Rovers). Он как раз входил, чтобы дать свое интервью. Увидев меня, Стив сказал: «Ты уже в курсе насчет «Спирита»?» Вопрос и серьезной тон Стива мгновенно выдернули меня из сонного состояния. «Что ты имеешь в виду?» — уставившись на него, спросил я. Стив сказал, что мы не получили никакого сигнала от «Спирита» в положенное время, ни через антенну с высоким коэффициентом усиления напрямую на Землю, ни через ретранслятор орбитального аппарата «Марс Одиссей».

О боже.

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

Все указывало на то, что проблема была в марсоходе, и все очень серьезно.

Космические миссии рискованны. Мы к этому привыкли. Мы тщательно обдумываем наиболее опасные моменты. Для программы MER наибольшие риски были, по порядку: доставка, спуск и посадка, или, как мы их называли, шесть минут ужаса, вместе с очень рискованным запуском с Земли, а также с после-посадочными операциями по съезду с платформы и развёртыванию ровера и отсоединению кабелей.

Запуск, посадка и выход. Любое из этого заставит тебя поседеть. Со «Спиритом» мы прорвались через это. Все рискованное осталось позади, мы считали. А дальше, конечно, при должном внимании и заботе, крупные опасности больше не предвиделись. Легкое и размеренное плаванье вперед.

Все это только добавило тревожности. Что, чёрт возьми, произошло?

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

На 19-й сол мы просто пытались связаться со «Спиритом», чтобы получить от него обратную связь. Прежде чем начать, я, по традиции, исполнил песню в центре управления миссией, посвященную событиям дня. Для 19-ого сола я выбрал «S.O.S.» группы Abba. В общем, это почти все, к чему был причастен «Спирит» в тот день. Попытки связи не увенчались успехом, был получен лишь сигнал передатчика марсохода. Когда нет информации для передачи, он все равно включается и подает важный сигнал-свидетельство о том, что он все еще там. Он не полностью потерян. Хотя кроме этого никакой другой информации получено не было, мы посчитали это хорошим днем. Свой отчет по ситуации в тот день я закончил на оптимистичной ноте: «В долгосрочной перспективе планируем восстановить состояние аппарата, провести диагностику и корректировку случившегося и вернуться к нормальному графику работ». Отчеты о 20-м и 21-ом солах я закончил теми же словами.

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

Мы увидели, что внутренняя температура марсохода сильно превышала норму, а заряд батареи был намного ниже ожидаемого. Эти два фактора четко указывали на то, что ровер не собирался переходить в спящий режим, как должен был. Обычно, его компьютер работает пять или шесть часов в день. Это сохраняет драгоценную солнечную энергию, хранящуюся в аккумуляторе, а также предотвращает перегрев устройства. Что ж, «Спирит» не спал уже долгое время, и, возможно, уже не уснет.

У нас на руках был один заболевший марсоход. У «Спирита» была бессонница, лихорадка, он все время слабел, бессвязно бормотал и уже долгое время не слушался команд.

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

20-ого сола главной нашей задачей было заставить ровер уснуть. Мы надеялись, что команда «отключиться» достигнет устройства в рамках коммуникационной сессии. Таким образом, мы смогли бы увидеть преждевременное окончание сессии, что подтвердило бы получение устройством команды. И так, мы послали команду отключения устройства до определенного времени — SHUTDWN_DMT_TIL, которая имеет приоритет над любыми действиями, совершаемыми устройством в текущий момент (названия команд были скромно украшены юмором).

Мы были уверены в том, что это сработает. Ух… Мы заставили «Спирит» заснуть. Для проверки послали запрос на устройство. Который должен был остаться без ответа — ровер в спящем режиме, он не может ни получать, ни отвечать на сигналы.

И тут… мы получили ответный сигнал.

Что за …? «Спирит» должен был уснуть! Но нет. Он решил задержаться на работе допоздна.

Положение Земли вынудило нас отложить попытки до следующего дня. В это время ровер продолжал расходовать заряд, а электроника перегреваться. У нас стремительно кончалось время.

21-й сол. У нас появился план. Основной версией о сложившейся неполадке, по крайней мере, которая оставляла нам место для маневра, на тот момент была следующая: компьютер марсохода застрял в «перезагрузочной петле». Ответ программного обеспечения на проблему, которую оно не может решить — перезагрузка. То же самое, что делаете вы, когда ваш комп подвис. Но так как там не было никого, кто мог бы нажать на кнопку сброса, марсоход делал это автоматически. Однако если софт сталкивается с ошибкой во время перезагрузки, тогда он обречен перезагружаться вечно.

Разработчики предусмотрительно запрограммировали задержку между перезагрузками, во время которой можно поговорить с марсоходом. Этим можно объяснить его прерывистое выполнение команд — положительный результат будет лишь в случае получения устройством сигнала в межзагрузочный интервал.

Идея перезагрузки проста: все, что вызывало проблему в предыдущей сессии, исчезнет в новой. Но в данном случае проблема оставалось. Значит, «Спирит» вспоминал что-то между перезагрузками, что было причиной сбоя. Это указывало на флэш-память (как в вашей цифровой камере), либо на незначительный по объему блок памяти EEPROM, либо на аппаратный сбой. Флэш-память используется на марсоходе как жесткий диск у вас на компьютере — там хранится файловая система.

Опять же, гении-разработчики встроили для нас «черный ход». Существовал способ заставить ровер перезагрузиться без оглядки на файловую систему на флэш-памяти. Радиоаппаратура, которая получает сигнал с Земли, способна декодировать несколько команд своими силами, т.н. аппаратные команды. Для их распознавания и выполнения вообще не требуется компьютера. Одна из этих команд — указать компьютеру не использовать файловую систему при загрузке. Другой подобной командой можно заставить компьютер перезагрузиться.

Поэтому вот что мы сделали на 21-й сол. После нескольких попыток нам удалось в конце концов победно загрузить «Спирит» в более-менее здоровом режиме, в котором он отвечал на команды и не мямлил чушь. Какое же это было облегчение! Мы запросили историю по энергопотреблению за последние несколько дней, отложили ближайшие по графику сессии связи с орбитальным ретранслятором, и, наконец, позволили «Спириту» его давно заслуженный и крайне необходимый сон. На этот раз все получилось.

Теперь у нас был секретное средство, чтобы заставить «Спирит» работать. Ровер все еще должен был просыпаться каждое утро в режиме загрузочного цикла, но мы могли быстро послать необходимые команды загрузиться, минуя файловую систему. Что мы и делали несколько следующих дней. Мы выиграли гонку со временем и теперь могли аккуратно и методично выяснить, что произошло, исправить это и продолжить миссию.

Поэтому я пошел домой и мгновенно уснул. Мой будильник прозвенел пять часов спустя. Почему? Чтобы я мог вернуться в ЛРД и не пропустил посадку «Оппортьюнити» этой ночью. Несколько часов после того, как мы вернули контроль над «Спиритом», «Оппортьюнити» ворвалась с криком в марсианскую атмосферу на скорости 12 тыс. миль в час. Посадка прошла успешно, и мы снова почувствовали себя уверенно — у нас есть два вездехода, на Марсе, в безопасности. Ух, ну и приключение.

В конце 21-ого сола была пройден поворотный пункт в операции по восстановлению. Правда, потребовалось еще две недели для завершения диагностики, решения проблем (пришлось отформатировать жесткий диск (флэш-память) устройства) и возобновления полной работоспособности «Спирита».

По мере того, как мы восстанавливали информацию, накопленную перед сбоем, мы вытащили эту красивую цветную фотографию флага США на манипуляторе Rock Abrasion Tool (RAT). Этот флаг был на защитном кожухе, который был сделан из остатков башен-близнецов Всемирного торгового центра. RAT был разработан и создан в Манхеттене, в паре кварталов от того места, где были башни. Мы поместили эту картинку со звездами и полосками на больших мониторах в нашем центре управления, и я проиграл наш национальный гимн. Все стояли, приложив руку к сердцу. Это был хороший момент.

С тех пор «Спирит» функционировал просто прекрасно, не принимая во внимания такие признаки возраста, как усилившийся шум мотора. В то время как я пишу это, «Спирит» преодолел отметку в 967 солов. Девятьсот шестьдесят семь?! Подождите, тут какая-то ошибка. Дайте-ка проверю… Н-нет, все так. Невероятно.

Вы, наверно, гадаете, что же было основной причиной сбоя на 18-й сол. В конечном счете, мы поняли, что это была просто ошибка в программном обеспечении ровера, которую мы не отловили на стадии тестирования. По мере сбора нами информации объем занятой памяти все больше и больше увеличивался. На 18-й сол блок памяти заполнился, и процесс перезагрузки прекращался из-за невозможности прочитать файловую систему. Вообще-то, мы задумывались над возможными проблемами после многочисленных отработанных солов. Чтобы рассеять эти подозрения, мы провели 10-солный тест перед посадкой. Но мы не проводили 18-солный тест. Пока «Спирит» не провел его за нас на Марсе, да.

Наверняка, еще не раз нам встретятся серьезные ошибки программного обеспечения на других космических кораблях. Но я гарантирую, подобная ошибка больше не застанет нас врасплох.

За помощь с переводом спасибо Сергею Даньшину.

Программист на Марсе: Shutdown Dammit Until - 4
Закат солнца на Марсе. Снимок марсохода «Spirit»

Работа над ошибками

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

The Mars Rover Spirit FLASH Anomaly (Glenn Reeves, Tracy Neilson, Jet Propulsion Laboratory)

Программист на Марсе: Shutdown Dammit Until - 5

Еще пример, как разработчики NASA работают над ошибками. С рекомендациями — MER Spirit Flash Memory Anomaly (2004)

Интересные факты

  • Spirit перзагружал себя 60 раз в течение двух дней.
  • Компьютер марсохода был оснащен 32-bit Rad 6000 микропроцессором, противорадиационной версией чипа PowerPC (который использовался в некоторых маках). Скорость — 20 миллионов операций в секунду.
  • Всего у этого компьютера три вида памяти: 128 Мбайт оперативной, которая стирается при отключении питания, 256 Мбайт энергонезависимой флэш-памяти для хранения данных и, наконец, электрически программируемое ПЗУ, где хранится эталонная копия ПО.
  • Полетное ПО полностью написано на C запускаемая на vxWorks. Наземный софт — это смесь C, C++, Fortran, Perl и Java (и может немного чего еще).
  • Большая часть кода Stereo Vision и Rover Navigation Software (около 70 000 строк) написаны на C++. Еще немного кода написано на С и ассемблере для оптимизации.

[Источник — c2.com/cgi/wiki?MarsSpiritSoftwareProblem]


Как в Edison происходит процесс тестирования софта для системы мониторинга электросети и визуализации событий или рентгеновского томографа смотрите в ролике:

Автор: Edison

Источник

Поделиться новостью

* - обязательные к заполнению поля