2016 ВЕСТНИК САНКТ-ПЕТЕРБУРГСКОГО УНИВЕРСИТЕТА Сер. 10 Вып. 4
ПРИКЛАДНАЯ МАТЕМАТИКА
УДК 004.056.3
А. В. Маров, А. Ю. Утешев
МАТРИЧНЫЙ ФОРМАЛИЗМ КОДОВ РИДА—СОЛОМОНА
Санкт-Петербургский государственный университет, Российская Федерация, 199034, Санкт-Петербург, Университетская наб., 7—9
Предлагаются модификации алгоритмов кодирования и исправления ошибок (отказов и скрытых повреждений), используемых в кодах Рида—Соломона. Эти модификации используют матричный формализм и основаны на алгоритме обращения матрицы Ван-
дермонда Для матрицы V = Аг— 1 предлагаемый алгоритм вычисляет столбцы
I 3 -1г,7=1
матрицы V 1 рекурсивно, начиная с последнего, по формулам
= V[j]1 = - у - ^у+ц — ^/у+2]------ У 3 = п — 1'п — 1
где Зк = [\к1/\У'(\1),...,\Ь/\У'(\п)]Т ,ак = £»=1 А^+^ДПАД к = Ца \У(х) = ГК=1(^ — Ак). Полученный результат предлагается использовать для реализации систематического кодирования вектора из п информационных блоков посредством операции умножения (в подходящем поле Галуа) его на матрицу К = = 1, т, ] = 0, п — 1. Здесь = 1 ,т, означают базовые интерполяционные полиномы Лагранжа, порожденные степенями примитивного элементами поля, а т — количество служебных блоков (синдромов). В этой же идеологии реализуется и процедура исправления ошибок. Программная реализация на языке С демонстрирует рост производительности в сравнении с известными специализированными программными продуктами, а также допускает возможность параллелизации. Библиогр. 17 назв. Ил. 1.
Ключевые слова: помехоустойчивое кодирование, коды Рида—Соломона, матрица Ван-дермонда.
A. V. Marov, A. Yu. Uteshev
MATRIX FORMALISM OF THE REED—SOLOMON CODES
St. Petersburg State University, 7—9, Universitetskaya nab.,
St. Petersburg, 199034, Russian Federation
The paper is focused onto modification of the involved algorithms of coding and error
(i. e., failures and silent data corruptions) correction in the Reed—Solomon codes. These
Маров Алексей Валерьевич — аспирант, разработчик исследовательской лаборатории, Raidix; [email protected]
Утешев Алексей Юрьевич — доктор физико-математических наук, профессор; alexeiuteshev@ gmail.com
Marov Alexei Valer'evich — postgraduate student, software developer in R&D Lab, Raidix; [email protected]
Uteshev Alexei Yur'evich — doctor of physical and mathematical sciences, professor; alexeiuteshev@ gmail.com
© Санкт-Петербургский государственный университет, 2016
modifications involve matrix formalism and are based on an algorithm for the Vandermonde
matrix inversion. For such a matrix V = Аг—1 the suggested algorithm computes the
L J J г.=1
columns V-]1 ,...,V—— i],V—1 of the matrix V-1 recursively, starting from the last column, via the formulas
V^]1 = S°> VJ]1 = sn-j — a1 Vj+i] - <T2V-l2]-----<Jn-jVN\ j = n — l,n — 2,..., 1.
Here 3fc = [Xf/W'(X1),...,X^/W'(Xn)]T ,ak = £"=i X^1/W'(Xj), к = and
W(x) = Л n=i(x — Ak). The obtained result is applied for realization of systematic coding of the n-vector of the information blocks with the aid of multiplication (in an appropriate Galois field) by the matrix К = [W^a^'-1)], г = l~m, j = 0,n- 1. Here We(x), I = Tm, denote the basic Lagrange interpolation polynomials generated by the powers of a primitive element of the field, while m stands for the number of redundancy blocks (syndromes). In the framework of this ideology, an error correcting procedure is also realized. The program implementation in C demonstrates high performance results (compared to existing software) with solid perspectives for parallelization. Refs 17. Fig 1.
Keywords: error-correcting codes, Reed—Solomon codes, Vandermonde matrix.
1. Введение. Рост объемов информации, хранимой человечеством, за последние годы увеличился настолько, что в системах хранения данных (СХД) стали использовать не отдельные накопители («жесткие диски»), но массивы накопителей. Наряду с требованиями, предъявляемыми к скорости записи и чтения, существенным является и обеспечение отказоустойчивости таких массивов. Для последней задачи применяются различные алгоритмы помехоустойчивого кодирования. Изначально они разрабатывались для каналов передачи данных и требовали значительных вычислительных ресурсов при кодировании и декодировании. Широко распространенные в настоящее время технологии хранения данных, известные как RAID (Redundant Array of Independent Disks), также изначально использовали специализированное оборудование (ASIC контроллеры) для кодирования и декодирования. Однако дороговизна разработки и производства такого оборудования сформировала потребность организации процедуры кодирования с помощью процессоров общего назначения. Поэтому актуальной стала задача повышения скорости процессов кодирования за счет оптимизации алгоритмов и их реализаций в RAID.
Каждый RAID массив представляет собой набор жестких дисков, воспринимаемых внешней системой как единое целое. Для повышения надежности массивов на них записываются и хранятся не только информационные данные, но и некоторая избыточная информация (синдромы), которая позволяет восстанавливать данные в случае их частичной утраты. Синдромы рассчитываются на этапе кодирования, а их использование для контроля целостности и восстановления утраченных данных производится на этапе декодирования. Различают два типа потери данных. Первый связан с выходом из строя одного блока, расположение которого обнаруживается системами технического (аппаратного) контроля. В этом случае место утраты данных известно и говорят об отказе блока (failed block или failure). Во втором случае данные искажаются в процессе записи, хранения или чтения, но системы аппаратного контроля не выявляют ошибки (ни самого факта ее присутствия, ни ее местоположения). В таком случае говорят о скрытом повреждении данных (silent data corruption, SDC).
Различные подходы к восстановлению нескольких отказов описаны в работах [1, 2]. Их суть заключается в применении матрицы Коши или матрицы Вандермон-да в качестве матрицы кодирования. Алгоритм обнаружения и исправления одного скрытого повреждения рассматриваeтся в статье [3], но излагаемый в ней подход
не позволяет исправлять большее количество скрытых повреждений. В последние годы были разработаны и другие коды, такие как регенерирующие (Regenerating codes) [4], LRC [5], а также пирамидальные [6]; все они нацелены на уменьшение количества блоков, которые необходимо прочитать, чтобы восстановить отказавший блок.
В случае необходимости восстановления большого количества отказов и скрытых повреждений универсальным решением являются коды Рида—Соломона (РС-коды). Основное их преимущество заключается в обеспечении высокой степени отказоустойчивости при минимальной избыточности, благодаря чему они очень популярны в СХД. Математические основы этих кодов и практические рекомендации по их использованию описаны в монографиях [7-9]. Следует заметить, что с учетом изменения архитектуры процессоров со временем многие задачи, описанные в [79], потеряли свою актуальность или нашли новые решения (см., например, [10, 11]). Однако же некоторые особенности остаются еще узкими местами в практике применения РС-кодов. Одну из таких сложностей представляет алгоритм кодирования и декодирования, основанный на операциях с полиномами над конечными полями. Существует несколько способов оптимизации расчетов РС-кодов, например основанный на применении быстрого преобразования Фурье [12].
В настоящей работе предлагается новый подход к РС-кодам, использующий матричный формализм, в том числе алгоритм обращения матрицы Вандермонда. Статья организована следующим образом. В п. 2 изложен алгоритм обращения матрицы Вандермонда. В п. 3 кратко описан стандартный способ построения систематического РС-кода, а в п. 4 — предлагаемый авторами матричный вариант алгоритмов кодирования и исправления ошибок. В п. 5 приведены результаты сравнения производительности этого варианта с реализациями помехоустойчивых кодов из популярных специализированных библиотек.
2. Обращение матрицы Вандермонда. Для наглядности изложим здесь результаты в терминологии бесконечных полей, хотя в п. 3-5 они будут использованы исключительно только для полей конечных.
Пусть задан набор различных элементов {Ai,.. рицу вида
/ 1 1
Ai A2
Vm,n(A1, A2,...,An
, An} поля. Будем называть мат-\
A2
A22
1
An A2
A
m-1 \m— 1 \m — 1
An ... A
(т, п)-матрицей Вандермонда.
Нас прежде всего интересуют способы обращения квадратной матрицы Вандермонда Уп,п(Аь а2, ..., Ап); для краткости будем обозначать ее просто V. С этой целью рассмотрим полиномы
W(*) = П(* - Aj), Wj(x)
W(x) _
j = 1 ,n
j=1
x - Aj'
и вычислим набор базовых интерполяционных полиномов Лагранжа
Wj (x)
Wj (x) Wj (x) n_ 1 - — u!j0 + Wjix H-----hwj,n-ii ,
Wj (Aj) W'(Aj)
Будем говорить о полиномах (1), как о порожденных набором {A1, ...,An}.
1, n.
(1)
Теорема 2.1 ([13]). Имеет место равенство
V 1 = Кк-1]",к=1
( 110 1>ц ... 11^-1 \ 120 121 . . . 12,п-1
\ 1п0 1п1 . . . ™п,п-1
Доказательство основывается на элементарном свойстве базовых интерполяционных полиномов:
Ш (Лк ) = {1 при = к
3К к) \ 0 при ] = к.
Умножение матрицы (2) на матрицу Вандермонда V слева имеет результатом матрицу, состоящую из величин Шу (Лк). □ Таким образом, обращение матрицы Вандермонда фактически сводится к вычислению коэффициентов базовых интерполяционных полиномов. Задача заключается теперь в параллелизации алгоритма вычисления этих коэффициентов. Сначала вычислим величины
Р = 1 Р = 1
и составим из них столбец
20 = [£1,... ^п]Т
(здесь и далее в статье Т означает транспонирование). Умножим его на столбец
Л= [Л1 ,...,Лп]Т ,
причем умножение векторов производится поэлементно (так называемое адамарово произведение):
21 = 20 ® Л = [С1Л1,.. .,£пЛп]Т . Продолжив умножение, образуем последовательность
20, 21 =20 ® Л, 22 =21 ® Л,..., 2п-1 = 2п-2 ® Л,..., 22п-2 = 22п-3 ® Л . (3)
Лемма. Сумма элементов любого из столбцов 20,...,2п-2 равна 0. Сумма элементов столбца 2п-1 равна 1.
Доказательство. Равенства известны как равенства Эйлера—Лагран-жа [14]
Е^ _ [ 0 при к < п — 1, . .
,_1 ТЙА™) ~~ \ 1 при к = п - 1. ^
□
Теорема 2.2. Вычислим суммы элементов столбцов 2п, 2п+1,..., 22п-2; т. е. величины
п дп+А;—1
^ = Щ> к = Т^Т. (5)
3 = 1
Столбцы матрицы V 1 ми рекурсивными соотношениями:
V-1 V-1 V-1
связаны со столбцами (3) следующи-
V-1
У[n-2]
¿1 - V;-1,
1 1 [п] ' 12 - 01 ^ - 02
*[1]
1
г-1 - ^[2] - 02^3]-----an-1У[n] .
Доказательство. На основании (4) имеем
(6)
V ■ V- = V ■ Но =
[п] 0
п \п — 1
_
\ 1 \ \
л,)
= [0,0,...,0,1]"
Далее с использованием только что полученного равенства получаем
V ■ ^1] = V ■ Н1 - 01V ■ V- = [0,0,..., 1, 01]т - О1[0,0,..., 0,1]т = [0, 0,..., 1,0]"
Аналогично, применяя уже два доказанных равенства, доказываем третье из (6): V ■ V-1о, = V ■ Н2 - о1 V ■ V- о2 V ■ V-1 =
[п-2] 2 1 [п-1] 2 [п]
= [0, 0,...,1,01,02]т - о 1 [0, 0,...,1, 0]т - 02[0, 0,...,0,1]т = [0,0,...,1, 0,0]т .
И так далее.
Пример 2.1. Вычислить
□
1 1 1 1 2 3 1 4 9
1
Решение. Здесь
А1 = 1, А2 = 2, Аз = 3, Ш'(1) = 2, Ш'(2) = -1, Ш'(3) = 2.
Вычисляем последовательность столбцов (3) и для компактности записываем ее в виде матрицы _ _
" 1/2 1/2 1/2 1/2 1/2 " -1 -2 -4 -8 -16 1/2 3/2 9/2 27/2 81/2
Суммируем элементы двух последних столбцов:
01 = 6, 02 =25 .
Используем формулы (6):
V =
1/2 -1 1/2
V,
-1
[2]
1/2 - 1/2 " —5/2 "
—2 — 6 —1 = 4
3/2 1/2 —3/2
V
-1
[1]
1/2 —5/2 1/2 3
—4 —6 4 — 25 —1 = —3
9/2 —3/2 1/2 1
Замечание 1. Для вещественных матриц Вандермонда формулы (6) можно рассматривать как результат процесса ортогонализации Грама—Шмидта [15], примененного к системе столбцов {20, 21,..., 2п-1} С Кп при скалярном произведении в Кп, задаваемом формулой (Х,У) = XТ(УТV)У.
Замечание 2. Можно доказать, что величина (5) может быть вычислена как сумма всевозможных мономов степени к от элементов Л1,...,Лп:
^ = £ Л* Л2/ Х---ХЛ-Г .
31 >0,32>°,'"3п>0 31 + 32 +----+3п = к
Теорема 2.3. Пусть задан набор неотрицательных разных целых чисел {к0, к,..., кт-1} и элемент Л поля такой, что элементы Лко, Лк1,..., Лкт-1 все различны. Пусть
т— 1
д(х)=Ц(х — Л3).
3=0
Для произвольного полинома /(х) над полем существует единственная пара полиномов Q(x) и
такая, что
Скт-1 (7)
(8)
Доказательство. Если подставить в тождество (8) значения 1,Л, Л2,..., Лт— 1, то получим систему линейных уравнений относительно коэффициентов С0,Сь..., Ст—1. Матричный вид этой системы
П(х) = С хк0 + С1хк1 + ... + Ст—1
/(х) ^(х)д(х)+ВД.
Vm,m(Лk0 ,Лк1 ,..., Лкт-1 )С = /(1), ¡(Л), ..., ¡(Лт—1)]
(9)
при С = [С0,С1,...,Ст— 1] .
По условию теоремы матрица системы (9) невырождена. Следовательно, система имеет единственное решение, которое однозначно определяет полином 'Я.(х). Тогда разность /(х) — П(х) нацело делится на полином д(х), и полином Q(x) определяется как частное этого деления. □
В случае к^ = ] — 1, ] = 1 , г, теорема 2.3 фактически предоставляет способ осуществления деления /(х) на д(х). Нас, однако, будут интересовать упрощения вычислений «обобщенного остатка» (7), например, для случая полинома /(х) вида
/ (х) = Л1хг11 +-----+ Агхп при {п1,..., пг} С Ж, 0 < п1 < ••• <пг .
С этой целью решение системы (9) запишем так:
[С0, С\,. .., Ст—1]Т = [Vт,т(Лк0 ,Лк1 ,..., Лкт-1 )] —1 [/(1), /(Л), ...,/(Лт — 1)] Т =
= [Vm,m(Ako ,Akl, ■■■, Akm-1)] 1 Vm¡r (AniAnr )[A1,...,Ar ]T . (10)
На основании теоремы 2.1 приходим к следующему результату.
Теорема 2.4. Коэффициенты полинома (7) находятся из равенства
( с0 \ ( Wi(\ni) w1(a"2) ... w1(A"r) \
Ci W2(Ani) W2(An2) ... W2(Anr)
C1
0
Здесь W1(x),..., Wm (x) — базовые интерполяционные полиномы Лагранжа, порожденные набором {Ak°, Akl,..., Akm-1}.
Замечание 3. Предположение о неотрицательности показателей nj,j = 1, г, и ks,s = 0,m—l, в формулировках теорем 2.3 и 2.4 не является существенным: эти результаты позволяют определить операцию деления и для обобщенных полиномов (Лорана), т. е. линейных комбинаций мономов с произвольными целыми показателями.
3. Систематическое кодирование кодов Рида—Соломона. РС-коды представляют собой циклические коды, позволяющие исправлять ошибки в блоках данных. От исходного набора (вектора) информационных кодовых блоков (D0,D1,...,Dn_1) по специальным формулам рассчитываются синдромы, т. е. служебная информация в виде вектора блоков (C0, C1,..., Cm-1). Формулы расчета синдромов подбираются таким образом, чтобы гарантированно исправить определенное количество ошибок, которые могут возникнуть в процессе хранения или передачи.
Различают два способа расчета синдромов РС-кодов: систематическое кодирование и несистематическое кодирование. При систематическом кодировании сохраняемая или передаваемая информация представляется в виде конкатенации информационных блоков и блоков синдромов (Do, D1,..., Dn_1, Со, C1,..., Cm_ 1) в единый кодовый вектор. В дальнейшем будем рассматривать только такое кодирование как наиболее востребованное на практике. При его применении в случае отсутствия повреждений данных не требуется осуществлять декодирование и, следовательно, тратится меньше вычислительных ресурсов на извлечение информационных блоков.
Расчет синдромов осуществляется с использованием арифметики конечных полей. Каждый кодовый блок Dj, представленный в виде w-битного вектора, считается элементом некоторого поля Галуа GF(2w). Мы не останавливаемся здесь подробно на описании арифметики полей Галуа [7-9]. Напомним только, что множество ненулевых элементов поля GF(2w) замкнуто относительно умножения, и в нем существует
0 1 2^— 2
примитивный элемент a, т. е. такой, что все его степени a0,a1 ,...,a2 2 представляют все эти элементы поля.
Пусть код должен быть устойчив к отказу £ блоков и дополнительно к появлению самое большее t скрытых повреждений. Тогда избыточность кода должна состоять, как минимум, из m = £ + 2t синдромов. Для их расчета выбирается порождающий полином кода, например в виде
По информационным кодовым блокам D0, D1,..., Dn_1 составляется полином
m_1
g(x) = JJ (x + aj) .
j=0
G(x) = D0xn-1 + D1xn_2 + ... + Dn_2x + Dn_1 .
Для расчета синдромов разделим полином С?(х) = 0(х)хт на g(x) и обозначим через Q(x) частное, а через 'Я,(х) — остаток от деления:
С(х) = Q(x)g(x) + П(х), degП <ш. В качестве синдромов берутся коэффициенты остатка
П(х) = С0хт—1 + С1хт—2 + ... + Ст—1 , а в качестве кодового вектора выбирается вектор
(У0,..., Уы —1) = (^0, ^1,..., Вп—1,С0,..., Ст—1), N = п + ш,
(11)
коэффициентов полинома С(ж) = С(ж) + Т1(х). Для этого полинома выполняются условия
С(1) = 0, Ща) =0, ..., С{ат-1) =0.
Обратно, если необходимо проверить некоторый вектор (У0,...,Уы —1) на наличие в нем ошибок, то составляем полином С(ж) = Уо^^ 1 + • • • + Улг-1 и вычисляем его
значения на степенях примитивного элемента поля:
ы-1
= 6?(а-
3)
Еу*
¿=0
(Ы — 1—¿)3
2 = 0, ш — 1.
(12)
Если хотя бы одно из этих значений контрольных сумм ненулевое, то это свидетельствует о наличии в векторе ошибок. Значения 50,..., Sm—l используются тогда для восстановления данных, как будет показано в п. 4.
4. Кодирование и исправление ошибок: матричный подход. Нахождение синдромов С0,..., Ст—1 способом, описанным в п. 3, требует существенных машинных ресурсов, поскольку использует трудоемкую операцию деления полиномов над конечными полями. В альтернативу этому предлагается применить для кодирования изложенный в п. 2 подход к вычислению остатков, основанный на матричном формализме. По теореме 2.4 синдромы связаны с информационными блоками соотношением
С0
С1 =
Ст-1
(аы — 1) ^1(аы—2) ^2 (аы — 1) ^2(аы—2)
(аы—1) Wm (аы—2)
^1(ат) ^ W2(аm)
( ^0
А
\
(13)
Wm(am) / V Пп—1 /
представляющим процедуру кодирования в матричном виде. Здесь W1(x),..., Wm (х) означают базовые интерполяционные полиномы Лагранжа, порожденные элементами поля {ат
г 1,ат 2,..., 1}. Матрицу из формулы (13)
К = ^ (а
N—3 — 1
)],
1, то, ] = 0, п — 1 ,
назовем матрицей кодирования. При фиксированных числах ш и п ее расчет производится однократно и позволяет осуществлять процедуру кодирования для произвольного вектора из п информационных блоков — и в этом заключается его преимущество перед традиционным подходом, основанном на полиномиальном формализме. Заметим также, что каждый синдром рассчитывается за О(п) операций и вычисление
всего набора синдромов может производиться параллельно, т. е. независимо друг от друга.
Использовать свойства матрицы Вандермонда можно и для восстановления утраченных данных. Предположим, что для блоков данных По, П1,..., Пп-1 были рассчитаны т синдромов Со, С1,..., Ст-1, например, по формуле (13). Пусть в кодовой последовательности (11) произошло £ ^ т отказов, т. е. повреждений блоков с известными номерами к1 ,...,ке. Обозначим
У, = [УЙ1 ,...,Уке ]т
столбец отказавших блоков, а
У« = [УТ1,..., Уты-е] , {Г1,..., тн-е} = {0,...,М - 1}\ {к1,..., кг], Г1 < Г2 < ■ ■ ■ < тн -е,
— столбец неповрежденных блоков.
Тогда алгоритм восстановления отказавших блоков заключается в следующем. Сначала пересчитываются значения первых £ контрольных сумм из (12) с пропуском при расчете отказавших блоков:
£,•= ]Г У^»-1-™, з=0^Т. (14)
*=0,АГ-1
В матричном виде это можно записать так:
§ = Vе,N-г(а*-Г1-\ом-Г2-1,..., а]у-г^-1)Ув, (15)
где §
§о, §1,..., §е-1
Для восстановления отказавших блоков составим систему линейных уравнений суммированием соответствующих уравнений (12) и (14):
а
Вектор У, выражается отсюда посредством обращения матрицы Вандермонда:
У, = ^е^-к1-1, а14 к2-1, ..., а14-к*-1)]-1 § . (16)
Подставив (15) в (16), получим выражение отказавших блоков через неповрежденные:
У, = ^е ^-к1-1,..., aN-к*-1)]-1Уе^-е^-rl-\aN-Г2-1,..., aN--1)У. .
(17)
В соответствии с формулой (10) можно утверждать, что отказавшие блоки составляют набор коэффициентов обобщенного остатка
С1 xN-1-к1 + C2XN 1 к2 +■ ■ ■ + се xN-1-к'
от деления полинома
У ^-1-Г1 , У N 1 г2 I I У ^-1-тм-е
I 1 Г2 < < — £
12 Вестник СПбГУ. Сер. 10. Прикладная математика. Информатика... 2016. Вып. 4
на полином
+ ai) .
i=0
На основании теоремы 2.4 можно записать произведение матриц, стоящих в правой части (17) в виде
,N-e.
( Wi(aN-ri-1) Wi(aN-Г2-1) W2(aN-ri-1) W2(aN r2 1)
V W£(aN-ri-1) W£(aN r2 1)
Wi(aN-r«-i-1) \
W2(
N r n-e-1
Wt(
N-ты-e-1
)
или компактно —
R i=l,£, j G {0,..., N — l}\ {ki,..., ki} ;
здесь W1(x),...,W^(x) — базовые интерполяционные полиномы Лагранжа, порож-
денные набором {a
N-fci-1
, a
N-ke-1
Окончательно значения отказавших блоков могут быть восстановлены по фор-
муле
Y. = R У,
(18)
Матрицу R естественно назвать матрицей восстановления (декодирования). Данный способ восстановления имеет то достоинство, что восстановление отказавших блоков происходит напрямую из неповрежденных и не требует дополнительной памяти для хранения промежуточных вычислений. Также следует отметить, что при восстановлении данных, например в СХД, расчет матрицы восстановления R выполняется однократно для всех векторов, в которых необходимо восстановить данные. В связи с этим после расчета матрицы для ее элементов могут быть вычислены вспомогательные значения, необходимые для быстрого умножения, описанного в [10], что приведет к увеличению скорости восстановления.
Описанные способы кодирования и декодирования корректно восстанавливают данные при выполнении условия m + n < 2w, т. е. общее число блоков не превышает порядка используемого поля. При необходимости исправления большего количества ошибок требуется переход к полям больших порядков.
РС-коды замечательны еще и тем, что позволяют не только исправлять отказы, но также обнаруживать наличие и исправлять стирания, или скрытые повреждения (Silent Data Corruption, SDC), т. е. такие повреждения исходных данных, которые не отслеживаются аппаратными средствами.
Приведем здесь лишь краткое описание алгоритма обнаружения и исправления скрытых повреждений, поскольку он подробно рассмотрен в литературе [7, 8]. Пусть в последовательности блоков (11) имеется t отказов в блоках с номерами к1,...,к^ и t скрытых повреждений в блоках с номерами j1,j2, ...,jt, которые априори неизвестны (как неизвестно и само их количество). В предположении, что
)
выполняется условие £ + 2Ь ^ т, все скрытые повреждения могут быть обнаружены и исправлены. Чтобы обнаружить присутствие и найти расположение скрытых повреждений в таком случае необходимо:
1) пересчитать значения контрольных сумм с пропуском отказавших блоков по формуле (15);
2) (в случае £ = 0 этот шаг пропускается) построить вспомогательный полином
е
х(х) = (х + aN-к^-1) = хо + Х1Х + ■ ■ ■ + хехе ;
¿=1
3) посчитать величины
ТТ. = ]
4) если хотя бы одно из условий Uo = 0,..., Um—£—i =0 не выполнено, то делается вывод о наличии скрытых повреждений;
5) построить полином локаторов ошибок — например, по алгоритму Берлекам-па—Месси. На вход алгоритма подается последовательность Um—£—\, Um—£—2,..., U0. На выходе получается полином степени t. Если количество скрытых повреждений в точности равно t, то корнями этого полинома являются а^^-1, г = l,t. С определением этих корней устанавливаются места скрытых повреждений.
Когда все они определены, задача исправления поврежденных данных оказывается сведенной к случаю наличия в последовательности (11) исключительно только отказов. Последние могут быть исправлены, например, по формуле (18).
5. Результаты вычислительных экспериментов. Для практической реализации описанных алгоритмов кодирования и декодирования был выбран язык С, поскольку он обеспечивает доступ к векторным инструкциям процессора, и в то же время компиляторы языка С реализуют различные алгоритмы оптимизации исполняемого кода. Было произведено сравнение описанного в п. 4 алгоритма с наиболее популярными библиотеками помехоустойчивого кодирования ISA-L [16], Jerasure [17]. Производилось сравнение только скорости работы алгоритма кодирования или декодирования, без учета считывания данных с дисков, на системе со следующей конфигурацией:
• OC: Debian 8;
• CPU: Intel Core i7-2600 3.40GHz;
• RAM: 8GB;
• компилятор gcc 4.8.
На рисунке, I-III представлены результаты сравнений алгоритмов с большим количеством контрольных сумм (n — количество информационных блоков, m — количество контрольных сумм, N = n + m — общее количество блоков). Матричная версия алгоритма кодирования из п. 4 обозначена как "rdx". Можно увидеть, что эта версия показывает примерно такие же показатели скорости кодирования, как и ISA-L, но более высокие значения скорости исправления ошибок. Следует заметить, что в отличие от упомянутых библиотек разработанная авторами программная реализация алгоритма позволяет исправлять не только отказы, но и скрытые повреждения.
ecW>°' г = 0, т — £ — 1: если £ = 0,
MB/s
Сравнение скорости кодирования (слева) и декодирования (справа) при п = 16 (I), 32 (II) и 96 (III)
6. Заключение. В настоящей работе решается проблема повышения эффективности применения кодов Рида—Соломона для исправления поврежденных данных. Предложенный алгоритм, основанный на матричных операциях с использованием матрицы Вандермонда, программно реализован на языке С. В сравнении с существующими специализированными пакетами эта программная реализация показывает высокие значения скорости кодирования и декодирования, притом что дополнительно обеспечивает высокую степень отказоустойчивости за счет возможности
исправления как отдельно отказов или скрытых повреждений, так их произвольных комбинаций.
Литература
1. Plank J. A Tutorial on Reed—Solomon coding for fault-tolerance in RAID-like systems // Software-Practice & Experience. 1997. Vol. 27(9). P. 995-1012.
2. Plank J., Xu L. Optimizing cauchy Reed—Solomon codes for fault-tolerant network storage applications // The 5th IEEE Intern. symposium on network computing and applications. 2006. P. 173180.
3. Plank J., Blaum M., Hafner J. SD codes: erasure codes designed for how storage systems really fail // FAST-2013: 11th USENIX conference on file and storage technologies. 2013. P. 95-104.
4. Papailiopoulos D., Luo J., Dimakis A., Huang C., Li J. Simple regenerating codes: network coding for cloud storage // INFOCOM. Proceedings IEEE. 2012. P. 2801-2805.
5. Huang C., Simitci H., Xu Y., Ogus A., Calder B., Gopalan P., Li J., Yekhanin S. Erasure coding in windows azure storage // USENIX annual technical conference. 2012. URL: https://www.usenix.org/system/files/conference/atc12/atc12-final181_0.pdf (дата обращения: 11.07. 2016).
6. Huang C., Chen M., Li J. Pyramid Codes: flexible schemes to trade space for access efficiency in reliable data storage systems // NCA-2007: IEEE Intern. symposium on network computing and applications. 2007. P. 79-86.
7. Peterson W., Weldon E. Error-correcting codes. Cambridge: MIT Press, 1972. 572 p.
8. Berlekamp E. Algebraic coding theory. Singapore: World scientific Publishing Co, 2015. 501 p.
9. Lidl R., Niederreiter H. Finite fields. Vol. 1. 2nd ed. Cambridge: Cambridge University Press, 1997. 755 p.
10. Plank J., Greenan K., Miller E. Screaming fast galois field arithmetic using Intel SIMD instructions // FAST-2013: 11th USENIX conference on file and storage technologies. 2013. P. 299-306.
11. Plank J. XOR's lower bounds and MDS codes for storage // IEEE Information theory workshop. 2011. P. 529-551.
12. Trifonov P. Low-complexity implementation of RAID based on Reed-Solomon codes // ACM transactions on storage. 2015. URL: http://dl.acm.org/citation.cfm?id=2700308 (дата обращения: 26.10.2016).
13. Knuth D. The art of computer programming. Vol. 1. 3rd ed. Reading (Massachusetts): Addison-Wesley Press, 1997. 672 p.
14. Утешев А. Ю., Калинина Е. А. Лекции по высшей алгебре. Ч. II: учеб. пособие. СПб.: Соло, 2007. 279 c.
15. Хорн Р., Джонсон Ч. Матричный анализ / пер. с англ. Х. Д. Икрамова и др.; под ред. Х. Д. Икрамова. М: Мир, 1989. 655 с. (Horn R. A., Johnson Ch. R. Matrix analysis.)
16. Intel Intelligent Storage Acceleration Library // URL: https://01.org/intel%C2%AE-storage-acceleration-library-open-source-version (дата обращения: 11.07.2016).
17. Jerasure: Erasure Coding Library // URL: http://jerasure.org/ (дата обращения: 11.07.2016).
Для цитирования: Маров А. В., Утешев А. Ю. Матричный формализм кодов Рида—Соломона // Вестник Санкт-Петербургского университета. Сер. 10. Прикладная математика. Информатика. Процессы управления. 2016. Вып. 4. С. 4-17. DOI: 10.21638/11701/spbu10.2016.401
References
1. Plank J. A Tutorial on Reed-Solomon coding for fault-tolerance in RAID-like systems. Software-practice & Experience, 1997, vol. 27(9), pp. 995-1012.
2. Plank J., Xu L. Optimizing cauchy Reed-Solomon codes for fault-tolerant network storage applications. The 5th IEEE Intern. symposium on network computing and applications, 2006, pp. 173-180.
3. Plank J., Blaum M., Hafner J. SD codes: erasure codes designed for how storage systems really fail. FAST-2013: 11th USENIX Conference on File and Storage Technologies, 2013, pp. 95-104.
4. Papailiopoulos D., Luo J., Dimakis A., Huang C., Li J. Simple regenerating codes: network coding for cloud storage. INFOCOM, Proceedings IEEE, 2012, pp. 2801-2805.
5. Huang C., Simitci H., Xu Y., Ogus A., Calder B., Gopalan P., Li J., Yekhanin S. Erasure coding in windows azure storage. USENIX annual technical conference, 2012. URL: https://www.usenix.org/system/files/conference/atc12/atc12-final181_0.pdf (accessed: 11.07.2016).
6. Huang C., Chen M., Li J. Pyramid codes: flexible schemes to trade space for access efficiency in reliable data storage systems. NCA-2007: IEEE Intern. symposium on network computing and applications, 2007, pp. 79-86.
7. Peterson W., Weldon E. Error-Correcting Codes. Cambridge, MIT Press, 1972, 572 p.
8. Berlekamp E. Algebraic coding theory. Singapore, World scientific Publishing Co, 2015, 501 p.
9. Lidl R., Niederreiter H. Finite Fields. Vol. 1. 2nd ed. Cambridge, Cambridge University Press, 1997, 755 p.
10. Plank J., Greenan K., Miller E. Screaming fast galois field arithmetic using Intel SIMD instructions. FAST-2013: 11th USENIX Conference on file and storage technologies, 2013, pp. 299-306.
11. Plank J. XOR's lower bounds and MDS codes for storage. IEEE Information Theory Workshop, 2011, pp. 529-551.
12. Trifonov P. Low-complexity implementation of RAID based on Reed-Solomon codes. ACM Transactions on Storage, 2015. URL: http://dl.acm.org/citation.cfm?id=2700308 (accessed: 26.10.2016).
13. Knuth D. The art of computer programming. Vol. 1. 3rd ed. Reading (Massachusetts), Addison-Wesley Press, 1997, 672 p.
14. Uteshev A., Kalinina E. Lekcii po algebre [Lectures in algebra]. Pt II. Saint Petersburg, Solo Press, 2007, 279 p. (In Russian).
15. Horn R. A., Johnson C. R. Matrix analysis. Cambridge, Cambridge University Press, 1986, 612 p. (Russ ed.: Horn R. A., Johnson C. R. Matricnij analiz. Moscow, Mir Publ., 1989, 655 p.)
16. Intel intelligent storage acceleration library. URL: https://01.org/intel%C2%AE-storage-acceleration-library-open-source-version (accessed: 11.07.2016).
17. Jerasure: Erasure coding library. URL: http://jerasure.org/ (accessed: 11.07.2016).
For citation: Marov A. V., Uteshev A. Yu. Matrix formalism of the Reed—Solomon codes. Vestnik of Saint Petersburg University. Series 10. Applied mathematics. Computer science. Control processes, 2016, issue 4, pp. 4-17. DOI: 10.21638/11701/spbu10.2016.401
Статья рекомендована к печати проф. Л. А. Петросяном. Статья поступила в редакцию 15 июля 2016 г. Статья принята к печати 29 сентября 2016 г.