...
bsrmon 은 복제를 수행하는 bsr 엔진의 전체 복제 과정을 추적하고 엔진의 로직 구간별 소요 시간을 실시간 기록하여 엔진 동작의 병목을 파악할 수 있는 성능 모니터링 도구 입니다. bsr 커널 엔진은 내부 시간(jiffies) 기록을 통해 엔진이 동작했던 시점의 구간 별 시간 기록과 누적 계산치 등 성능 관련 통계정보를 파일 로그 형태로 유지합니다. 관리자는 이러한 이 커널 엔진의 통계 정보를 bsrmon 유틸리티로 조회하여 모니터링 할 수 있습니다. bsrmon 은 1.6.1 버전 부터 지원합니다지원하며 기본 활성화 되어 있습니다.
Info |
---|
linux 환경에서는 debugfs 기능이 활성화 된 커널에서만 성능모니터 기능을 사용할 수 있으며, debugfs 가 /sys/kernel/debug 경로에 마운트되어 있어야 합니다. debugfs 기능 활성화는 다음 명령을 사용하여 확인할 수 있습니다. Code Block |
---|
# grep CONFIG_DEBUG_FS /boot/config-`uname -r`
CONFIG_DEBUG_FS=y |
debugfs는 CentOS7 버전부터 자동 마운트되며, CentOS6 버전대에서는 자동 마운트되지 않기 때문에 /sys/kernel/debug 경로에 마운트 이후 성능모니터 기능을 사용할 수 있습니다. 시스템 재부팅 이후에서도 성능 모니터 기능을 사용하고자 한다면 fstab에 해당 마운트 경로를 등록해주어야 합니다. Code Block |
---|
# mkdir /sys/kernel/debug
# mount -t debugfs debugfs /sys/kernel/debug |
|
...
Expand |
---|
|
Code Block |
---|
> bsrmon /watch ioclat r0 0
2020-12-08_09:33:19.171
local clat (usec): min=520, max=112000, avg=10347
master clat (usec): min=610, max=256852, avg=28202
2020-12-08_09:33:20.351
local clat (usec): min=780, max=478387, avg=44316
master clat (usec): min=1499, max=492829, avg=114106
2020-12-08_09:33:21.509
local clat (usec): min=478, max=19805, avg=4523
master clat (usec): min=577, max=24335, avg=6303
... |
| → write I/O 가 지속적으로 발생하고 있는 상황 → local/master I/O가 완료되기 까지 소요된 시간의 최소, 최대, 평균값 출력 |
Code Block |
---|
> bsrmon /report ioclat r0 0
Report r0 [IO COMPLETE - vnr0]
Run: 2020-12-07_02:42:31.440 - 2020-12-08_09:37:44.115
local clat (usec): min=153, max=1635570, avg=8601, samples=50
master clat (usec): min=217, max=1667260, avg=21801, samples=50 |
| → 2020-12-07_02:42:31.440 - 2020-12-08_09:37:44.115 기간 동안 집계된 데이터 → 50개의 local clat samples. 평균 8601, 최소 153, 최대 1635570 usec 이 소요된 것으로 측정됨 → 50개의 master clat samples. 평균 21801, 최소 217, 최대 1667260 usec 이 소요된 것으로 측정됨217, 최대 1667260 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
Expand |
---|
|
Code Block |
---|
> bsrmon /watch io_pending r0 0
2023-03-20_11:47:20.577
upper_pending : 32
pending_latency (usec): 3506
lower_pending : 48
al_suspended : 0
al_pending_changes: 0
al_wait_req : 0
upper_blocked : 0
suspended : 0
suspend_cnt : 0
unstable : 0
pending_bitmap_work: 0
... |
| → 완료 대기중인 IO 는 32개 → 현재 IO가 완료되기까지 3505usec 의 지연 발생 → upper_blocked 는 0 으로 IO block 상태가 아님 → 정상적으로 복제가 진행되고 있는 상황으로 간주할 수 있음 |
Code Block |
---|
> bsrmon /report io_pending r0 0 /d 2023-03-20
Report r0 [IO_PENDING - vnr0]
file C:\Program Files\bsr\log\perfmon\r0\vnr0_IO_PENDING
Run: 2023-03-20_00:00:00.359 - 2023-03-20_12:01:34.528
upper_pending : max=33
pending_latency (usec): min=96, max=1000521, avg=7380, samples=27211
lower_pending : max=412
al_suspended : total=0
al_pending_changes: max=1
al_wait_req : max=4
upper_blocked : total=58
suspended : total=0
suspend_cnt : total=0
unstable : total=0
pending_bitmap_work: total=58 |
| → 최대 pending IO 수는 33 → IO가 완료되기 까지 최대 약 1초의 지연 발생 → bitmap work로 인해 IO block이 58 회 발생하였음 |
|
reqstat {resource} {vnr}
request 생성 시점을 기준으로 특정 구간까지 소요된 시간에 대한 집계 데이터 (usec)
...
Expand |
---|
|
Code Block |
---|
> bsrmon /watch reqstat r0 0
2020-12-08_09:42:18.549
requests : 445
before_queue (usec): min=0, max=19, avg=0
before_al_begin (usec): min=0, max=4907, avg=11
in_actlog (usec): min=1, max=7191, avg=35
submit (usec): min=3, max=7215, avg=46
bio_endio (usec): min=4, max=7219, avg=50
destroy (usec): min=577, max=214980, avg=15711
al_uptate : 0
before_bm_write (usec): min=0, max=0, avg=0
after_bm_write (usec): min=0, max=0, avg=0
after_sync_page (usec): min=0, max=0, avg=0
PEER bsr03:
pre_send (usec): min=0, max=0, avg=0
acked (usec): min=0, max=0, avg=0
net_done (usec): min=0, max=0, avg=0
PEER 100.100.10.31:7792:
pre_send (usec): min=571, max=214862, avg=15703
acked (usec): min=555, max=210004, avg=7966
net_done (usec): min=575, max=214978, avg=15710
... |
| → write I/O 가 지속적으로 발생하고 있는 상황 → peer bsr03 과는 연결 단절 → al update는 수행되지 않음 |
Code Block |
---|
> bsrmon /report reqstat r0 0
Report r0 [REQUEST STAT - vnr0]
Run: 2020-12-06_05:46:36.678 - 2020-12-08_09:45:46.219
requests : total=38180
before_queue (usec): min=0, max=0, avg=0, samples=0
before_al_begin (usec): min=6966, max=460112, avg=4264, samples=2
in_actlog (usec): min=1, max=589946, avg=549, samples=28
submit (usec): min=2, max=721793, avg=349, samples=72
bio_endio (usec): min=3, max=589987, avg=579, samples=28
destroy (usec): min=83, max=2362749, avg=46380, samples=161
al_uptate : total=0
before_bm_write (usec): min=0, max=0, avg=0, samples=0
after_bm_write (usec): min=0, max=0, avg=0, samples=0
after_sync_page (usec): min=0, max=0, avg=0, samples=0
PEER 100.100.10.31:7792:
pre_send (usec): min=7, max=1667187, avg=22364, samples=161
acked (usec): min=11, max=1635581, avg=15737, samples=161
net_done (usec): min=82, max=2362749, avg=39406, samples=161
PEER bsr03:
pre_send (usec): min=0, max=0, avg=0, samples=0
acked (usec): min=0, max=0, avg=0, samples=0
net_done (usec): min=0, max=0, avg=0, samples=0 |
| → 2020-12-06_05:46:36.678 - 2020-12-08_09:45:46.219 기간동안 38180 개의 requests가 처리되었음 → al_update는 한번도 발생하지 않음 |
|
peer_reqstat {resource} {vnr}
...
Expand |
---|
|
Code Block |
---|
> bsrmon /watch resync_ratio r0 0
2022-04-12_15:34:52.206
svr06
replcation(144100kb)/resync(18508kb), resync ratio 11% |
| → 연결되어있는 svr06 노드에 초당 복제 데이터가 144100kb, 동기화 데이터가 18508kb 전송되었으며 이에 대한 동기화 전송 비율은 11%입니다. |
|
명령어
...
18508kb 전송되었으며 이에 대한 동기화 전송 비율은 11%입니다. |
|
명령어
bsrmon에서 제공하는 명령어 입니다.
/get
{all, period, file_size, file_cnt}
모니터링 주기, 저장할 파일 크기, 백업할 파일 개수를 조회하는 명령입니다.
Code Block |
---|
# bsrmon /get all
period : 1 sec
file_size : 50 MB
file_cnt : 3 |
/set
{period, file_size, file_cnt} {value}
모니터링 주기, 저장할 파일 크기, 백업할 파일 개수를 지정하는 명령입니다.
period 로 파일 저장과 모니터링 주기를 설정합니다. 초 단위로 설정하며 기본 값은 1초 입니다.
file_size 로 백업할 파일의 크기를 설정합니다. MB 단위로 설정하며 기본 값은 50MB 입니다.
file_cnt 로 백업할 파일 수를 설정합니다. 기본 값은 3개 입니다.
/start
성능 모니터 기능을 활성화 하고 성능 데이터 집계 및 파일 로깅을 시작합니다. 기본적으로 성능 모니터는 활성화 되어 있습니다.
...
Expand |
---|
|
bsrmon /report iostat r0 0 /d 2022-11-01 bsrmon /report iostat r0 0 /s 2022-11-01 /e 2022-11-10 bsrmon /report iostat r0 0 /s 2022-11-01_09:00 /e 2022-11-10_20:00 bsrmon /report iostat r0 0 /s 09:00 /e 20:00
|
/set
{period, file_size, file_cnt} {value}
모니터링과 관련된 수치를 조정하는 명령입니다.
파일 저장과 모니터링 주기를 설정합니다. 초 단위로 설정하며 기본 값은 1초 입니다.
파일 롤링 크기를 설정합니다. MB 단위로 설정하며 기본 값은 50MB 입니다.
파일 롤링 수를 설정합니다. 기본 값은 3개 입니다.
/get
{all, period, file_size, file_cnt}
모니터링과 관련된 수치를 조회하는 명령입니다.
/io_delay_test
{flag} {delay point} {delay time}
...