성능 모니터
개요
bsrmon 은 복제를 수행하는 bsr 엔진의 전체 복제 과정을 추적하고 엔진의 로직 구간별 소요 시간을 실시간 기록하여 엔진 동작의 병목을 파악할 수 있는 성능 모니터링 도구 입니다. bsr 커널 엔진은 내부 시간(jiffies) 기록을 통해 엔진이 동작했던 시점의 구간 별 시간 기록과 누적 계산치 등 성능 관련 통계정보를 파일 로그 형태로 유지합니다. 관리자는 이 커널 엔진의 통계 정보를 bsrmon 유틸리티로 조회하여 모니터링 할 수 있습니다. bsrmon 은 1.6.1 버전 부터 지원하며 기본 활성화 되어 있습니다.
linux 환경에서는 debugfs 기능이 활성화 된 커널에서만 성능모니터 기능을 사용할 수 있으며, debugfs 가 /sys/kernel/debug 경로에 마운트되어 있어야 합니다.
debugfs 기능 활성화는 다음 명령을 사용하여 확인할 수 있습니다.
# grep CONFIG_DEBUG_FS /boot/config-`uname -r` CONFIG_DEBUG_FS=y
debugfs는 CentOS7 버전부터 자동 마운트되며, CentOS6 버전대에서는 자동 마운트되지 않기 때문에 /sys/kernel/debug 경로에 마운트 이후 성능모니터 기능을 사용할 수 있습니다. 시스템 재부팅 이후에서도 성능 모니터 기능을 사용하고자 한다면 fstab에 해당 마운트 경로를 등록해주어야 합니다.
# mkdir /sys/kernel/debug # mount -t debugfs debugfs /sys/kernel/debug
유형
성능 측정의 대상 유형 입니다. bsrmon 의 types 인자에 해당합니다.
iostat, ioclat, reqstat, peer_reqstat, alstat, network, sendbuf, memstat
iostat {resource} {vnr}
복제 볼륨의 읽기, 쓰기 I/O 에 대한 집계 데이터 (io count, kbs, kb)
ioclat {resource} {vnr}
local/master I/O 의 complete latency (usec)
io_pending {resource} {vnr}
I/O 완료 지연에 대한 집계 데이터
uppper_pending : Application IO 완료 대기중인 수
pending_latency : IO 완료 지연에 대한 latency
lower_pending : 장치로 요청한 Block IO 완료를 대기하는 수
al_suspended : device 의 AL_SUSPENDED flag 확인
al_pending_changes : 커밋 대기중인 al 수
al_wait_req : al 획득을 대기중인 request 수
upper_blocked : IO 처리가 block 된 상태인지 확인
suspended
suspend_cnt
unstable
pending_bitmap_work
reqstat {resource} {vnr}
request 생성 시점을 기준으로 특정 구간까지 소요된 시간에 대한 집계 데이터 (usec)
requests : 모니터링 기간(주기) 동안 처리된 request 갯수
before_queue : submit work queue에 큐잉되기 이전까지 소요된 시간
before_al_begin : act_log 의 lru를 얻기 전 까지 소요된 시간
in_actlog : RQ_IN_ACT_LOG 가 설정 되기까지 소요된 시간
submit : request submit 이 실행 되기까지 소요된 시간
bio_endio : bio 완료 로직이 실행 되기까지 소요된 시간
pre_send : peer로 data send 전까지 소요된 시간
acked : send 후 RQ_NET_PENDING이 제거 되기까지 소요된 시간
net_done : RQ_NET_DONE 까지 소요된 시간
destroy : request 가 해제 되기까지 소요된 시간
al uptate 가 완료 되기까지 각 구간 별 소요 시간 (usec)
al_update : 모니터링 기간(주기) 동안 update 된 active log 갯수
before_bm_write : bsr_bm_write_hinted() 실행 전
after_bm_write : bsr_bm_write_hinted() 실행 후
after_sync_page : bsr_md_sync_page_io() 실행 후
peer_reqstat {resource} {vnr}
peer request 생성 시점을 기준으로 특정 구간까지 소요된 시간에 대한 집계 데이터 (usec)
peer_requests : 모니터링 기간(주기) 동안 처리된 peer requests 갯수
submit : peer request submit 이 실행 되기까지 소요된 시간
bio_endio : peer request 의 bio 완료 로직이 실행 되기까지 소요된 시간
destroy : peer request가 해제 되기까지 소요된 시간
alstat {resource} {vnr}
active log 의 사용 수치에 대한 집계 데이터
used 값, used 값의 최대값 집계
hits, misses, starving, locked, changed 증가 값 집계
al_wait retry 횟수 집계
al 부족 발생 원인 집계
starving, pending, used, busy, wouldblock
network {resource}
복제 네트워크 송수신 속도 (byte/s)
sendbuf {resource}
송신버퍼 사용량 (bytes)
memstat
유저 및 모듈에서 사용하는 메모리 사용량
유저 공간에서는 bsradm, bsrsetup, bsrcon, bsrmon, bsrservice 프로세스가 사용하는 메모리가 집계됩니다.
windows
GetProcessMemoryInfo()를 통해 획득한 메모리 정보
WorkingSetSize, QuotaPagedPoolUsage, QuotaNonPagedPoolUsage, PagefileUsage
linux
ps 명령을 통해 획득한 메모리 정보
rsz : 물리 메모리 사용량
vsz : 가상 메모리 사용량
커널 모듈에서 사용하는 메모리는 os 별로 다음과 같은 정보가 집계됩니다.
windows
드라이버에서 'BS--' tag로 할당된 nonpaged, paged 메모리 사용량
linux
slab cache 정보
/sys/kernel/slab/bsr_req
/sys/kernel/slab/bsr_al
/sys/kernel/slab/bsr_bm
/sys/kernel/slab/bsr_ee
resync_ratio {resource} {vnr}
실시간 복제, 동기화 전송량과 이에 대한 동기화 전송 비율
동기화가 진행 중일때 소스 노드에서만 갱신됩니다.
명령어
bsrmon에서 제공하는 명령어 입니다.
/get
{all, period, file_size, file_cnt}
모니터링 주기, 저장할 파일 크기, 백업할 파일 개수를 조회하는 명령입니다.
/set
{period, file_size, file_cnt} {value}
모니터링 주기, 저장할 파일 크기, 백업할 파일 개수를 지정하는 명령입니다.
period 로 파일 저장과 모니터링 주기를 설정합니다. 초 단위로 설정하며 기본 값은 1초 입니다.
file_size 로 백업할 파일의 크기를 설정합니다. MB 단위로 설정하며 기본 값은 50MB 입니다.
file_cnt 로 백업할 파일 수를 설정합니다. 기본 값은 3개 입니다.
/start
성능 모니터 기능을 활성화 하고 성능 데이터 집계 및 파일 로깅을 시작합니다. 기본적으로 성능 모니터는 활성화 되어 있습니다.
성능모니터의 활성화는 다음의 과정을 통해 수행됩니다.
windows
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\bsr\bsrmon_run 레지스트리 값 1로 설정
bsr 엔진의 성능데이터 집계 로직 활성화
bsrservice의 bsrmon /file 실행 로직 활성화
linux
/etc/bsr.d/.bsrmon_run 값을 1로 설정
bsr 엔진의 성능데이터 집계 로직 활성화
/lib/bsr/bsrmon-run 스크립트 실행. bsrmon /file 명령 주기적으로 실행
/stop
성능 모니터를 비활성화 합니다. 비활성화 시 엔진의 성능 데이터 집계 및 파일 로깅이 중단됩니다.
비활성화는 다음의 과정으로 수행합니다.
windows
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\bsr\bsrmon_run 레지스트리 값 0으로 설정
bsr 엔진의 성능데이터 집계 로직 비활성화
bsrservice의 bsrmon /file 실행 로직 비활성화
linux
/etc/bsr.d/.bsrmon_run 값 0으로 설정
bsr 엔진의 성능데이터 집계 로직 비활성화
/lib/bsr/bsrmon-run 스크립트 종료
/status
성능 모니터의 동작 상태를 조회합니다.
/file
성능 데이터와 memory 정보를 파일로 저장합니다. 이것은 숨겨진 명령이며 bsrservice 와 bsrmon-run 스크립트에서 사용합니다.
파일 저장 위치는 다음과 같습니다.
windows : C:\Program Files\bsr\log\perfmon
linux : /var/log/bsr/perfmon/
데이터는 조회 시간과 각 항목별 수치만 저장되며, /show, /watch 또는 /report 명령 실행시 데이터 파싱 후 포멧에 맞춰 출력합니다.
/show
[/t {types[,...]|all}] [/r {resource[,...]|all}] [/j|/json] [/c|/continue]
전체 리소스에 대한 모든 항목의 성능 데이터를 한번에 출력합니다. 출력 대상은 성능 파일에 마지막으로 기록된 데이터입니다.
[/t {types[,...]|all}] [/r {resource[,...]|all}]
특정 성능 항목 및 리소스를 지정하여 출력할 수 있는 옵션을 제공합니다. 성능 항목 및 리소스 명은 ','로 구분하며 공백 없이 입력합니다.
[/j|/json]
json 형식으로 데이터를 출력합니다.
[/c|/continue]
성능 데이터를 주기적으로 출력합니다. 출력 주기는 bsrmon에 설정된 period 값을 따릅니다.
사용 예
모든 리소스의 모든 항목 출력
모든 리소스의 특정 항목 출력
특정 리소스의 특정 항목 출력
/watch
{types} [/scroll]
types 별로 집계되고 있는 데이터를 실시간으로 출력합니다. /scroll 옵션 사용시 출력을 줄넘김 방식으로 표기합니다.
/report
{types} [/f {filename}] [/p {peer_name[,...]}] [/d {YYYY-MM-DD}] [/s {timestamp}] [/e {timestamp}]
types 별로 파일에 기록된 데이터(백업된 파일의 데이터 포함)의 통계를 출력합니다.
[/f {filename}]
리포팅 대상 파일 명을 입력합니다. 특정 파일의 통계 산출을 위해 사용됩니다.
[/p {peer_name[,...]}]
리포팅 대상 peer 의 이름을 입력합니다. 특정 peer의 통계 산출을 위해 사용합니다. 다중 peer 입력은 공백 없이 콤마(,)로 구분합니다. 미 입력시 서버에 구성된 리소스의 peer를 대상으로 통계를 출력합니다.
[/d {YYYY-MM-DD}] [/s {YYYY-MM-DD|hh:mm[:ss]|YYYY-MM-DD_hh:mm[:ss]}] [/e {YYYY-MM-DD|hh:mm[:ss]|YYYY-MM-DD_hh:mm[:ss]}]
특정 기간의 수치를 조회할 수 있는 옵션입니다. /d 옵션으로 해당 날짜에 기록된 데이터의 통계를 출력합니다. /s 는 조회 시작 날짜 및 시간을 지정합니다. /e 로 조회 종료 날짜 및 시간을 지정합니다. /s, /e 옵션 입력시 날짜와 시간은 언더바(_)로 구분합니다.
/io_delay_test
{flag} {delay point} {delay time}
I/O 성능 저하를 의도적으로 발생시켜 bsr 성능 모니터의 기능을 검증합니다. 개발자용 기능 입니다.
/debug cmds options
debugfs 정보를 조회하기 위한 windows 용 명령어입니다.