1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/openeuler-gazelle

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Practice_Series_Gazelle_Accelerates_MySQL.md 20 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 10.03.2025 17:01 5c2f3c0

Серия практикумов (часть 1) Gazelle увеличивает производительность MySQL на 20%

Введение в тему

Повышение производительности сетевых карт значительно опережает повышение производительности однокристальных процессоров. Однокристальные процессоры больше не могут полностью использовать пропускную способность сетевых карт. В то же время, процессоры эволюционируют в сторону многокристальной архитектуры, и NUMA-архитектура является одним из решений для многокристальных систем. С точки зрения аппаратной части, существуют два основных решения для сокращения вычислительного разрыва между процессорами и сетевыми картами: передача работы процессора на сетевую карту, что представляет собой решение на основе аппаратного ускорения; и полное использование NUMA-архитектуры, что представляет собой решение на основе программного ускорения. Хотя может показаться интуитивно очевидным, что аппаратное ускорение быстрее, но практические тесты показывают, что программное ускорение Gazelle обеспечивает более значительное повышение производительности, особенно в области эффективного перемещения данных к приложениям, где Gazelle демонстрирует лучшие результаты.

Тренд сетевых картСуществуют различные модели программирования софта, но их можно свести к двум типичным сетевым моделям, как показано ниже:

  • Модель мультиплексирования входных/выходных устройств: сети приложений A полностью изолированы друг от друга, и контексты протоколов фиксированы внутри одного потока.

  • Неравновесная модель: сети приложений B неравновесны, и контексты протоколов перемещаются через несколько потоков.Сетевые модели

Проблемы повышения производительности MySQL

MySQL сетевая модель относится к вышеупомянутой неравновесной модели, где TCP перемещается между потоками. Общие модели протоколов пользователя в отрасли предназначены для неравновесных приложений (например, f-stack), которые не поддерживают перемещение TCP между потоками, или используют глобальные ресурсы TCP (например, lwip). Когда количество подключений превышает 40, производительность быстро снижается из-за проблем конкуренции.

MySQL модель Ускорение MySQL в отрасли

Решение GazelleGazelle — это высокопроизводительная протокольная стек в пространстве пользователя. Он непосредственно читает и записывает сетевые пакеты в пространстве пользователя с использованием DPDK, делится большой страницей памяти для передачи пакетов и использует легковесный стек протоколов LwIP. Это значительно повышает пропускную способность сети I/O приложений, сосредоточившись на ускорении производительности сети баз данных, таких как MySQL, Redis и т.д. Gazelle сочетает высокую производительность с универсальностью:

Исправлено:

  • Удалены лишние пробелы после некоторых заголовков.

  • Корректные окончания слов.

  • Сохранено исходное форматирование.- Высокая производительность: нулевые копии пакетов, без блокировки, гибкая масштабируемая система выноса, адаптивное планирование.

  • Универсальность: полная совместимость с POSIX, без необходимости модификаций, подходящий для различных типов приложений. Gazelle развязывает потоки приложения от потоков стека протокола, тем самым поддерживающая любую модель потока. Через таблицу маршрутизации файлового дескриптора (fd) потока приложения и сокета (sock) потока стека протокола выполняются операции чтения/записи потоков приложений в соответствующих потоках стека протокола. Gazelle развёрнут в многопоточном многоядерном режиме, избегая ловушек NUMA за счёт использования регионализированной памяти большого размера.Технические характеристики

  • Совместимость POSIX

  • Пропуск ядра через DPDK

  • Управление регионированной памятью большого размера для избежания ловушек NUMA

  • Управление аффинностью потоков приложения

  • Распределенная таблица хэшей TCP, многопоточный многоядровый режим работы

  • Разделение потоков стека протокола и потоков приложения

  • Эффективная передача пакетов в приложение

MySQL Ядро MySQL с Gazelle

Как видно, использование ядерного стека протокола достигает скорости 548 400, в то время как использование Gazelle позволяет достичь скорости 668 500, что составляет увеличение более чем на 20%.

Шаги для ускорения MySQL с использованием Gazelle

1. Требования к окружению

1.1 Хардварь

Необходим один сервер (Server) и один клиент (Client).

Сервер Клиент
Процессор Kunpeng 920-4826 * 2 Kunpeng 920-4826 * 2
Частота 2600МГц 2600МГц
Оперативная память 12 * 32ГБ Micron 2666 МГц 8 * 32ГБ Micron 2666 МГц
Сеть 1822 25Гц 1822 25Гц
Жесткий диск системы 1.1ТБ HDD TOSHIBA 1.1ТБ HDD TOSHIBA
Жесткий диск данных 3ТБ HUAWEI SSD NVME Н/Д

1.2 Программное обеспечение

Пакет программного обеспечения по умолчанию использует источник yum openEuler 22.03.| Название программы | Версия | | :--------------------: | :----: | | mysql | 8.0.20| | benchmarksql | 5.0 |

1.3 Сетевое соединение

Развертывание

2. Развертывание на стороне сервера

2.1 Установка зависимостей MySQL

yum install -y cmake doxygen bison ncurses-devel openssl-devel libtool tar rpcgen libtirpc-devel bison bc unzip git gcc-c++ libaio libaio-devel numactl

2.2 Компиляция и установка MySQL

Скачивание пакета исходного кода MySQL

tar zxvf mysql-boost-8.0.20.tar.gz
cd mysql-8.0.20/
patch -p1 < ../0001-SHARDED-LOCK-SYS.patch
patch -p1 < ../0001-SCHED-AFFINITY.patch
patch -p1 < ../0002-LOCK-FREE-TRX-SYS.patch
cd cmake
make clean
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-8.0.20  -DWITH_BOOST=../boost -DDOWNLOAD_BOOST=1
make -j 64
make install

2.3 Настройте параметры MySQL

Используйте конфигурационный файл my.cnf-arm из директории doc/conf/ исходного кода Gazelle. Разместите его в директории /etc и переименуйте в my.cnf.#### 2.4 Развертывание MySQL

# Подключите диск NVMe
mkdir -p /data
mount /dev/nvme0n1 /data
mkdir -p /data/mysql/{data,share,tmp,run,log}

# Создайте группу пользователей
groupadd mysql
useradd -g mysql mysql
chown -R mysql:mysql /data
chown -R mysql:mysql /data/mysql/log/mysql.log

# Инициализация
echo "" > /data/mysql/log/mysql.log
rm -fr /data/mysql/data/*
/usr/local/mysql-8.0.20/bin/mysqld --defaults-file=/etc/my.cnf --user=root --initialize

# Запустите службу
/usr/local/mysql-8.0.20/support-files/mysql.server start

# После инициализации генерируется случайный пароль. Используйте его для входа в MySQL
/usr/local/mysql-8.0.20/bin/mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
QUIT

# Войдите снова в базу данных, пароль '123456'. Обновите учетную запись root для доступа к домену '%', чтобы обеспечить удаленный доступ
/usr/local/mysql-8.0.20/bin/mysql -u root -p
USE mysql;
UPDATE user SET host = '%' WHERE user = 'root';
FLUSH PRIVILEGES;
CREATE DATABASE tpcc;
QUIT

Остановите службу сначала, а затем снова запустите её для применения настроек

/usr/local/mysql-8.0.20/support-files/mysql.server stop


### 3. Установка BenchmarkSQL Tool на стороне клиента

- Сборка и установка

Скачайте [BenchmarkSQL tool](https://mirrors.huaweicloud.com/kunpeng/archive/kunpeng_solution/database/patch/benchmarksql5.0-for-mysql.zip).

```sh
# Установите зависимости для BenchmarkSQL
yum install -y java

unzip benchmarksql5.0-for-mysql.zip
cd benchmarksql5.0-for-mysql/run
chmod +x *.sh
  • Настройка параметров BenchmarkSQL

Отредактируйте файл benchmarksql5.0-for-mysql/run/props.conf. | Настройка | Значение | Описание | | -------------------- | -------- | -------------------------------------------- | | Terminals | 300 | Количество параллельных соединений для тестирования | | runMins | 10 | Продолжительность теста в минутах | | conn | ip | Измените стандартный IP на IP сервера |### 4. Создание тестовых данных в MySQL

# Запустите службу MySQL
/usr/local/mysql-8.0.20/support-files/mysql.server start

# Создайте тестовые данные (создание данных занимает около 45 минут; после завершения создания данных рекомендуется сделать бэкап данных под /data/mysql/data на стороне сервера для будущих тестов; данные можно скопировать отсюда)
./runDatabaseBuild.sh props.conf

# Остановите базу данных
/usr/local/mysql-8.0.20/support-files/mysql.server stop

5. Настройка среды выполнения

5.1 Включение оптимизации STEAL

Включите оптимизацию STEAL на стороне сервера.

  1. Добавьте параметр sched_steal_node_limit=4 в параметры старта системы Linux, и перезагрузитесь для применения.
[root@localhost mysql]# cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-5.10.0-153.12.0.89.oe2203sp2.aarch64 root=/dev/mapper/openeuler-root ro rd.lvm.lv=openeuler/root rd.lvm.lv=openeuler/swap video=VGA-1:640x480-32@60me cgroup_disable=files apparmor=0 crashkernel=1024M,high smmu.bypassdev=0x1000:0x17 smmu.bypassdev=0x1000:0x15 console=tty0 sched_steal_node_limit=4 
  1. Включите STEAL после перезагрузки.
echo STEAL > /sys/kernel/debug/sched_features

5.2 Отключение факторов влияющих на тест

# Отключите irqbalance
systemctl stop irqbalance.service
systemctl disable irqbalance.service

Отключение брандмауэра

systemctl stop iptables systemctl stop firewalld


### 6. Тестирование протокольной стековой структуры ядра для MySQL

```sh
# Привязка прерываний с серверной стороны (замените имя сетевой карты и номер ядра процессора в соответствии с окружением)
ethtool -L enp4s0 combined 5
irq1=`cat /proc/interrupts| grep -E enp4s0 | head -n5 | awk -F ':' '{print $1}'`
cpulist=(91 92 93 94 95)
c=0
for irq in $irq1
do
echo ${cpulist[c]} "->" $irq
echo ${cpulist[c]} > /proc/irq/$irq/smp_affinity_list
let "c++"
done
```# Выполнение тестирования MySQL с клиентской стороны
./runBenchmark.sh props.conf

## Восстановление среды
# Восстановление базы данных с помощью резервной копии на стороне сервера или восстановление данных.
rm -fr /data/mysql/data/*
cp -fr /home/tpccdata/* /data/mysql/data/
# Остановка процесса MySQL
pkill -9 mysqld

Результаты тестирования следующие:

7. Тестирование Gazelle для MySQL

Установка программных пакетов

yum -y install gazelle dpdk libconfig numactl libboundscheck libcap

Изменение конфигурационного файла /etc/gazelle/lstack.conf следующим образом:| Настройка | Значение | Описание | |------------------------|-------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------| | dpdk_args | ["--socket-mem", "2048,2048,2048,2048", "--huge-dir", "/mnt/hugepages-lstack", "--proc-type", "primary", "--legacy-mem", "--map-perfect"] | Конфигурация использования 2 ГБ памяти для каждого NUMA (может быть меньше), каталог монтирования для huge pages | | use_ltran | 0 | Не использовать ltran | | listen_shadow | 1 | Использовать слушатель shadow FD, так как один поток прослушивания MySQL соответствует четырем потокам протокольной стековой структуры | | num_cpus | "18,38,58,78" | Выбор одного CPU для каждого NUMA |

# Алоkация huge pages на стороне сервера
echo 8192 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages # Выберите размер страницы соответственно
mkdir -p /mnt/hugepages-lstack
mount -t hugetlbfs nodev /mnt/hugepages-lstack # Не повторять, иначе huge pages будут заняты и не смогут быть освобождены

Загрузка ko на сервер

modprobe vfio enable_unsafe_noiommu_mode=1 modprobe vfio-pci

Привязка сетевой карты к пространству пользователя на сервере

ip link set enp4s0 down dpdk-devbind -b vfio-pci enp4s0

Запуск mysqld на сервере

LD_PRELOAD=/usr/lib64/liblstack.so GAZELLE_BIND_PROCNAME=mysqld /usr/local/mysql-8.0.20/bin/mysqld --defaults-file=/etc/my.cnf --bind-address=192.168.1.10 &

Выполнение тестирования MySQL с клиента

./runBenchmark.sh props.conf

Восстановление среды

Восстановление базы данных с помощью резервной копии на стороне сервера или генерация данных заново.

rm -fr /data/mysql/data/* cp -fr /home/tpccdata/* /data/mysql/data/

Остановка процесса MySQL

pkill -9 mysqld

Для подробной информации по развертыванию Gazelle обратитесь к Gazelle User Guide.

Результаты тестирования следующие:

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/openeuler-gazelle.git
git@api.gitlife.ru:oschina-mirror/openeuler-gazelle.git
oschina-mirror
openeuler-gazelle
openeuler-gazelle
master