Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

DEFLATE_QPL로 벤치마크 실행

  • 호스트 머신이 QPL의 필수 사전 요구 사항을 충족하는지 확인하세요

  • cmake 빌드 중에는 deflate_qpl이 기본적으로 활성화됩니다. 실수로 변경한 경우 빌드 플래그를 다시 확인하세요: ENABLE_QPL=1

  • 일반적인 요구 사항은 ClickHouse의 일반 빌드 지침을 참조하세요

파일 목록

qpl-cmake 아래의 benchmark_sample 폴더에는 Python 스크립트로 벤치마크를 실행하는 예시가 포함되어 있습니다:

client_scripts에는 일반적인 벤치마크를 실행하기 위한 Python 스크립트가 포함되어 있습니다. 예시는 다음과 같습니다:

  • client_stressing_test.py: [1~4]개의 서버 인스턴스를 대상으로 쿼리 스트레스 테스트를 수행하는 Python 스크립트입니다.
  • queries_ssb.sql: Star Schema Benchmark의 모든 쿼리가 나열된 파일입니다.
  • allin1_ssb.sh: 이 셸 스크립트는 전체 벤치마크 워크플로를 자동으로 한 번에 실행합니다.

database_files는 lz4/deflate/zstd 코덱에 따라 데이터베이스 파일이 저장됨을 의미합니다.

Star Schema용 벤치마크 자동 실행:

$ cd ./benchmark_sample/client_scripts
$ sh run_ssb.sh

완료되면 이 폴더에서 모든 결과를 확인하세요:./output/

실패한 경우 아래 섹션에 따라 벤치마크를 수동으로 실행하세요.

정의

[CLICKHOUSE_EXE]는 ClickHouse 실행 파일의 경로를 의미합니다.

환경

pip3 install clickhouse_driver numpy

[IAA 자체 점검]

$ accel-config list | grep -P 'iax|state'

예상 출력은 다음과 같습니다:

    "dev":"iax1",
    "state":"enabled",
            "state":"enabled",

아무 출력도 표시되지 않으면 IAA가 아직 준비되지 않은 상태입니다. IAA 설정을 다시 확인하십시오.

원시 데이터 생성

$ cd ./benchmark_sample
$ mkdir rawdata_dir && cd rawdata_dir

dbgen을 사용해 다음 매개변수로 1억 개의 행 데이터를 생성합니다: -s 20

*.tbl 같은 파일은 ./benchmark_sample/rawdata_dir/ssb-dbgen 아래에 생성되어야 합니다:

데이터베이스 설정

LZ4 코덱을 사용해 데이터베이스를 설정합니다

$ cd ./database_dir/lz4
$ [CLICKHOUSE_EXE] server -C config_lz4.xml >&/dev/null&
$ [CLICKHOUSE_EXE] client

여기에서 콘솔에 Connected to ClickHouse server 메시지가 표시되어야 합니다. 이 메시지는 클라이언트가 서버와의 연결을 성공적으로 설정했음을 의미합니다.

Star Schema Benchmark에 나와 있는 아래 3단계를 완료하십시오.

  • ClickHouse에서 테이블 생성
  • 데이터 삽입. 여기서는 입력 데이터로 ./benchmark_sample/rawdata_dir/ssb-dbgen/*.tbl을 사용하십시오.
  • "star schema"를 비정규화된 "flat schema"로 변환

IAA Deflate 코덱으로 DB 설정

$ cd ./database_dir/deflate
$ [CLICKHOUSE_EXE] server -C config_deflate.xml >&/dev/null&
$ [CLICKHOUSE_EXE] client

위의 lz4와 동일한 3단계를 완료합니다

ZSTD 코덱으로 데이터베이스를 설정합니다

$ cd ./database_dir/zstd
$ [CLICKHOUSE_EXE] server -C config_zstd.xml >&/dev/null&
$ [CLICKHOUSE_EXE] client

위의 lz4와 동일하게 3단계를 완료하십시오

[자체 점검] 각 코덱(lz4/zstd/deflate)별로 데이터베이스가 정상적으로 생성되었는지 확인하려면 아래 쿼리를 실행하세요:

SELECT count() FROM lineorder_flat

다음과 같은 출력이 표시되어야 합니다:

[IAA Deflate 코덱 자체 점검]

클라이언트에서 처음으로 삽입 또는 쿼리를 실행하면 ClickHouse 서버 콘솔에 다음 로그가 출력될 것으로 예상됩니다:

Hardware-assisted DeflateQpl codec is ready!

이 로그가 보이지 않고 대신 아래와 같은 다른 로그가 표시된다면:

하드웨어 가속 DeflateQpl 코덱 초기화에 실패했습니다

이는 IAA 장치가 아직 준비되지 않았다는 뜻이므로, IAA 설정을 다시 확인해야 합니다.

단일 인스턴스에서 벤치마크하기

  • 벤치마크를 시작하기 전에 C6를 비활성화하고 CPU 주파수 거버너를 performance로 설정하십시오.
$ cpupower idle-set -d 3
$ cpupower frequency-set -g performance
  • 소켓 간 교차 메모리 바인딩으로 인한 영향을 없애기 위해 numactl을 사용하여 서버는 한 소켓에, 클라이언트는 다른 소켓에 바인딩합니다.
  • 단일 인스턴스는 단일 클라이언트가 연결된 단일 서버를 의미합니다.

이제 LZ4/Deflate/ZSTD 각각에 대해 벤치마크를 실행합니다:

LZ4:

$ cd ./database_dir/lz4 
$ numactl -m 0 -N 0 [CLICKHOUSE_EXE] server -C config_lz4.xml >&/dev/null&
$ cd ./client_scripts
$ numactl -m 1 -N 1 python3 client_stressing_test.py queries_ssb.sql 1 > lz4.log

IAA deflate:

$ cd ./database_dir/deflate
$ numactl -m 0 -N 0 [CLICKHOUSE_EXE] server -C config_deflate.xml >&/dev/null&
$ cd ./client_scripts
$ numactl -m 1 -N 1 python3 client_stressing_test.py queries_ssb.sql 1 > deflate.log

ZSTD:

$ cd ./database_dir/zstd
$ numactl -m 0 -N 0 [CLICKHOUSE_EXE] server -C config_zstd.xml >&/dev/null&
$ cd ./client_scripts
$ numactl -m 1 -N 1 python3 client_stressing_test.py queries_ssb.sql 1 > zstd.log

이제 예상대로 3개의 로그가 출력되어야 합니다:

lz4.log
deflate.log
zstd.log

성능 메트릭을 확인하는 방법:

여기서는 QPS를 중점적으로 보므로 QPS_Final 키워드를 검색하여 통계를 확인하십시오

다중 인스턴스로 벤치마크하기

  • 과도한 스레드로 인한 메모리 병목의 영향을 줄이기 위해 다중 인스턴스로 벤치마크를 실행하는 것을 권장합니다.
  • 다중 인스턴스는 각각의 클라이언트에 연결된 여러 대(2대 또는 4대)의 서버를 의미합니다.
  • 하나의 소켓에 있는 코어는 균등하게 나누어 각 서버에 할당해야 합니다.
  • 다중 인스턴스의 경우 각 코덱마다 새 폴더를 생성하고, 단일 인스턴스와 유사한 단계에 따라 데이터셋을 삽입해야 합니다.

차이점은 2가지입니다:

  • 클라이언트 측에서는 테이블 생성 및 데이터 삽입 시 할당된 포트로 ClickHouse를 실행해야 합니다.
  • 서버 측에서는 포트가 할당된 특정 xml 구성 파일로 ClickHouse를 실행해야 합니다. 다중 인스턴스용 사용자 지정 xml 구성 파일은 모두 ./server_config 아래에 제공됩니다.

여기서는 소켓당 코어가 60개라고 가정하고, 예시로 2개의 인스턴스를 사용합니다. 첫 번째 인스턴스용 서버 실행 LZ4:

$ cd ./database_dir/lz4
$ numactl -C 0-29,120-149 [CLICKHOUSE_EXE] server -C config_lz4.xml >&/dev/null&

ZSTD:

$ cd ./database_dir/zstd
$ numactl -C 0-29,120-149 [CLICKHOUSE_EXE] server -C config_zstd.xml >&/dev/null&

IAA Deflate:

$ cd ./database_dir/deflate
$ numactl -C 0-29,120-149 [CLICKHOUSE_EXE] server -C config_deflate.xml >&/dev/null&

[두 번째 인스턴스용 서버 시작]

LZ4:

$ cd ./database_dir && mkdir lz4_s2 && cd lz4_s2
$ cp ../../server_config/config_lz4_s2.xml ./
$ numactl -C 30-59,150-179 [CLICKHOUSE_EXE] server -C config_lz4_s2.xml >&/dev/null&

ZSTD:

$ cd ./database_dir && mkdir zstd_s2 && cd zstd_s2
$ cp ../../server_config/config_zstd_s2.xml ./
$ numactl -C 30-59,150-179 [CLICKHOUSE_EXE] server -C config_zstd_s2.xml >&/dev/null&

IAA Deflate:

$ cd ./database_dir && mkdir deflate_s2 && cd deflate_s2
$ cp ../../server_config/config_deflate_s2.xml ./
$ numactl -C 30-59,150-179 [CLICKHOUSE_EXE] server -C config_deflate_s2.xml >&/dev/null&

두 번째 인스턴스용 테이블 생성 && 데이터 삽입

테이블 생성:

$ [CLICKHOUSE_EXE] client -m --port=9001 

데이터 삽입:

$ [CLICKHOUSE_EXE] client --query "INSERT INTO [TBL_FILE_NAME] FORMAT CSV" < [TBL_FILE_NAME].tbl  --port=9001
  • [TBL_FILE_NAME]은 ./benchmark_sample/rawdata_dir/ssb-dbgen 아래에서 정규식 *. tbl에 맞게 이름이 지정된 파일 이름을 나타냅니다.
  • --port=9001은 서버 인스턴스에 할당된 포트를 의미하며, 이 포트는 config_lz4_s2.xml/config_zstd_s2.xml/config_deflate_s2.xml에도 정의되어 있습니다. 인스턴스를 더 추가하려면 이를 각각 s3/s4 인스턴스에 해당하는 값 9002/9003으로 대체해야 합니다. 이를 지정하지 않으면 기본 포트는 9000이며, 이 값은 첫 번째 인스턴스에서 이미 사용 중입니다.

2개 인스턴스로 벤치마크

LZ4:

$ cd ./database_dir/lz4
$ numactl -C 0-29,120-149 [CLICKHOUSE_EXE] server -C config_lz4.xml >&/dev/null&
$ cd ./database_dir/lz4_s2
$ numactl -C 30-59,150-179 [CLICKHOUSE_EXE] server -C config_lz4_s2.xml >&/dev/null&
$ cd ./client_scripts
$ numactl -m 1 -N 1 python3 client_stressing_test.py queries_ssb.sql 2  > lz4_2insts.log

ZSTD:

$ cd ./database_dir/zstd
$ numactl -C 0-29,120-149 [CLICKHOUSE_EXE] server -C config_zstd.xml >&/dev/null&
$ cd ./database_dir/zstd_s2
$ numactl -C 30-59,150-179 [CLICKHOUSE_EXE] server -C config_zstd_s2.xml >&/dev/null& 
$ cd ./client_scripts
$ numactl -m 1 -N 1 python3 client_stressing_test.py queries_ssb.sql 2 > zstd_2insts.log

IAA deflate

$ cd ./database_dir/deflate
$ numactl -C 0-29,120-149 [CLICKHOUSE_EXE] server -C config_deflate.xml >&/dev/null&
$ cd ./database_dir/deflate_s2
$ numactl -C 30-59,150-179 [CLICKHOUSE_EXE] server -C config_deflate_s2.xml >&/dev/null&
$ cd ./client_scripts
$ numactl -m 1 -N 1 python3 client_stressing_test.py queries_ssb.sql 2 > deflate_2insts.log

여기서 client_stressing_test.py의 마지막 인수인 2는 인스턴스 수를 의미합니다. 더 많은 인스턴스를 사용하려면 이 값을 3 또는 4로 대체해야 합니다. 이 스크립트는 최대 4개의 인스턴스를 지원합니다/

이제 예상한 대로 3개의 로그가 출력되어야 합니다:

lz4_2insts.log
deflate_2insts.log
zstd_2insts.log

성능 메트릭을 확인하는 방법:

여기서는 QPS를 중점적으로 보므로 QPS_Final 키워드를 검색해 통계를 수집하십시오.

4개 인스턴스에 대한 벤치마크 설정은 위의 2개 인스턴스와 유사합니다. 검토용 최종 보고서에는 2개 인스턴스의 벤치마크 데이터를 사용하는 것을 권장합니다.

새 ClickHouse 서버를 시작하기 전에 항상 백그라운드에서 실행 중인 ClickHouse 프로세스가 없는지 확인하고, 기존 프로세스가 있으면 종료하십시오:

$ ps -aux| grep clickhouse
$ kill -9 [PID]

./client_scripts/queries_ssb.sql의 쿼리 목록을 공식 Star Schema Benchmark와 비교해 보면, 포함되지 않은 3개의 쿼리(Q1.2/Q1.3/Q3.4)가 있음을 확인할 수 있습니다. 이는 이러한 쿼리의 CPU 사용률이 매우 낮아 < 10%에 불과하므로 성능 차이를 보여주기 어렵기 때문입니다.

Navigation