Как стать автором
Обновить

Комментарии 25

Что-то я не очень понимаю, что значит «устойчивый к спец-факторам софт»? Каковы его свойства и каким образом на него могут влиять спец-факторы?
Одиночные эффекты могут:
1) Приводить к тому, что какие-то биты в памяти изменятся. В кэше, в оперативной памяти или в регистрах процессора.
2) Из-за тиристорного эффекта будет инициирована экстренная перезагрузка процессора.

«Устойчивый к спецфакторам софт» — такой софт, который позволяет преодолеть последствия подобных событий. Например, я встречал статьи про компилятор, который повторяет некоторые команды и сравнивает результат их выполнения друг с другом, инициируя прерывания, если результаты не сошлись. Идея набросить какой-то софт на коммерческие чипы вместо использования дорогих и медленных специальных радстойких процессоров не нова)
преодолеть последствия подобных событий.

Преодолеть — это значит что? Чтобы программа спокойно выполнялась дальше, как ни в чем не бывало?
Преодолеть — это значит что?
Как определите термин, так и будет. Главное, чтобы после стало лучше, чем было до.
Ну мое определение — чтобы программа выполнялась дальше в реальном времени. Т.е. событие не должно приводить к пропуску цикла исполнения
Допустим, у вас двойная ошибка в слове памяти, код Хэмминга умеет исправлять только одиночные. Что будете делать?
Допустим у вас система с тройным резервированием.
Ошибка детектируется либо этим компьютером, либо системой голосования и данный компьютер «маркируется» как поломанный и его результаты больше не принимаются во внимание.
Система продолжает работать на оставшихся двух без остановок или пропуска циклов. В это время поломанный компьютер перезагружается и синхронизируется с двумя другими. Он также может делать и более быстрое восстановление — например прогнать быстрый BIST тест, определить и изолировать проблемы, а затем опять засинхронизироваться. Если после этого его результаты начинают совпадать с исправными компьютерами, он опять «маркируется» здоровым.
Допустим у нас двойная ошибка с слове памяти и этой линии нет в кэше, откуда её можно было бы восстановить.
Система не может просто так продолжать работать на оставшихся двух т.к. случись снова ошибка, голосовать будет некому. Надо как можно скорее восстановить кворум. Если отпустить те два компа в работу, возможно, догнать будет непросто и не быстро, всё это время система будет нестабильна.
Засинхронизоваться — как вы себе это представляете?
Пока один продолжает работать, другой из под него страницы выдёргивает?
Кто должен определять какие результаты должны совпасть?
Засинхронизоваться — как вы себе это представляете?
Пока один продолжает работать, другой из под него страницы выдёргивает?
Кто должен определять какие результаты должны совпасть?

Ну, если знать, как это все устроено в резервируемых системах, то все вопросы отпадут сами собой.
Кто должен определять какие результаты должны совпасть?


Определяете некоторый набор данных и его гоняете между комплектами. Сбойный комплект упал, поднялся, засинхронизировался — все.

Понятно, что вы тут заодно дискутируете на тему «а как синхронизироваться, если надо быстрее», «а если надо еще быстрее» и «а если надо совсем быстро», но тут говорить просто не о чем — надо смотреть конкретные характеристики быстроты синхронизации и частоты сбоев.
Тут выход ровно один — надо снизить вероятность этого события до уровня ниже заданного. Data scrubber в руки — и вперед.
ое определение — чтобы программа выполнялась дальше в реальном времени
Мне кажется, что это очень сильное требование. То есть да, в идеале так и должно быть, но стать иммунными к вообще всем событиям невозможно, зато можно разумно минимизировать частоту вызванных ими сбоев. Начать можно с чего-то более простого и разумного. А главное — измеримого.
Например, с того, чтобы после аварийного ребута программа выполнялась заново не с начала, а с какой-то промежуточной контрольной точки. Или чтобы софт умел заниматься синхронизацией перезагруженного процессора с двумя оставшимися нормальными. Или чтобы программа компилировалась таким образом, чтобы снизить вероятность нештатной реакции на сбои.

У меня глупый вопрос. А зачем делать компьютер устойчивым? Может, лучше, сделать его маленьким и напихать сотню маленьких компьютеров в кластер? Вот у меня тут в хозяйстве есть кластер, в котором я могу выключить пять любых компьютеров (из 11) — и оставшиеся продолжат работать. Более того, если очень докопаться, то оставшиеся 6 могут попытаться починить первые 5 посредством внешней перезагрузки и проверки (условный cputest/memtest). Как только узел войдёт обратно в кластер, он сможет заменить любой из умерших компьютеров из этих 6.


Т.е. вопрос: а стоит ли синхронизировать всё на уровне инструкций? Может, кворум на прикладном уровне посредством общей шины более масштабируемое решение?

А зачем делать компьютер устойчивым? Может, лучше, сделать его маленьким и напихать сотню маленьких компьютеров в кластер?
Стоимость вывода единицы массы на орбиту, особенно на высокую, очень велика.
  1. Уже не столь велика. Спасибо одному провайдеру спутникового интернета.
  2. Что легче вывести на орбиту — экранирование толщиной в пару сантиметров или сотню неэкранированных микрокомпьютеров весом в несколько грамм?
Так экранирование в принципе мало отношения имеет к сбоям, его от дозовых эффектов применяют, а по одиночным сбоям от него как минимум не лучше, а как максимум — хуже.
Наверное, это сработало бы и сработает для решений, где не требуется принятия решений в реальном времени.

Но критическая задача для космического компьютера чаще всего лежит в области системы управления и принятия критических решений. Т.е. вот у вас решают 11 компьютеров задачу управления двигателем космического аппарата, причем решают одновременно. И в определенный момент 7 из них говорят — надо включить двигатель, а 4 говорят — нет, нифига. И это совершенно не то же самое, что выключить 4 любых компьютера. Нет, эти компьютеры прекрасно работают, но выдают неправильный результат.

Вот и настает вопрос — как это диагностировать и обработать до того, как ваш аппарат разобьется о поверхность Луны, как несчастный Берешит? А еще лучше диагностировать и исправить это в следующую миллисекунду, так как даже это время во многих процессах является критичным.

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

Realtime — это не про скорость, а про ответ за заданное время. Условная милисекунда — это миллион тиков для гигагерцового процессора. Компьютеры могут честно пытаться прийти к консенсусу (тот же paxos). Победит большинство. Не на уровне "результат сложения 2+2", т.е. инструкции процессора, а на уровне результата (т.е. сигнала в шину).


Время перезагрузки комьютера не существенно (в разумных пределах) — важно время прихода к консенсусу.


Поискал: Fast Paxos allows 2 message delays, but requires that (1) the system be comprised by 3f+ 1 acceptors to tolerate up to f faults.


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

Основная проблема состоит в том, что ИРЛ у вас есть какие-от исполнительные устройства, обычно достаточно простые, но выполняющие важные функции (из серии «повернуть налево»). И эти устройства, повторюсь, весьма просты и незатейливы (иначе внутри них самих возникают все те же проблемы), следовательно нужен некий механизм воспрепятствования попаданию на них некорректной команды. И тут как раз пригождается аппаратный TMR или хотя бы Lockstep в рамках центрального вычислителя.

Да. Проблема устойчивости брокера — открытая.


Хотя, с высоты диванного полёта мне кажется, что брокера можно реализовать как "голосование электричеством" — если достаточное количество проводов подали сигнал, то устройство срабатывает. Если не достаточно — не срабатывает. От пролетающих космических факапов защищает то, что никакая частица не может вызвать достаточно длительный по времени ток.


Т.е. каждая data line даёт, например, 0.5мА тока, а для срабатывания зажигания у двигателя надо 2мА в течение 1мс. Соответственно, пока 4 участника не выдадут этот ток, зажигания не произойдёт (вне зависимости от пролетающих частиц).

Хотя, с высоты диванного полёта мне кажется, что брокера можно реализовать как «голосование электричеством» — если достаточное количество проводов подали сигнал, то устройство срабатывает


Это один из вариантов для некоторых случаев (называется еще «накачкой команды», хотя этот термин больше употребляется в телемеханике), однако системно он проблему не решает.

Ну и потом — ну вот идут три процессора в ногу, а один нет. Положим «токового сигнала» от трех достаточно, ок полетели куда надо. И эти три как-то должны понять, что четвертый охренел, да и сбросить его (иначе на следующем шаге будет уже два несогласных). А он берет — и блокирует сброс, либо у него с обработчиком NMI что-то не то случилось, либо он сам остальных сбрасывать начинает… Тут конечно помогает мажорированный сброс, но в целом это тоже все такое.
с высоты диванного полёта мне кажется, что брокера можно реализовать как «голосование электричеством»
Схемы голосования так и организованы обычно. Если двое тянут выход в одну сторону, а третий в другую — победят рак и щука те, кого больше.

никакая частица не может вызвать достаточно длительный по времени ток
Это касается только цифровых схем. В аналоговых запросто могут быть очень длинные импульсы от ТЗЧ, и это может быть важно как раз для актюаторов, а также для сенсоров, на основе показаний которых процессор принимает решения.
При восстановлении состояния сложнее всего разбраться с неоконченными IO-операциями.
Вы свернули куда-то не в ту сторону. Прежде чем думать над надёжными вычислениями, подумайте над тем, зачем они нужны. Если речь идёт о системах управления в реальном времени, то все попытки восстановить уже протухшее состояние системы контрпродуктивно. Что реально надо делать в таких системах, это загрузить ответственные модули за пару миллисекунд, прочесть сигнал датчиков и выдать управляющий импульс, после этого, можно снова уйти в ребут схватив очередную дозу. И быстрая загрузка и включение в работу программных модулей это вполне реально, так же в этом случае подходит арбитраж и можно использовать кучу процессоров — каждая кучка под конкретную задачу, конкретный программный модуль.
А вы начинаете рассказывать какие-то сказки про то, что можно что-то сохранить на флеш и потом прочесть, когбуд-то там не может быть ошибок, да ещё и совпадением контрольной суммы, а падать будет программа при исполнении, и опять читать ту же дичь.
По-видимому мы говорим о разных задачах.
И попробуйте в следующий раз обойтись без хамства.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации