Научная статья на тему 'Параллельные вычисления в SAP Hana'

Параллельные вычисления в SAP Hana Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
346
243
i Надоели баннеры? Вы всегда можете отключить рекламу.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Алексей Владимирович Миняйлов

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Параллельные вычисления в SAP Hana»

А. В. Миняйлов

ПАРАЛЛЕЛЬНЫЕ ВЫЧИСЛЕНИЯ В SAP HANA

Алексей Владимирович Миняйлов

Сертифицированный консультант SAP HANA, БДО Юникон Бизнес Солюшнс.

Закончил МГУ имени М.В. Ломоносова по специальности «Прикладная математика и информатика».

Принимал участие в проектах по SAP HANA, SAP Business Objects, SAP BW.

А.В. Миняйлов. Параллельные вычисления в SAP HANA

73

ВВЕДЕНИЕ

За последний десяток лет значительно повысилась производительность процессоров: увеличилась тактовая частота, количество ядер на один процессор. Только на одном современном сервере может быть установлено от 16 до 64 многоядерных процессоров, от 2 до 12 ядер в каждом. Использование многоядерной архитектуры вместе с возможностями параллельных вычислений позволяет решать задачи, недоступные еще десять лет назад.

ПАРАЛЛЕЛЬНАЯ ОБРАБОТКА ДАННЫХ

Платформа SAP HANA позволяет реализовать возможности быстрой обработки данных за счет распараллеливания процессов и хранения данных в соответствии с технологией in-memory.

Традиционно данные в СУБД хранятся в построчном виде, то есть кортежи хранятся в памяти последовательно. Альтернативой такому подходу является хранение данных по столбцам, то есть значения каждого из столбцов в памяти будут идти друг за другом. Наглядно принцип хранения данных по столбцам представлен на рисунке 1.

Как показывают исследования [2], одной из наиболее частых операций с БД в корпоративной среде является чтение множеств данных. Технология in-memory позволяет хранить данные как по строкам, так и по столбцам. Хранение данных по столбцам в SAP HANA дает возможность выполнять подобные операции более эффективно, чем при построчном хранении.

Благодаря хранению данных в ОЗУ и кэше процессора время обращения к данным ускоряется на порядки по сравнению со временем доступа к жестким дискам (HDD) и твердотельным накопителям (SSD).

На рисунке 2 указано время обращения к носителю информации (жесткий диск, флэш-память, ОЗУ, кэш 3-го уровня, кэш 2-го уровня, кэш 1-го уровня) для двухъядерного процессора с тактовой частотой 2 Ghz.

col1 col2 col3

row1 A B C

rOW2 A B C

rOW3 A B C

rOW4 A B C

Таблица A (построчное хранение)

массив памяти

A B C A B C A B C A B C

. .. .. .. .

Строка Строка Строка Строка

Таблица B(хранение по столбцам)

B B B B C C C C

l M • M ■ l

Столбец Столбец Столбец

Рисунок 1. Способы хранения табличных данных

74

SAP HANA

Технологическая платформа для решения современных бизнес-задач

Процессор

ядро 1

кэш L1

кэш L2

ядро 2

кэш L1

кэш L2

кэш L3

Оперативная память Диск (HDD/SSD)

200x

14,3x

6,7x

1x

<—

0,5 нс

7.0 нс

15.0 нс

100 нс

SSD: 150K нс HDD: 10M нс

Рисунок 2. Сравнение скорости доступа

Из рисунка 2 видно, что обращение к ОЗУ быстрее, чем к жесткому диску, в 100 000 раз. При сравнении же оперативной памяти с памятью процессора видно, что наибольший выигрыш в отношении скорости доступа к данным показывает кэш 1-го уровня — он быстрее в 200 раз [4].

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

Возможность параллельно выполнять вычисления также обеспечивается за счет принципа SIMD (Single Instruction Multiple Data). Традиционно вычисления в процессоре выполняются в скалярном виде: одна инструкция возвращает один результат. Для SIMD-вычислений необходимы специальные инструкции процессора Intel SSE2/SSE3/ SSE4, которые позволяют за одну команду получить набор значений.

Скалярные вычисления

• Используются стандартные инструкции процессора

• Одна операция выдает один результат Векторные вычисления

• Используются инструкции Intel SSE2/SSE3/SSE4

• Одна операция выдает вектор значений

Стоит отметить, что SIMD-вычисления оптимально подходят для БД HANA. При организации данных по столбцам каждую колонку таблицы можно представить в виде массива. В памяти данные массива лежат последовательно, что позволяет SIMD-инструкциям вычислять сразу несколько значений за одну команду.

А.В. Миняйлов. Параллельные вычисления в SAP HANA

75

X 1 А X1 X2 X3 X4

1 1 1 | | 1 1

ОПЕРАНДЫ яШ оператор ОПЕРАНДЫ яШ оператор SSE2/SSE3/SSE4

1 1 \ 1 1

Y Y1 Y2 Y3 Y4

Ж N Ж Ж > S

XopY X1opY1 X2opY2 X3opY3 X4opY4

Рисунок 3. Сравнение методов вычислений в рамках одного процессора

ceCustomCppPop

12 columns processed

Execution Time: 0,633 ms

7* ~A

Рисунок 4. Схема вызова процедуры

76

SAP HANA

Технологическая платформа для решения современных бизнес-задач

Рассмотрим распараллеливание вычислений на примере вызова процедуры. Демонстрационная процедура принимает на вход две таблицы, две другие — возвращает.

На рисунке 4 представлена схема выполнения запроса. Как видно из схемы, при вызове процедуры HANA разделяет выборку данных на два потока, по одному на каждую таблицу. После завершения выборки результаты в отдельных потоках объединяются — с получением двух результирующих таблиц.

SAP HANA применяет параллелизм в алгоритмах, которые используются при выполнении запросов к базам данных. Рассмотрим несколько ключевых алгоритмов: scan, aggregation, join.

Scan. Данная функция проверяет логическое выражение над столбцом значений. Возвращает список позиций значений, которые совпали с логическим выражением. Распараллеливание процесса обеспечивается за счет разделения данных по потокам: каждый поток получает свою часть данных для сканирования. По завершении процесса результаты всех потоков объединяются в единый список.

Aggregation. Агрегирование данных реализуется с помощью хэш-таблиц. Для агрегации данных HANA использует локальные хэш-таблицы с последующим слиянием. Предположим, для выполнения задачи используется процессор с четырьмя потоками (threads). Первые два потока работают со своими локальными хэш-таблицами размером с кэш, куда они записывают промежуточные результаты агрегации. Остальные два потока отвечают за слияние данных из буферизованных хэш-таблиц. Весь процесс проходит в несколько этапов:

1. Поток получает на вход порцию строк исходной таблицы.

2. Происходит агрегация строк с записью в хэш-таблицу.

3. Переход на первый шаг. Как только величина хэш-таблицы достигает определенного порогового значения, например, 80% от максимально возможного размера, то есть размера кэша, данные перемещаются в буфер общей памяти, и поток инициирует наполнение новой хэш-таблицы.

4. В момент, когда заполнение буфера достигает определенного размера, первые два потока временно останавливаются и уведомляют об этом два других потока, отвечающих за слияние буферизованных таблиц. Слияние производится с помощью секционирования по диапазонам (range partitioning). Каждый поток работает только со строками своего диапазона, что обеспечивает параллельное выполнение слияния данных.

5. Процесс повторяется до момента опустошения буфера и обработки всех строк исходной таблицы.

Таким образом, первые два потока в примере отвечают за агрегацию данных, два других — за слияние. Наглядно процесс продемонстрирован на схеме (рисунок 5).

Join. Так же как агрегация, операция объединения таблиц выполняется с помощью хэш-таблиц. Общий алгоритм следующий:

1. Выделяется часть потоков для наполнения локальных хэш-таблиц. Каждый поток одновременно получает порцию данных из исходной таблицы.

2. Как только локальные таблицы наполняются до определенного уровня, их содержимое переносится в буфер.

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

А.В. Миняйлов. Параллельные вычисления в SAP HANA

77

Поток 1

Поток 1

I

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

локальная таблица 1

локальные хэш-таблицы

Поток 2

локальная таблица 2

Буфер

Поток 3

в

\ ✓

'лЛ-*

....■'■■■"A S1 ы

Поток 4

В

хэш-таблица 1 (секционированная часть)

хэш-таблица 2 (секционированная часть)

Рисунок 5. Параллельная агрегация данных

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

4. Алгоритм выполняется циклично до опустошения буфера и полной обработки исходной таблицы.

ЗАКЛЮЧЕНИЕ

Таким образом, многоядерная архитектура вместе с технологией in-memory позволяют ускорять работу бизнес-приложений: результат — быстрый поиск и представление необходимой информации, сокращение времени подготовки отчетности. Используя возможности параллелизма, SAP HANA позволяет раскрыть потенциал многоядерной архитектуры.

78

SAP HANA

Технологическая платформа для решения современных бизнес-задач

ЛИТЕРАТУРА

1. Average Historic Price of RAM (2013) [Электронный документ]. http://www.statisticbrain.com/average-historic-price-of-ram/

2. Plattner H. A Common Database Approach for OLTP and OLAP Using an In-Memory Column Database // SIGMOD 2009. 1-2.

3. Plattner H., Zeier A. In-Memory Data Management. Springer, 2009.

4. SAP HANA — Real Time Computing. 2013. [Электронный документ]. http://ee380.stanford.edu/Abstracts/130522-slides.pdf

i Надоели баннеры? Вы всегда можете отключить рекламу.