centos7 pg-strom2.0 rpm 安装

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qadzhangc/article/details/88074648

https://heterodb.github.io/swdc/

以pg10为例

https://heterodb.github.io/swdc/yum/rhel7-x86_64/nvme_strom-1.9-5.el7.x86_64.rpm

https://heterodb.github.io/swdc/yum/rhel7-x86_64/pg_strom-PG10-2.0-181227.el7.x86_64.rpm

PG-Strom安装
RPM安装
PG-Strom和相关软件包从HeteroDB软件分发中心分发。如果添加了存储库定义,则不需要很多任务。

我们为每个基础PostgreSQL版本提供PG-Strom的单独RPM包。pg_strom-PG96package是为PostgreSQL 9.6 pg_strom-PG10构建的,也是为PostgreSQL v10构建的。

$ sudo yum install pg_strom-PG10
          :
================================================================================
 Package              Arch          Version               Repository       Size
================================================================================
Installing:
 pg_strom-PG10        x86_64        1.9-180301.el7        heterodb        320 k

Transaction Summary
================================================================================
          :
Installed:
  pg_strom-PG10.x86_64 0:1.9-180301.el7

Complete!
这就是包安装的全部内容。

安装后设置
创建数据库集群
数据库集群尚未构建,运行initdb命令设置PostgreSQL的初始数据库。

RPM安装上的数据库集群的默认路径是/var/lib/pgsql/<version number>/data。如果安装postgresql-alternatives包,则/var/lib/pgdata无论PostgreSQL版本如何,都可以引用此默认路径。

$ sudo su - postgres
$ initdb -D /var/lib/pgdata/
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /var/lib/pgdata ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.

Success. You can now start the database server using:

    pg_ctl -D /var/lib/pgdata/ -l logfile start
设置postgresql.conf
接下来,编辑postgresql.conf哪个是PostgreSQL的配置文件。以下参数应至少编辑为PG-Strom。根据系统使用情况和预期工作负载调查其他参数。

shared_preload_libraries
必须在启动postmaster进程时加载PG-Strom模块shared_preload_libraries。无法按需加载。因此,您必须添加以下配置。
shared_preload_libraries = '$libdir/pg_strom'
max_worker_processes
PG-Strom内部使用多个后台工作程序,因此默认配置(= 8)对于其他用途而言太小。因此,我们建议将变量扩展到一定范围。
max_worker_processes = 100
的shared_buffers
虽然它取决于工作负载,但初始配置shared_buffers对于PG-Strom尝试工作的数据大小来说太小,因此存储工作负载限制了整个性能,并且可能无法有效地工作GPU。
因此,我们建议将变量扩展到一定的余量。
shared_buffers = 10GB
请考虑将SSD-to-GPU直接SQL执行应用于处理大于系统物理RAM大小的处理。
work_mem
虽然它取决于工作负载,但初始配置work_mem太小,无法在分析查询上选择最佳查询执行计划。
一个典型的例子是,可以选择基于磁盘的合并排序,而不是内存中的快速排序。
因此,我们建议将变量扩展到一定的余量。
work_mem = 1GB
启动PostgreSQL
启动PostgreSQL服务。

如果PG-Strom设置得当,它会写出显示PG-Strom认可的GPU设备的日志消息。以下示例识别了Tesla V100(PCIe; 16GB版)设备。

# systemctl start postgresql-10
# systemctl status -l postgresql-10
* postgresql-10.service - PostgreSQL 10 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-10.service; disabled; vendor preset: disabled)
   Active: active (running) since Sat 2018-03-03 15:45:23 JST; 2min 21s ago
     Docs: https://www.postgresql.org/docs/10/static/
  Process: 24851 ExecStartPre=/usr/pgsql-10/bin/postgresql-10-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 Main PID: 24858 (postmaster)
   CGroup: /system.slice/postgresql-10.service
           |-24858 /usr/pgsql-10/bin/postmaster -D /var/lib/pgsql/10/data/
           |-24890 postgres: logger process
           |-24892 postgres: bgworker: PG-Strom GPU memory keeper
           |-24896 postgres: checkpointer process
           |-24897 postgres: writer process
           |-24898 postgres: wal writer process
           |-24899 postgres: autovacuum launcher process
           |-24900 postgres: stats collector process
           |-24901 postgres: bgworker: PG-Strom ccache-builder2
           |-24902 postgres: bgworker: PG-Strom ccache-builder1
           `-24903 postgres: bgworker: logical replication launcher

Mar 03 15:45:19 saba.heterodb.com postmaster[24858]: 2018-03-03 15:45:19.195 JST [24858] HINT:  Run 'nvidia-cuda-mps-control -d', then start server process. Check 'man nvidia-cuda-mps-control' for more details.
Mar 03 15:45:20 saba.heterodb.com postmaster[24858]: 2018-03-03 15:45:20.509 JST [24858] LOG:  PG-Strom: GPU0 Tesla V100-PCIE-16GB (5120 CUDA cores; 1380MHz, L2 6144kB), RAM 15.78GB (4096bits, 856MHz), CC 7.0
Mar 03 15:45:20 saba.heterodb.com postmaster[24858]: 2018-03-03 15:45:20.510 JST [24858] LOG:  NVRTC - CUDA Runtime Compilation vertion 9.1
Mar 03 15:45:23 saba.heterodb.com postmaster[24858]: 2018-03-03 15:45:23.378 JST [24858] LOG:  listening on IPv6 address "::1", port 5432
Mar 03 15:45:23 saba.heterodb.com postmaster[24858]: 2018-03-03 15:45:23.378 JST [24858] LOG:  listening on IPv4 address "127.0.0.1", port 5432
Mar 03 15:45:23 saba.heterodb.com postmaster[24858]: 2018-03-03 15:45:23.442 JST [24858] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
Mar 03 15:45:23 saba.heterodb.com postmaster[24858]: 2018-03-03 15:45:23.492 JST [24858] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
Mar 03 15:45:23 saba.heterodb.com postmaster[24858]: 2018-03-03 15:45:23.527 JST [24858] LOG:  redirecting log output to logging collector process
Mar 03 15:45:23 saba.heterodb.com postmaster[24858]: 2018-03-03 15:45:23.527 JST [24858] HINT:  Future log output will appear in directory "log".
Mar 03 15:45:23 saba.heterodb.com systemd[1]: Started PostgreSQL 10 database server.
创建PG-Strom相关对象
最后,创建与PG-Strom相关的数据库对象,如SQL函数。这些步骤使用PostgreSQL的EXTENSION功能打包。因此,您需要运行的所有操作都CREATE EXTENSION在SQL命令行上。

请注意,每个新数据库都需要此步骤。如果您希望PG-Strom在新数据库创建时预先配置,您可以在template1数据库上创建PG-Strom扩展,其配置将被复制到新数据库CREATE DATABASE命令。

$ psql postgres -U postgres
psql (10.2)
Type "help" for help.

postgres=# CREATE EXTENSION pg_strom ;
CREATE EXTENSION
这就是安装的全部内容。

NVME-Strom模块
本节还介绍了NVME-Strom Linux内核模块,它与PG-Strom的核心功能密切配合,如SSD-to-GPU直接SQL执行,即使它是一个独立的软件模块。

获取模块和安装
与其他PG-Strom相关的模块一样,NVME-Strom作为免费软件分发在(https://heterodb.github.io/swdc/)[HeteroDB软件分发中心]。换句话说,它不是一个开源软件。

如果您的系统已安装heterodb-swdc包,则yum install命令下载RPM文件并安装nvme_strom包。

$ sudo yum install nvme_strom
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.cat.net
 * epel: ftp.iij.ad.jp
 * extras: mirrors.cat.net
 * ius: mirrors.kernel.org
 * updates: mirrors.cat.net
Resolving Dependencies
--> Running transaction check
---> Package nvme_strom.x86_64 0:1.3-1.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package             Arch            Version            Repository         Size
================================================================================
Installing:
 nvme_strom          x86_64          1.3-1.el7          heterodb          273 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 273 k
Installed size: 1.5 M
Is this ok [y/d/N]: y
Downloading packages:
No Presto metadata available for heterodb
nvme_strom-1.3-1.el7.x86_64.rpm                            | 273 kB   00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : nvme_strom-1.3-1.el7.x86_64                                  1/1
  :
<snip>
  :
DKMS: install completed.
  Verifying  : nvme_strom-1.3-1.el7.x86_64                                  1/1

Installed:
  nvme_strom.x86_64 0:1.3-1.el7

Complete!
许可证激活
需要许可证才能使用HeteroDB,Inc。提供的NVME-Strom模块的所有功能。您可以在没有许可证的情况下操作系统,但以下功能受到限制。 - 支持多个GPU - 在SSD-to-GPU Direct SQL上支持条带化(md-raid0)

您可以从HeteroDB,Inc获得许可文件,如下面的纯文本。

IAwPOAC44m8LPMoV7bMykhxM27LAVrktspcaMHki8pI1fXrxq0KzqPDK4LzAA9n26IRAr/4ymB6QJ3/JxZOfYTVsbWq66vEtTAIuZVmJ/I888zRATj1hoofh1WbIwd3/ix28Cy1v16KCgLrlqPsra6NJScMOOHnuYoWWmWe4ml+n6GVEIb7ChUJvZbEZSO/DiLXosFc0N+MD4JTEU/XsBUP9ufacpbosW/YG2nOib3mpvhkfn7RQy2T5CVQeuGjM9Taj7DN5xipqU/Q0hZaZKA8EsZwsB6b4c7usdmPILyIpuTrWnEbjJ6worOQWHA+nL87xkDL1XYGH6UVc291QPLwk=
----
VERSION:1
SERIAL_NR:HDB-TRIAL
ISSUED_AT:2018-08-16
EXPIRED_AT:2018-09-15
NR_GPUS:1
LICENSEE_ORG:Capybara Kingdom
LICENSEE_NAME:Herr.Wassershweine
LICENSEE_MAIL:capybara@examplecom
将许可证文件复制到/etc/heterodb.license,然后重新启动PostgreSQL。

PostgreSQL的启动日志消息转储许可证信息,它告诉我们许可证激活已成功完成。

$ pg_ctl restart
   :
LOG:  PG-Strom built for PostgreSQL 11
LOG:  PG-Strom: GPU0 Tesla V100-PCIE-16GB (5120 CUDA cores; 1380MHz, L2 6144kB), RAM 15.78GB (4096bits, 856MHz), CC 7.0
   :
   :
LOG:  HeteroDB License: { "version" : 1, "serial_nr" : "HDB-TRIAL", "issued_at" : "16-Aug-2018", "expired_at" : "15-Sep-2018", "nr_gpus" : 1, "licensee_org" : "Capybara Kingdom", "licensee_name" : "Herr.Wassershweine", "licensee_mail" : "capybara@examplecom" }
LOG:  listening on IPv6 address "::1", port 5432
LOG:  listening on IPv4 address "127.0.0.1", port 5432
LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
   :
内核模块参数
NVME-Strom Linux内核模块有一些参数。

参数    类型    默认    描述
verbose    int    0    启用详细的调试输出
stat_info    int    1    启用性能统计信息
fast_ssd_mode    int    0    快速NVME-SSD的操作模式
p2p_dma_max_depth    int    48    异步P2P DMA请求的最大数量可以在NVME设备的I / O队列中排队
p2p_dma_max_unitsz    int    256    以kB为单位的最大数据块长度,由一个P2P DMA请求一次读取
这是fast_ssd_mode参数的额外解释。

当NVME-Strom Linux内核模块获得SSD到GPU直接数据传输的请求时,首先,它检查所需的数据块是否是操作系统的页面缓存上的缓存。如果fast_ssd_mode是0,NVME-Strom会将所需数据块的页面缓存写回调用者的用户空间缓冲区,然后指示应用程序通过CUDA API调用正常主机 - >设备数据传输。它适用于非快速NVME-SSD,如PCIe x4等级。

另一方面,SSD-to-GPU直接数据传输可能更快,如果您使用PCIe x8级快速NVME-SSD或在条带模式下使用多个SSD,比正常主机 - >缓冲区复制后的设备数据传输。如果fast_ssd_mode不是这样0,无论页面缓存状态如何,NVME-Strom都会启动SSD到GPU的直接数据传输。

但是,如果页面缓存很脏,它将永远不会启动SSD到GPU的直接数据传输。

这是p2p_dma_max_depth参数的额外解释。

NVME-Strom Linux内核模块对SSD到GPU的直接数据传输进行DMA请求,然后将它们排入源NVME设备的I / O队列。当异步DMA请求排队的次数超过NVME设备的容量时,各个DMA请求的延迟变得非常糟糕,因为NVME-SSD控制器按到达顺序处理DMA请求。(另一方面,它最大化了吞吐量,因为NVME-SSD控制器连续接收DMA请求。)如果DMA请求的周转时间太长,可能会被错误地视为错误,那么可能导致I / O超时请求并返回错误状态。因此,将更多的DMA请求排入I / O队列比使用NVME设备的合理数量的待处理请求更有意义。

p2p_dma_max_depth参数控制每个NVME设备可以一次排队的异步P2P DMA请求的数量。如果应用程序尝试将DMA请求排队多于配置,则调用程序线程将阻塞,直到正在运行的DMA完成。因此,它可以避免无意识的高负载NVME设备。

猜你喜欢

转载自blog.csdn.net/qadzhangc/article/details/88074648