Введение

В теории кодирования коды Торнадо — это класс кодов стирания, обеспечивающих исправление ошибок. Коды Торнадо требуют на C блоков избыточности больше, чем более эффективные по использованию данных коды стирания Рида — Соломона, но генерируются и исправляют стирания значительно быстрее. Программные реализации кодов Торнадо примерно в 100 раз быстрее на малых длинах и примерно в 10 000 раз быстрее на больших длинах, чем коды стирания Рида — Соломона. После появления кодов Торнадо возникло множество других подобных кодов стирания, наиболее известными из которых являются онлайн-коды, LT-коды и Raptor-коды. Коды Торнадо используют многоуровневый подход. Все уровни, кроме последнего, используют код коррекции ошибок LDPC, который работает быстро, но имеет ненулевую вероятность сбоя. Последний уровень использует код коррекции Рида — Соломона, который работает медленнее, но оптимален с точки зрения восстановления после сбоев. Коды Торнадо определяют количество уровней, количество восстанавливающих блоков на каждом уровне и распределение, используемое для генерации блоков на нефинальных уровнях.

Обзор

Входные данные разделены на блоки. Блоки — это последовательности битов одинакового размера. Данные для восстановления используют тот же размер блока, что и входные данные. Обнаружение стирания блока (входного или восстанавливающего) производится иными средствами. (Например, блок с диска не проходит CRC-проверку или сетевой пакет с заданным порядковым номером не получен.) Пользователь задает количество восстанавливающих блоков. Затем определяется количество уровней и количество блоков на каждом уровне. Количество блоков на каждом уровне определяется коэффициентом B, который меньше единицы. Если имеется N входных блоков, то первый уровень восстановления содержит B*N блоков, второй — B*B*N, третий — B*B*B*N и так далее. Все уровни восстановления, кроме последнего, используют LDPC, работающий на основе операции XOR (исключающее ИЛИ). XOR оперирует с бинарными значениями, 1 и 0. Результат XOR для A и B равен 1, если A и B имеют разные значения, и 0, если A и B имеют одинаковые значения. Если известен результат (A XOR B) и значение A, можно определить значение B. (A XOR B XOR A = B). Аналогично, если известен результат (A XOR B) и значение B, можно определить значение A. Это применимо и к большему числу значений: если известен результат (A XOR B XOR C XOR D) и любые три значения, можно восстановить недостающее значение. Таким образом, восстанавливающие блоки первого уровня являются результатом XOR некоторого набора входных блоков. Аналогично, восстанавливающие блоки второго уровня являются результатом XOR некоторого набора блоков первого уровня. Блоки, используемые в операции XOR, выбираются случайным образом, без повторений. Однако количество блоков, используемых для создания восстанавливающего блока, выбирается из специфического распределения для каждого уровня. Поскольку XOR — быстрая операция, а восстанавливающие блоки являются результатом XOR только подмножества блоков входных данных (или более низкого уровня восстановления), восстанавливающие блоки могут быть сгенерированы быстро. Последний уровень использует код Рида — Соломона. Коды Рида — Соломона оптимальны с точки зрения восстановления после ошибок, но медленны в генерации и восстановлении. Поскольку каждый уровень содержит меньше блоков, чем предыдущий, код Рида — Соломона имеет небольшое количество восстанавливающих блоков для генерации и использования при восстановлении. Таким образом, несмотря на медлительность кода Рида — Соломона, ему требуется обработать лишь небольшой объем данных. В процессе восстановления сначала восстанавливается код Рида — Соломона. Это гарантированно работает, если количество недостающих блоков на предпоследнем уровне меньше количества блоков на последнем уровне. Переходя к более низким уровням, уровень восстановления LDPC (XOR) может быть использован для восстановления уровня ниже с высокой вероятностью, если все восстанавливающие блоки присутствуют и на уровне ниже отсутствует не более чем на C' блоков меньше, чем на восстанавливающем уровне. Алгоритм восстановления заключается в поиске восстанавливающего блока, в котором отсутствует только один блок из его генерирующего набора на нижнем уровне. Тогда XOR восстанавливающего блока со всеми присутствующими блоками равен недостающему блоку.

Патентные вопросы

Коды торнадо ранее были запатентованы в Соединенных Штатах Америки. Патенты US6163870 A (поданы 6 ноября 1997 года) и US 6081909 A (поданы 6 ноября 1997 года) описывают коды Tornado, и срок их действия истек 6 ноября 2017 года. Патенты US6307487 B1 (поданы 5 февраля 1999 года) и US6320520 B1 (поданы 17 сентября 1999 года) также упоминают коды Tornado и истекли 5 февраля 2019 года и 17 сентября 2019 года соответственно.

Цитаты

Майкл Люби создал коды Торнадо.