Повышение производительности сетевых карт значительно опережает повышение производительности однокристальных процессоров. Однокристальные процессоры больше не могут полностью использовать пропускную способность сетевых карт. В то же время, процессоры эволюционируют в сторону многокристальной архитектуры, и NUMA-архитектура является одним из решений для многокристальных систем. С точки зрения аппаратной части, существуют два основных решения для сокращения вычислительного разрыва между процессорами и сетевыми картами: передача работы процессора на сетевую карту, что представляет собой решение на основе аппаратного ускорения; и полное использование NUMA-архитектуры, что представляет собой решение на основе программного ускорения. Хотя может показаться интуитивно очевидным, что аппаратное ускорение быстрее, но практические тесты показывают, что программное ускорение Gazelle обеспечивает более значительное повышение производительности, особенно в области эффективного перемещения данных к приложениям, где Gazelle демонстрирует лучшие результаты.
Существуют различные модели программирования софта, но их можно свести к двум типичным сетевым моделям, как показано ниже:
Модель мультиплексирования входных/выходных устройств: сети приложений A полностью изолированы друг от друга, и контексты протоколов фиксированы внутри одного потока.
Неравновесная модель: сети приложений B неравновесны, и контексты протоколов перемещаются через несколько потоков.
MySQL сетевая модель относится к вышеупомянутой неравновесной модели, где TCP перемещается между потоками. Общие модели протоколов пользователя в отрасли предназначены для неравновесных приложений (например, f-stack), которые не поддерживают перемещение TCP между потоками, или используют глобальные ресурсы TCP (например, lwip). Когда количество подключений превышает 40, производительность быстро снижается из-за проблем конкуренции.
Удалены лишние пробелы после некоторых заголовков.
Корректные окончания слов.
Сохранено исходное форматирование.- Высокая производительность: нулевые копии пакетов, без блокировки, гибкая масштабируемая система выноса, адаптивное планирование.
Универсальность: полная совместимость с POSIX, без необходимости модификаций, подходящий для различных типов приложений. Gazelle развязывает потоки приложения от потоков стека протокола, тем самым поддерживающая любую модель потока. Через таблицу маршрутизации файлового дескриптора (fd) потока приложения и сокета (sock) потока стека протокола выполняются операции чтения/записи потоков приложений в соответствующих потоках стека протокола. Gazelle развёрнут в многопоточном многоядерном режиме, избегая ловушек NUMA за счёт использования регионализированной памяти большого размера.
Совместимость POSIX
Пропуск ядра через DPDK
Управление регионированной памятью большого размера для избежания ловушек NUMA
Управление аффинностью потоков приложения
Распределенная таблица хэшей TCP, многопоточный многоядровый режим работы
Разделение потоков стека протокола и потоков приложения
Эффективная передача пакетов в приложение
Как видно, использование ядерного стека протокола достигает скорости 548 400, в то время как использование Gazelle позволяет достичь скорости 668 500, что составляет увеличение более чем на 20%.
Необходим один сервер (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 | Н/Д |
Пакет программного обеспечения по умолчанию использует источник yum openEuler 22.03.| Название программы | Версия | | :--------------------: | :----: | | mysql | 8.0.20| | benchmarksql | 5.0 |
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
Скачайте оптимизирующие патчи: патч оптимизации мелкозернистой блокировки, патч планировщика NUMA, патч оптимизации безблокировки.
Скомпилируйте MySQL
Убедитесь, что установлен пакет libaio-devel
, перед компиляцией.
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
Используйте конфигурационный файл 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
Отредактируйте файл 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
Включите оптимизацию STEAL на стороне сервера.
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
echo STEAL > /sys/kernel/debug/sched_features
# Отключите 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
Результаты тестирования следующие:
Установка программных пакетов
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 будут заняты и не смогут быть освобождены
modprobe vfio enable_unsafe_noiommu_mode=1 modprobe vfio-pci
ip link set enp4s0 down dpdk-devbind -b vfio-pci enp4s0
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 &
./runBenchmark.sh props.conf
rm -fr /data/mysql/data/* cp -fr /home/tpccdata/* /data/mysql/data/
pkill -9 mysqld
Для подробной информации по развертыванию Gazelle обратитесь к Gazelle User Guide.
Результаты тестирования следующие:
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )