Commit 83df17e1 authored by JooHan Hong's avatar JooHan Hong

numa, result init

parent 70689ab2
Pipeline #5729 passed with stages
in 1 minute and 1 second
[![logo](https://www.hongsnet.net/images/logo.gif)](https://www.hongsnet.net)
# NUMA Configuration STEP 2 (`Result`)
아래와 같이 NUMA preferred 정책을 통해 초도 적용을 하였으나, 기대와 다르게 CPU 사용률이 크게 증가하였다.
[ STEP 1, Issue 바로가기 ](https://gitlab.hongsnet.net/joohan.hong/joohanhong/tree/master/OS/TUNING/INFLUXDB/NUMA/ISSUED)
따라서 다음의 추가 검토를 통해 튜닝을 수행 한다.
# 튜닝 수행 방향
* RDBMS의 경우 일반적으로 특정 Core를 사용하도록 고안되었는데, InfluxDB는 왜 다른가?
* TS(Time Series)DB의 경우 오픈 소스 개발사에서 특별한 가이드가 없는 상태
* 그렇다면, 이제 남은 것은 SMP 구조와 같이 균등한 정책을 통해 수행할 경우 NUMA hit/miss가 어떻게 될 것인가?
# 튜닝 설정
* [ **STEP 1** ] numactl 명령을 통한 Application을 실행하기 위해, 다음과 같이 간단한 스크립트를 작성 한다.
```bash
# cat influxdb_control.sh
#!/bin/bash
if [[ $1 == "start" ]]; then
numactl --interleave=all /usr/bin/influxd -config /etc/influxdb/influxdb.conf &
PID=$!
echo $PID > /var/lib/influxdb/influxdb.pid
elif [[ $1 == "stop" ]]; then
PID=`cat /var/lib/influxdb/influxdb.pid`
for var in {1..3}
do
kill -9 $PID
done
rm -rf /var/lib/influxdb/influxdb.pid
else
echo
echo "Requirement Args start | stop "
echo
fi
```
> 핵심 : numactl --interleave=all /usr/bin/influxd -config /etc/influxdb/influxdb.conf &
추가적으로 현재 NUMA 관련 시스템 환경은 다음과 같다.
* numad 데몬의 경우 다음과 같이 실행 중인 상태이다.
```bash
# ps -aef |grep numad |grep -v grep
root 13741 1 0 Jun05 ? 10:15:32 /usr/bin/numad -K1 -i 15
```
> K 옵션의 경우 기본 값은 0인데, 1로 설정할 경우 Interleaved된 메모리를 유지하는 설정이다. 즉, `Application에 Interleaved 메모리를 분산된 상태로 유지하기 위한 옵션` 이다(man numad 명령).
* Automatic NUMA Balancing의 경우 해제된 상태 이다.
```bash
# sysctl -a |grep kernel.numa_balancing
kernel.numa_balancing = 0
kernel.numa_balancing_scan_delay_ms = 1000
kernel.numa_balancing_scan_period_max_ms = 60000
kernel.numa_balancing_scan_period_min_ms = 1000
kernel.numa_balancing_scan_size_mb = 256
kernel.numa_balancing_settle_count = 4
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.enp216s0f0.stable_secret"
sysctl: reading key "net.ipv6.conf.enp216s0f1.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
```
# 튜닝 수행 결과
* [ **numastat 명령 결과** ]
```bash
# numastat
node0 node1
numa_hit 6202902202 6131238910
numa_miss 41512969 22325238
numa_foreign 22325238 41512969
interleave_hit 6102825844 6090896613
local_node 1845654244 4392163282
other_node 4398760927 1761400866
```
> 노드별 메모리가 거의 균등하게 할당되고 있다.
* [ InfluxDB 메모리 할당 결과 ]
```bash
# numastat -p influxdb
Per-node process memory usage (in MBs) for PID 9893 (influxd)
Node 0 Node 1 Total
--------------- --------------- ---------------
Huge 0.00 0.00 0.00
Heap 0.00 0.00 0.00
Stack 0.01 0.00 0.02
Private 36515.94 36122.12 72638.06
---------------- --------------- --------------- ---------------
Total 36515.95 36122.12 72638.08
```
> Application 프로세스의 메모리 할당도 거의 균등하게 할당되고 있다.
* [ **노드별 메모리 현황** ]
```bash
# numastat -m
Per-node system memory usage (in MBs):
Node 0 Node 1 Total
--------------- --------------- ---------------
MemTotal 63901.10 64500.59 128401.69
MemFree 14322.89 13495.20 27818.09
MemUsed 49578.21 51005.39 100583.60
Active 17766.52 21687.01 39453.52
Inactive 28945.37 25842.24 54787.61
Active(anon) 2783.99 2793.37 5577.36
Inactive(anon) 4995.22 4856.91 9852.13
Active(file) 14982.52 18893.64 33876.16
Inactive(file) 23950.15 20985.34 44935.48
Unevictable 0.00 0.00 0.00
Mlocked 0.00 0.00 0.00
Dirty 147.17 147.18 294.36
Writeback 0.00 0.00 0.00
FilePages 38942.92 39889.27 78832.19
Mapped 28141.79 27916.30 56058.09
AnonPages 7770.86 7641.40 15412.27
Shmem 8.36 8.88 17.24
KernelStack 5.88 4.22 10.09
PageTables 109.07 107.90 216.97
NFS_Unstable 0.00 0.00 0.00
Bounce 0.00 0.00 0.00
WritebackTmp 0.00 0.00 0.00
Slab 869.02 1501.04 2370.06
SReclaimable 816.19 1437.17 2253.36
SUnreclaim 52.83 63.87 116.70
AnonHugePages 0.00 0.00 0.00
HugePages_Total 0.00 0.00 0.00
HugePages_Free 0.00 0.00 0.00
HugePages_Surp 0.00 0.00 0.00
```
* [ **CPU 사용률 개선 결과 그래프** ]
![numa_after_cpu](./numa_cpu_20220607.png)
> 평시 Peak 사용률이 완만해진 것을 확인할 수 있다.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment