Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents
minLevel1
maxLevel3

개요

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 

기능

bsrmon이 제공하는 기능은 다음과 같습니다.

/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 명령 실행시 데이터 파싱 후 포멧에 맞춰 출력합니다.

Code Block
2021-07-20_05:55:21.443 955 955 244480 244480 1042 1042 266752 266752

/show [/t {types[,...]|all}] [/r {resource[,...]|all}] [/j|/json] [/c|/continue]

전체 리소스에 대한 모든 항목의 성능 데이터를 한번에 출력합니다.

  • 출력 대상은 성능 파일에 마지막으로 기록된 데이터입니다.

[/t {types[,...]|all}] [/r {resource[,...]|all}]

특정 성능 항목 및 리소스를 지정하여 출력할 수 있는 옵션을 제공합니다.

  • 성능 항목 및 리소스 명은 ','로 구분하며 공백 없이 입력합니다.

[/j|/json]

json 형식으로 데이터를 출력합니다.

[/c|/continue]

성능 데이터를 주기적으로 출력합니다.

  • 출력 주기는 bsrmon에 설정된 period 값을 따릅니다.

사용 예

  • 모든 리소스의 모든 항목 출력

...

titlebsrmon /show
  • memory, resource 별로 timestamp 가 출력됩니다.

  • iostat, ioclat, reqstat, peer_reqstat, al_stat, resync_ratio 는 vnr 로 구분하여 출력됩니다.

  • memory 성능 데이터는 os(windows/linux)에 따라 출력되는 항목이 다릅니다.

...

...

유형

성능 모니터링 대상 유형입니다. bsrmon 의 types 인자에 해당합니다.

iostat, ioclat, reqstat, peer_reqstat, alstat, network, sendbuf, memstat

iostat {resource} {vnr}

복제 볼륨의 읽기, 쓰기 I/O 에 대한 집계 데이터 (io count, kbs, kb)

Expand
title사용 예
  • I/O 성능 데이터 실시간 모니터링

Code Block
> bsrmon /watch iostat r0 0
2020-12-06_08:22:36.223
  read : IO count=0, BW=0kb/s (0KB)
  write: IO count=216, BW=110208kb/s (220416KB)
2020-12-06_08:22:37.640
  read : IO count=0, BW=0kb/s (0KB)
  write: IO count=34, BW=16896kb/s (16896KB)
2020-12-06_08:22:39.32
  read : IO count=0, BW=0kb/s (0KB)
  write: IO count=326, BW=155176kb/s (155176KB)
2020-12-06_08:22:40.106
  read : IO count=0, BW=0kb/s (0KB)
  write: IO count=330, BW=164624kb/s (164624KB)
  ...

→ write I/O 가 지속적으로 발생하고 있는 상황

  • I/O 성능 데이터의 통계 출력

Code Block
> bsrmon /report iostat r0 0
Report r0 [IO STAT - vnr0]
 Run: 2021-07-20_08:14:27.405 - 2021-08-04_18:59:53.573
  read : io count=24855, bw=6325194kbyte
    BW (kbyte/s): min=40, max=284928, avg=248578, samples=24
  write: io count=8360345, bw=2139182512kbyte
    BW (kbyte/s): min=12, max=401408, avg=320256, samples=6671

→ 2021-07-20_08:14:27.405 - 2021-08-04_18:59:53.573 기간 동안 집계된 데이터

→ 24개의 read I/O samples. 평균 248, 최소 40, 최대 284 Mbytes/s 의 IO 가 처리됨

→ 6670개의 write I/O samples. 평균 320, 최소 12, 최대 401 Mbytes/s 의 IO 가 처리됨

  • 백업 파일을 사용하여 통계 계산

Code Block
> bsrmon /report iostat r0 0 /f vnr0_IO_STAT_2021-07-20_081427.005 
Report r0 [vnr0_IO_STAT_2021-07-20_081427.005]
 Run: 2021-07-07_21:24:24.383 - 2021-07-20_08:14:26.371
  read : ios=6332219, bw=1595360917kbyte
    IOPS        : min=1, max=1233, avg=980, samples=6452
    BW (kbyte/s): min=4, max=428032, avg=247033, samples=6452
  write: ios=22550577, bw=3961426883kbyte
    IOPS        : min=1, max=6478, avg=786, samples=28468
    BW (kbyte/s): min=4, max=1085440, avg=138461, samples=28484

→ vnr0_IO_STAT_2021-07-20_081427.005 파일로 부터 데이터 추출

→ 2021-07-07_21:24:24.383 - 2021-07-20_08:14:26.371 기간 동안 집계된 데이터

→ 6452 개의 read I/O samples. 평균 980 iops, 최소 1 iops, 최대 1233 iops 로 측정됨

→ 28468 개의 write I/O samples. 평균 786iops, 최소 1 iops, 최대 6478 iops 로 측정됨

ioclat {resource} {vnr}

local/master I/O 의 complete latency (usec)

Expand
title사용 예
  • I/O complete latency 실시간 모니터링

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가 완료되기 까지 소요된 시간의 최소, 최대, 평균값 출력

  • I/O complete latency 통계 출력

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 이 소요된 것으로 측정됨

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() 실행 후

Expand
title사용 예
  • request 성능 데이터 실시간 모니터링

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는 수행되지 않음

  • request 성능 데이터 통계 출력

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}

peer request 생성 시점을 기준으로 특정 구간까지 소요된 시간에 대한 집계 데이터 (usec)

  • peer_requests : 모니터링 기간(주기) 동안 처리된 peer requests 갯수

  • submit : peer request submit 이 실행 되기까지 소요된 시간

  • bio_endio : peer request 의 bio 완료 로직이 실행 되기까지 소요된 시간

  • destroy : peer request가 해제 되기까지 소요된 시간

Expand
title사용 예
  • peer request 성능 데이터 실시간 모니터링

Code Block
> bsrmon /watch peer_reqstat r0 0 
2021-07-19_21:52:02.191
  PEER bsr-03:
    peer requests : 0
    submit    (usec): min=0, max=0, avg=0
    bio_endio (usec): min=0, max=0, avg=0
    destroy   (usec): min=0, max=0, avg=0
  PEER bsr-02:
    peer requests : 100
    submit    (usec): min=421, max=6907, avg=2184
    bio_endio (usec): min=1021, max=7312, avg=2563
    destroy   (usec): min=1739, max=7955, avg=3244

→ peer bsr-02 에 대한 100개의 peer request가 처리됨

→ peer bsr-03 에 대한 peer request 는 발생하지 않음

  • peer request 성능 통계 출력

Code Block
> bsrmon /report peer_reqstat r0 0
Report r0 [PEER REQUEST STAT - vnr0]
 Run: 2021-07-11_22:23:08.890 - 2021-07-19_21:56:18.179
  PEER bsr-02:
    peer requests : total=344054
    submit    (usec): min=1, max=36103, avg=99, samples=6902
    bio_endio (usec): min=1, max=116988, avg=96161, samples=9517
    destroy   (usec): min=47, max=117495, avg=96340, samples=9518
  PEER bsr-03:
    peer requests : total=133288
    submit    (usec): min=1, max=1670, avg=5, samples=6037
    bio_endio (usec): min=1, max=117000, avg=104660, samples=8708
    destroy   (usec): min=63, max=125871, avg=104839, samples=8709

→ 2021-07-11_22:23:08.890 - 2021-07-19_21:56:18.179 기간동안 집계된 데이터

→ bio 완료 로직이 실행 되기까지 평균 0.1초 가량 소요되었음

alstat {resource} {vnr}

active log 의 사용 수치에 대한 집계 데이터

  • used 값, used 값의 최대값 집계

  • hits, misses, starving, locked, changed 증가 값 집계

  • al_wait retry 횟수 집계

  • al 부족 발생 원인 집계

    • starving, pending, used, busy, wouldblock

Expand
title사용 예
  • active log 성능 데이터 실시간 모니터링

Code Block
> bsrmon /watch alstat r0 0
2021-08-04_19:10:11.463
  used    :          3/67 (max=8)
  hits    :        579 (total=2843)
  misses  :       2250 (total=17564)
  starving:          0 (total=0)
  locked  :          0 (total=0)
  changed :        749 (total=5854)
  al_wait retry :          0 (total=0, max=0)
  pending_changes :  1/64
  error   : 0
    NOBUFS - starving : 0
           - pending slot : 0
          
submit_max
 - 
0;
used 
#
slot 
usec
: 0
    BUSY : 0
    WOULDBLOCK : 0
  flags   
submit_avg 0; # usec bio_endio_min 0; # usec bio_endio_max 0; # usec bio_endio_avg 0; # usec destroy_min 0; # usec
: __LC_DIRTY __LC_LOCKED 

→ 해당 시점에 사용중인 al slot 은 3개

→ pending 되어있는 al slot은 1개

→ dirty, locked flag가 설정되어 있음

  • active log 성능 통계 출력

Code Block
> bsrmon /report alstat r0 0
Report r0 [AL STAT - vnr0]
 Run: 2021-08-03_04:48:33.721 - 2021-08-03_22:47:28.326
  al_extents : 6001
    used     : max=0(all_slot_used=0), avg=0
    hits     : total=0
    misses   : total=0
    starving : total=0
    locked   : total=0
    changed  : total=0
    al_wait retry count : max=0, total=0
    pending_changes     : max=0, total=0
    error : total=0
      NOBUFS - starving     : total=0
             - 
destroy_max 0; # usec
pending slot : total=0
             - used    slot 
destroy_avg 0; # usec
: total=0
      BUSY       : total=0
   
}
   WOULDBLOCK : total=0
 -> al_extents changed 
 Run: 2021-08-03_22:47:52.895 - 2021-08-04_19:27:06.522
  al_
update
extents 
{
: 67
    used     
: max=67(all_slot_used=59), avg=3
    hits 
count
    : total=337528
 
0;
   misses   : total=2020409
    starving : total=2
    locked   
before_bm_write_min 0; # usec
: total=0
    changed  : total=673370
    al_wait retry count : max=2, total=501
    
before_bm_write_max 0; # usec
pending_changes     : max=64, total=258
    error : total=1004
      NOBUFS - starving 
before_bm_write_avg
 
0;
 
#
 
usec
 : total=501
             - pending slot 
after_bm_write_min 0; # usec
: total=0
             - used    slot : total=503
 
after_bm_write_max
  
0;
 
#
 
usec
 BUSY       : total=0
      WOULDBLOCK 
after_bm_write_avg 0; # usec
: total=0

→ 2021-08-03_22:47:52.895 에 al_extents 값이 6001 에서 67 로 변경됨

→ al이 67 개로 설정된 경우, 모든 al slot 을 사용한 횟수 59회, starving 상황 2회, al_wait retry 501 회 발생

network {resource}

복제 네트워크 송수신 속도 (byte/s)

Expand
title사용 예
  • network 성능 데이터 실시간 모니터링

Code Block
> bsrmon /watch network r0
2020-12-08_09:47:45.84
  PEER 100.100.10.31:7792:
    send (byte/s): 62932184
    recv (byte/s): 4820
  
after_sync_page_min 0; # usec
PEER bsr03:
    send (byte/s): 0
    
after_sync_page_max 0; # usec after_sync_page_avg 0; # usec
recv (byte/s): 0
2020-12-08_09:47:46.160
  PEER 100.100.10.31:7792:
    send (byte/s): 104896568
    recv (byte/s): 12320
 
}
 PEER bsr03:
    send (byte/s): 0
    recv (byte/s): 0
peer cent79_03 { pre_send_min
...

→ peer bsr03 과는 연결 단절된 상태

→ peer 100.100.10.31:7792 로 데이터 전송이 진행되고 있는 중

  • network 성능 통계 출력

Code Block
> bsrmon /report network r0
Report r0 [NETWORK SPEED]
 Run: 2020-11-30_06:38:44.653 - 2020-12-08_09:53:31.455
  PEER 100.100.10.31:7792: send=52497905byte/s, receive=5902byte/s
    send 
0; # usec
(byte/s): min=3, max=115395016, avg=52497905, samples=392
    recv (byte/s): min=3, max=15004, avg=5902, samples=367
  PEER bsr03: send=0byte/s, receive=0byte/s
   
pre_
 send
_max
 (byte/s): min=0, max=0, avg=0, samples=0
  
0;
 
#
 
usec
recv (byte/s): min=0, max=0, avg=0, samples=0

→ 평균적으로 52.4 MB 의 데이터가 peer 100.100.10.31 노드로 전송되고 있음

sendbuf {resource}

송신버퍼 사용량 (bytes)

Expand
title사용 예
  • 송신버퍼 성능 데이터 실시간 모니터링

Code Block
> bsrmon /watch sendbuf r0
2020-12-08_09:54:13.735
  PEER 100.100.10.31:7792:
    highwater: 
pre_send_avg
11246, fill: 37094400bytes
      
0;
 
# usec
 ap_in_flight: 8881 (9094144bytes)
        rs_in_flight: 2365 (28000256bytes)
    data stream
 
acked_min
   
0;
 
#
 
usec
  size (bytes): 10485760000
        used (bytes): 27098576
     
acked_max
   
0; # usec
 [P_DATA]  -  cnt: 7542  size: 8024616bytes
         [P_RS_DATA_REPLY]  -  
acked_avg
cnt: 1596  
0;
size: 
#
18942304bytes
usec
         [P_BARRIER]  -  cnt: 549  size: 13176bytes
   
net_done_min
      [P_UNPLUG_REMOTE]  
0;
- 
#
 
usec
cnt: 7406  size: 118496bytes
    control stream
        size 
net_done_max
(bytes): 5242880
       
0;
 
# usec
used (bytes): 0
  PEER bsr03:
    highwater: 0, fill: 0bytes
       
net
 ap_
done
in_
avg 0; # usec
flight: 0 (0bytes)
        
} } peer_reqstat {
rs_in_flight: 0 (0bytes)
    data stream
        size 
peer cent79_03 {
(bytes): 10485761
        used (bytes): 0
    control stream
    
count
    size 
0;
(bytes): 5242881
        
submit_min 0; # usec submit_max 0; # usec submit_avg 0; # usec bio_endio_min 0; # usec bio_endio_max 0; # usec bio_endio_avg 0; # usec destroy_min 0; # usec
used (bytes): 0
...

→ peer 100.100.10.31:7792, bsr03 에 송신버퍼가 할당되어 있음

→ peer bsr03 과는 연결 단절된 상태

→ peer 100.100.10.31:7792 로 데이터 전송이 진행되고 있는 중

→ peer 100.100.10.31:7792 에 계류중인 복제 및 동기화 데이터 갯수는 11246 개 (복제 데이터 8881개, 동기화 데이터 2365개)

  • 송신버퍼 성능 통계 출력

Code Block
> bsrmon /report sendbuf r0
Report r0 [SEND BUFFER]
 Run: 2020-12-05_13:26:59.969 - 2020-12-08_09:56:33.718
  PEER 100.100.10.31:7792: data stream size=10485761byte, control stream size=5242881byte
    data-used (bytes): min=2097232, max=7603084, avg=4787174, samples=5
    cntl-used (bytes): min=0, max=0, avg=0, samples=0
    highwater: min=1, max=8014, avg=760, samples=999
  PEER bsr03: data stream size=10485761byte, control stream size=5242881byte
    data-used (bytes): min=0, max=0, avg=0, samples=0
    cntl-used (bytes): min=0, max=0, avg=0, samples=0

→ 평균적으로 10MB 중 4.7MB 의 버퍼가 사용되고 있음

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

Expand
title사용 예
  • linux 메모리 사용량 실시간 모니터링

Code Block
> bsrmon /watch memstat
2020-12-08_09:57:27.171
  module (bytes)
    BSR_REQ : 16334336
    BSR_AL  : 803760
    BSR_BM  : 4161536
    BSR_EE  : 2782560
  user (kbytes)
    name      pid    rsz        vsz       
    bsrmon    
destroy_max
29304 
0;
 
#
1192 
usec
      12724     
    bsrmon    37474 
destroy_avg
 
0;
1200 
#
 
usec
     12720     
    bsrmon  
}
  112177 1192       12724   
}
  
    bsrmon    113913 1068 
al_stat
 
{
     12724     
    bsrmon  
al-extents
  113978 1308   
6001;
    12728   

→ bsrmon 프로세스가 여러개 실행되고 있는 상태. 종료되지 않은 bsrmon 프로세스가 존재

  • 메모리 사용량 통계 출력

Code Block
> bsrmon /report memstat
Report [MEMORY]
 Run: 2020-12-06_19:04:12.177 - 
al_used 0;
2020-12-08_09:59:17.716
 module (bytes)
  BSR_REQ: 16303104 - 16459264    
  
al_used_max
BSR_AL : 803760   
0;
              
  
hits
BSR_BM : 4063232 - 
0;
5271552      
  BSR_EE : 2782560      
hits_total
      
2064;
    
 user (kbytes)
  name       
misses
  
0;
 rsz                
misses_total
    
1998;
 vsz
  bsradm        0     
starving
        
0;
          0       
starving_total
  
0;
              
  
locked
bsrsetup  
0;
    0             
locked_total
    
0;
      0           
changed
 
0;
           
  bsrmeta   
changed_total
   
249;
 0                
al_wait_retry_cnt
       0
;
                  
al_wait_total_retry_cnt
 
0;
    
  bsrmon        1068 
al_wait_max_retry_cnt
- 1368   
0;
          12720 - 12732     
pending_changes 0; max_pending_changes 64; error { nobufs_starving 0; nobufs_pending_slot 0; nobufs_used_slot 0; busy 0; wouldblock 0; } flags __LC_DIRTY,__LC_LOCKED; } resync_ratio { peer cent79_02 { replication 0; # byte/second resync 0; # byte/second resync_ratio 0; # percent } peer cent79_03 { replication 0; # byte/second resync 0; # byte/second resync_ratio 0; # percent } } vnr 1 { iostat

→ 2020-12-06_19:04:12.177 - 2020-12-08_09:59:17.716 기간동안 수집된 데이터의 메모리 사용량 범위 출력

→ BSR_REQ 는 16303104 ~ 16459264 bytes 사용됨

→ 유저 공간에서 bsrmon 이외에는 수집된 데이터가 없는 것으로 보아, cli 명령들이 1초 이내에 수행 완료 되었음을 알 수 있다.

resync_ratio {resource} {vnr}

실시간 복제, 동기화 전송량과 이에 대한 동기화 전송 비율

동기화가 진행 중일때 소스 노드에서만 갱신됩니다.

Expand
title사용 예
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%입니다.

명령어

bsrmon에서 제공하는 명령어 입니다.

/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 명령 실행시 데이터 파싱 후 포멧에 맞춰 출력합니다.

Code Block
2021-07-20_05:55:21.443 955 955 244480 244480 1042 1042 266752 266752

/show [/t {types[,...]|all}] [/r {resource[,...]|all}] [/j|/json] [/c|/continue]

전체 리소스에 대한 모든 항목의 성능 데이터를 한번에 출력합니다.

  • 출력 대상은 성능 파일에 마지막으로 기록된 데이터입니다.

[/t {types[,...]|all}] [/r {resource[,...]|all}]

특정 성능 항목 및 리소스를 지정하여 출력할 수 있는 옵션을 제공합니다.

  • 성능 항목 및 리소스 명은 ','로 구분하며 공백 없이 입력합니다.

[/j|/json]

json 형식으로 데이터를 출력합니다.

[/c|/continue]

성능 데이터를 주기적으로 출력합니다.

  • 출력 주기는 bsrmon에 설정된 period 값을 따릅니다.

사용 예

  • 모든 리소스의 모든 항목 출력

Expand
titlebsrmon /show
  • memory, resource 별로 timestamp 가 출력됩니다.

  • iostat, ioclat, reqstat, peer_reqstat, al_stat, resync_ratio 는 vnr 로 구분하여 출력됩니다.

  • memory 성능 데이터는 os(windows/linux)에 따라 출력되는 항목이 다릅니다.

Code Block
[root@cent79_01 bsr-utils]# bsrmon /show
bsrmon {
    memory {
        system {
       read_iops     total_memory  0;      7990028; # kbytes
        read_iocnt    used_memory  01843756; # kbytes
              readfree_kbs        0memory 2511096; # kbytes/second
            buff/cache    read_kb 03635176; # kbytes
        }
       write_iops module {
     0;       slab {
        write_iocnt     0;   bsr_req 15982; # kbytes
          write_kbs      bsr_al  01020; # kbytes/second
                writebsr_kbbm        07880; # kbytes
            }    bsr_ee  2384; # kbytes
    ioclat {                 local_mintotal_bio_set       0520; # useckbytes
                kmalloc local_max157; # kbytes
    0; # usec      }
          local_avg  vmalloc     0; # useckbytes
                master_mintotal_page_pool      033344; # useckbytes
        }
       master_max user {
   0; # usec       top_process {
        master_avg      0; # usecname    gnome-shell;
        }        pid     reqstat2482;
{                rsz requests {   250212; # kbytes
               count vsz      04082020; # kbytes
            }
     before_queue_min    0; # usec bsr_process {
                  before_queue_maxname    0bsrmon;
# usec               pid      before_queue_avg    0; # usec19370;
                rsz     before_al_begin_min 01364; # useckbytes
                vsz    before_al_begin_max 0 12780; # useckbytes
            }
       before_al_begin_avg 0; # usec }
           timestamp 2022-10-04_00:10:55.805;
    }
     in_actlog_minresource r0 {
        vnr 0; {
 # usec          iostat {
         in_actlog_max       read_iops 0; # usec    0;
                in_actlog_avg read_iocnt      0;
# usec               read_kbs      submit_min  0; # useckbytes/second
                    submit_max  read_kb 0; # useckbytes
                write_iops    submit_avg  0;
# usec                     bio_endio_minwrite_iocnt       0; #
usec                     bio_endio_maxwrite_kbs       0; # useckbytes/second
                    bio_endio_avgwrite_kb        0; # useckbytes
            }
       destroy_min 0; # usec   ioclat {
                destroylocal_max min       0; # usec
                local_max    destroy_avg   0; # usec
                }local_avg       0; # usec
       al_update {        master_min      0; # usec
    count       0;          master_max           before_bm_write_min 0; # usec
                master_avg    before_bm_write_max  0; # usec
            }
       before_bm_write_avg 0; # usec
      reqstat {
                requests {
after_bm_write_min  0; # usec                count     after_bm_write_max  0;
# usec                   before_queue_min  after_bm_write_avg  0; # usec
                    afterbefore_sync_page_minqueue_max    0; # usec
                    afterbefore_sync_page_maxqueue_avg    0; # usec
                    afterbefore_syncal_pagebegin_avgmin 0; # usec
                }    before_al_begin_max 0; # usec
                   peer cent79_03 {before_al_begin_avg 0; # usec
                    prein_sendactlog_min        0; # usec
                    prein_sendactlog_max        0; # usec
                    prein_sendactlog_avg        0; # usec
                    ackedsubmit_min   0; # usec
                    ackedsubmit_max   0; # usec
                    ackedsubmit_avg   0; # usec
                    netbio_doneendio_min        0; # usec
                    netbio_doneendio_max        0; # usec
                    netbio_doneendio_avg        0; # usec
                }    destroy_min 0; # usec
     }             peer_reqstat { destroy_max 0; # usec
            peer cent79_03 {      destroy_avg 0; # usec
           count     }
 0;                   al_update {
 submit_min  0; # usec                count     submit_max  0;
# usec                     submit_avg before_bm_write_min 0; # usec
                    biobefore_endiobm_write_min       max 0; # usec
                    biobefore_bm_endiowrite_max       avg 0; # usec
                    bioafter_bm_endio_avg    write_min   0; # usec
                    destroy_minafter_bm_write_max  0; # usec
                    destroy_maxafter_bm_write_avg  0; # usec
                    destroy_avgafter_sync_page_min 0; # usec
                }    after_sync_page_max 0; # usec
       }             al_stat {
 after_sync_page_avg 0; # usec
              al-extents  }
    6001;            peer cent79_03 {
  al_used 0;                 alpre_used_maxsend_min        0; # usec
              hits    0;  pre_send_max        0; # usec
    hits_total      0;           pre_send_avg      misses  0; # usec
              misses_total      acked_min    0; # usec
              starving      acked_max   0; # usec
              starving_total  0;    acked_avg   0; # usec
       locked  0;             net_done_min    locked_total    0; # usec
              changed 0;     net_done_max        0; # usec
 changed_total   0;                 alnet_wait_retry_cntdone_avg        0; # usec
              al_wait_total_retry_cnt 0; }
            }
  al_wait_max_retry_cnt   0;       peer_reqstat {
        pending_changes 0;       peer cent79_03 {
       max_pending_changes     64;          count       error0;
{                     nobufssubmit_starvingmin  0; #  0;usec
                    nobufs_pending_slotsubmit_max  0; # usec
                  nobufs_used_slot  submit_avg  0; # usec
                  busy  bio_endio_min       0; # usec
                  wouldblock  0;bio_endio_max       0; # usec
       }             bio_endio_avg    flags   NONE0; # usec
          }          destroy_min 0;  resync_ratio {# usec
                   peer cent79_02 {destroy_max 0; # usec
                    destroy_avg replication	0; # byte/secondusec
                }
   resync	0; # byte/second       }
             resync_ratio	0; # percental_stat {
                al-extents     } 6001;
               peer cent79_03 {al_used 0;
                al_used_max     replication	0; #
byte/second                hits     resync	0;
# byte/second               hits_total      resync_ratio	0; # percent2064;
                misses  }0;
         }       misses_total  network { 1998;
           peer cent79_02 {   starving        0;
     send    180; # byte/second     starving_total  0;
         recv    384; # byte/second locked  0;
         }       locked_total    0;
 peer cent79_03 {             changed 0;
  send    0; # byte/second        changed_total   249;
     recv    0; # byte/second     al_wait_retry_cnt       0;
}         }       al_wait_total_retry_cnt 0;
 sendbuf {             peer cent79_02 { al_wait_max_retry_cnt   0;
                ap_in_flight {pending_changes 0;
                max_pending_changes     size64;
       17301504; # bytes       error {
            count       33; nobufs_starving     0;
          }                 rs_in_flight {nobufs_pending_slot 0;
                    sizenobufs_used_slot    0;
   0; # bytes               busy      count  0;
    0;                wouldblock } 0;
               highwater }
     33;           flags   __LC_DIRTY,__LC_LOCKED;
  fill    17301504; # bytes    }
            dataresync_streamratio {
                peer cent79_02 {
   size        20971520; # bytes       replication	0; # byte/second
           used         resync	0; # bytesbyte/second
                     packet {resync_ratio	0; # percent
                }
       name    P_DATA     peer cent79_03 {
                 count   1replication	0; # byte/second
                      size    resync	0; # bytesbyte/second
                    }
resync_ratio	0; # percent
                }

        }
      control_stream  vnr 1 {
            iostat {
      size         5242880; #read_iops bytes      0;
              used  read_iocnt      0;
# bytes               read_kbs  }      0; # kbytes/second
    }            read_kb peer cent79_03 {0; # kbytes
                apwrite_in_flightiops {     0;
               size  write_iocnt      0;
# bytes                write_kbs     count       0; # kbytes/second
              }  write_kb        0; # kbytes
    rs_in_flight  {      }
            ioclat {
size        0; # bytes      local_min       0; # usec
     count       0;    local_max       0; # usec
   }             local_avg    highwater   0; # usec
 0;               master_min  fill    0; # bytesusec
                datamaster_streammax  {    0; # usec
              size  master_avg      209715200; # bytesusec
            }
       used     reqstat {
 0; # bytes             requests {
  }                 control_stream {count        0;
            size        5242880; # bytesbefore_queue_min    0; # usec
                used    before_queue_max    0; # bytesusec
                }    before_queue_avg    0; # usec
  }         }         timestamp 2022-09-29_22:54:25.064;
    }before_al_begin_min 0; # usec
          resource r1 {         ...before_al_begin_max 0; # usec
            timestamp 2022-10-04_00:10:55.805;     }
}
  • 모든 리소스의 특정 항목 출력

Expand
titlebsrmon /show /t iostat
Code Block
[root@cent79_01 bsr-utils]# bsrmon /show /t iostat
bsrmon {  before_al_begin_avg 0; # usec
            resource r0 {      in_actlog_min   vnr 0 {  0; # usec
        iostat {           in_actlog_max      read_iops 0; # usec
   0;                 read_iocntin_actlog_avg       0; # usec
              read_kbs      submit_min  0; # kbytes/secondusec
                    readsubmit_kbmax  0; # kbytesusec
                write_iops    submit_avg  0; # usec
               write_iocnt     bio_endio_min       0; # usec
                  write_kbs  bio_endio_max       0; # kbytes/secondusec
                write_kb     bio_endio_avg       0; # kbytesusec
            }        destroy_min }0; # usec
      vnr 1 {            destroy_max iostat0; {# usec
               read_iops      destroy_avg 0; # usec
              read_iocnt  }
   0;             al_update {
  read_kbs        0; # kbytes/second        count        0;
read_kb 0; # kbytes                 before_bm_write_iopsmin 0; # usec
   0;                 before_bm_write_iocntmax     0; # usec
              write_kbs      before_bm_write_avg 0; # kbytes/secondusec
                    after_bm_write_kbmin  0; # usec
     0;  # kbytes            after_bm_write_max } 0; # usec
     }         timestamp 2022-09-29_22:54:25.064;     }after_bm_write_avg  0; # usec
resource r1 {         vnr 0 {       after_sync_page_min 0; # usec
  iostat {                 read_iops   after_sync_page_max 0; # usec
   0;                 read_iocnt  after_sync_page_avg 0; # usec
   0;             }
   read_kbs        0; # kbytes/second   peer cent79_03 {
           read_kb 0; # kbytes      pre_send_min        0; # usec
write_iops      0;              pre_send_max   write_iocnt     0; # usec
                  write_kbs  pre_send_avg        0; # kbytes/secondusec
                write_kb    acked_min    0; # kbytesusec
            }        acked_max }  0; # usec
    timestamp 2022-10-04_00:17:52.249;     } }
  • 특정 리소스의 특정 항목 출력

Expand
titlebsrmon /show /t network,sendbuf /r r0,r1
Code Block
[root@cent79_01 bsr-utils]# bsrmon /show /t network,sendbuf /r r0,r1 bsrmon {acked_avg   0; # resourceusec
r0 {         network {         net_done_min    peer cent79_02 {  0; # usec
            send    180; # byte/second  net_done_max        0; # usec
    recv    384; # byte/second          net_done_avg   }     0; # usec
     peer cent79_03 {         }
       send    0; #}
byte/second            peer_reqstat {
      recv    0; # byte/second    peer cent79_03 {
      }         }     count    sendbuf {  0;
          peer cent79_02 {        submit_min  0; # usec
    ap_in_flight {               submit_max  0; # usec
 size        17301504; # bytes         submit_avg  0; # usec
       count       33;      bio_endio_min       0; # usec
 }                   rsbio_inendio_flightmax {      0; # usec
            size        0; # bytesbio_endio_avg       0; # usec
              count      destroy_min 0; # usec
              }      destroy_max 0; # usec
       highwater       33;      destroy_avg 0; # usec
       fill    17301504; # bytes   }
            }
data_stream {           al_stat {
        size        20971520;al-extents # bytes    6001;
                al_used 0;
      0; # bytes        al_used_max     0;
       packet {        hits    0;
            name    Phits_DATAtotal      0;
                misses  count   10;
                misses_total    0;
   size    0; # bytes       starving        0;
     }           starving_total  0;
   }             locked  0;
 control_stream {              locked_total    0;
  size        5242880; # bytes    changed 0;
               used changed_total       0;
# bytes               al_wait_retry_cnt  }     0;
       }             peer cent79_03 {al_wait_total_retry_cnt 0;
                ap_in_flight {
 al_wait_max_retry_cnt   0;
                pending_changes 0;
size        0; # bytes      max_pending_changes     64;
         count       0;error {
               }     nobufs_starving     0;
      rs_in_flight {              nobufs_pending_slot 0;
        size        0; # bytes  nobufs_used_slot    0;
              count      busy 0;       0;
         }           wouldblock  0;
   highwater       0;      }
          fill    0; # bytesflags   NONE;
            }
data_stream {           resync_ratio {
        size        20971520; # bytespeer cent79_02 {
                    usedreplication	0; # byte/second
     0; # bytes             resync	0; # byte/second
 }                 control_stream { resync_ratio	0; # percent
                }
size        5242880; # bytes      peer cent79_03 {
            used        replication	0; # bytesbyte/second
                }    resync	0; # byte/second
      }         }         timestamp 2022-09-29_22:54:24.021;resync_ratio	0; # percent
                }

   resource    r1 {}
        network {
            peer cent79_02 {
                send    0180; # byte/second
                recv    0384; # byte/second
            }
            peer cent79_03 {
                send    0; # byte/second
                recv    0; # byte/second
            }
        }
        sendbuf {
            peer cent79_02 {
                ap_in_flight {
                    size        017301504; # bytes
                    count       033;
                }
                rs_in_flight {
                    size        0; # bytes
                    count       0;
                }
                highwater       033;
                fill    017301504; # bytes
                data_stream {
                    size        020971520; # bytes
                    used        0; # bytes
                }    packet {
            control_stream   {         name    P_DATA
       size        0; # bytes       count   1;
          used        0; # bytes    size    0; # bytes
      }              }
            peer   cent79_03 {}
                apcontrol_in_flightstream {
                    size        05242880; # bytes
                    used count       0; # bytes
              }  }
            }
 rs_in_flight {          peer cent79_03 {
        size        0; # bytesap_in_flight {
                    size count       0; # bytes
              }      count       0;
   highwater       0;      }
          fill    0; # bytes  rs_in_flight {
                    size        data_stream {
0; # bytes
                   size count       0; # bytes
                }
               used highwater       0;
#   bytes             fill    }0; # bytes
                controldata_stream {
                    size        020971520; # bytes
                    used        0; # bytes
                }
               } control_stream {
                 }   size      timestamp 2022-10-04_00:19:53.026;  5242880; # bytes
    }
}

/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 옵션 입력시 날짜와 시간은 언더바(_)로 구분합니다.

Expand
title사용 예
  • bsrmon /report iostat r0 0 /d 2022-11-01

    • 11월 1일에 수집된 iostat 통계 출력

  • bsrmon /report iostat r0 0 /s 2022-11-01 /e 2022-11-10

    • 11월 1일부터 10일까지 수집된 iostat 통계 출력

  • bsrmon /report iostat r0 0 /s 2022-11-01_09:00 /e 2022-11-10_20:00

    • 11월 1일 9시부터 11월 10일 20시까지 수집된 iostat 통계 출력

  • bsrmon /report iostat r0 0 /s 09:00 /e 20:00

    • 수집되 모든 기간동안 9시부터 20시까지의 iostat 통계를 날짜별로 출력

/set {period, file_size, file_cnt} {value}

모니터링과 관련된 수치를 조정하는 명령입니다.

period

파일 저장과 모니터링 주기를 설정합니다. 초 단위로 설정하며 기본 값은 1초 입니다.

file_size

파일 롤링 크기를 설정합니다. MB 단위로 설정하며 기본 값은 50MB 입니다.

file_cnt

파일 롤링 수를 설정합니다. 기본 값은 3개 입니다.

/get {all, period, file_size, file_cnt}

모니터링과 관련된 수치를 조회하는 명령입니다.

/io_delay_test {flag} {delay point} {delay time}

I/O 성능 저하를 의도적으로 발생시켜 bsr 성능 모니터의 기능을 검증합니다. 개발자용 기능 입니다.

/debug cmds options

debugfs 정보를 조회하기 위한 windows 용 명령어입니다.

types

성능 모니터링 대상 항목입니다.

iostat, ioclat, reqstat, peer_reqstat, alstat, network, sendbuf, memstat

iostat {resource} {vnr}

복제 볼륨의 읽기, 쓰기 I/O 에 대한 집계 데이터 (io count, kbs, kb)

...

title사용 예
  • I/O 성능 데이터 실시간 모니터링

...

Code Block
> bsrmon /watch iostat r0 0
2020-12-06_08:22:36.223
  read : IO count=0, BW=0kb/s (0KB)
  write: IO count=216, BW=110208kb/s (220416KB)
2020-12-06_08:22:37.640
  read : IO count=0, BW=0kb/s (0KB)
  write: IO count=34, BW=16896kb/s (16896KB)
2020-12-06_08:22:39.32
  read : IO count=0, BW=0kb/s (0KB)
  write: IO count=326, BW=155176kb/s (155176KB)
2020-12-06_08:22:40.106
  read : IO count=0, BW=0kb/s (0KB)
  write: IO count=330, BW=164624kb/s (164624KB)
  ...

...

→ write I/O 가 지속적으로 발생하고 있는 상황

  • I/O 성능 데이터의 통계 출력

...

Code Block
> bsrmon /report iostat r0 0
Report r0 [IO STAT - vnr0]
 Run: 2021-07-20_08:14:27.405 - 2021-08-04_18:59:53.573
  read : io count=24855, bw=6325194kbyte
    BW (kbyte/s): min=40, max=284928, avg=248578, samples=24
  write: io count=8360345, bw=2139182512kbyte
    BW (kbyte/s): min=12, max=401408, avg=320256, samples=6671

...

→ 2021-07-20_08:14:27.405 - 2021-08-04_18:59:53.573 기간 동안 집계된 데이터

→ 24개의 read I/O samples. 평균 248, 최소 40, 최대 284 Mbytes/s 의 IO 가 처리됨

→ 6670개의 write I/O samples. 평균 320, 최소 12, 최대 401 Mbytes/s 의 IO 가 처리됨

  • 백업 파일을 사용하여 통계 계산

...

Code Block
> bsrmon /report iostat r0 0 /f vnr0_IO_STAT_2021-07-20_081427.005 
Report r0 [vnr0_IO_STAT_2021-07-20_081427.005]
 Run: 2021-07-07_21:24:24.383 - 2021-07-20_08:14:26.371
  read : ios=6332219, bw=1595360917kbyte
    IOPS        : min=1, max=1233, avg=980, samples=6452
    BW (kbyte/s): min=4, max=428032, avg=247033, samples=6452
  write: ios=22550577, bw=3961426883kbyte
    IOPS        : min=1, max=6478, avg=786, samples=28468
    BW (kbyte/s): min=4, max=1085440, avg=138461, samples=28484

...

→ vnr0_IO_STAT_2021-07-20_081427.005 파일로 부터 데이터 추출

→ 2021-07-07_21:24:24.383 - 2021-07-20_08:14:26.371 기간 동안 집계된 데이터

→ 6452 개의 read I/O samples. 평균 980 iops, 최소 1 iops, 최대 1233 iops 로 측정됨

→ 28468 개의 write I/O samples. 평균 786iops, 최소 1 iops, 최대 6478 iops 로 측정됨

ioclat {resource} {vnr}

local/master I/O 의 complete latency (usec)

...

title사용 예
  • I/O complete latency 실시간 모니터링

...

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가 완료되기 까지 소요된 시간의 최소, 최대, 평균값 출력

  • I/O complete latency 통계 출력

...

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 이 소요된 것으로 측정됨

reqstat {resource} {vnr}

request 생성 시점을 기준으로 특정 구간까지 소요된 시간에 대한 집계 데이터 (usec)

...

requests : 모니터링 기간(주기) 동안 처리된 request 갯수

...

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() 실행 후

> 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
Expand
title사용 예
  • request 성능 데이터 실시간 모니터링

Code Block
                used        0; # bytes
                }
            }
        }
        timestamp 2022-09-29_22:54:25.064;
    }
    resource r1 {
        ...
        timestamp 2022-10-04_00:10:55.805;
    }
}
  • 모든 리소스의 특정 항목 출력

Expand
titlebsrmon /show /t iostat
Code Block
[root@cent79_01 bsr-utils]# bsrmon /show /t iostat
bsrmon {
    resource r0 {
        vnr 0 {
            iostat {
                read_iops       0;
                read_iocnt      0;
                read_kbs        0; # kbytes/second
                read_kb 0; # kbytes
                write_iops      0;
                write_iocnt     0;
                write_kbs       0; # kbytes/second
                write_kb        0; # kbytes
            }
        }
        vnr 1 {
            iostat {
                read_iops       0;
                read_iocnt      0;
                read_kbs        0; # kbytes/second
                read_kb 0; # kbytes
                write_iops      0;
                write_iocnt     0;
                write_kbs       0; # kbytes/second
                write_kb        0; # kbytes
            }
        }
        timestamp 2022-09-29_22:54:25.064;
    }
    resource r1 {
        vnr 0 {
            iostat {
                read_iops       0;
                read_iocnt      0;
                read_kbs        0; # kbytes/second
                read_kb 0; # kbytes
                write_iops      0;
                write_iocnt     0;
                write_kbs       0; # kbytes/second
                write_kb        0; # kbytes
            }
        }
        timestamp 2022-10-04_00:17:52.249;
    }
}
  • 특정 리소스의 특정 항목 출력

  • request 성능 데이터 통계 출력

>
Expand
titlebsrmon /show /t network,sendbuf /r r0,r1
Code Block
[root@cent79_01 bsr-utils]# bsrmon /show /t network,sendbuf /r r0,r1
bsrmon {
    resource r0 {
        network {
            peer cent79_02 {
                send    180; # byte/second
                recv    384; # byte/second
            }
            peer cent79_03 {
             
(usec):
 
min=3,
 
max=7215, avg=46
 send    0; 
bio_endio
# byte/second
     
(usec):
 
min=4,
 
max=7219,
 
avg=50
     
destroy
   recv    0; 
(usec): min=577, max=214980, avg=15711
# byte/second
     
al_uptate
  
:
 
0
    }
before_bm_write
 
(usec):
 
min=0,
 
max=0,
 
avg=0
    }
after_bm_write
  
(usec):
 
min=0,
 
max=0,
 
avg=0
   sendbuf {
after_sync_page
 
(usec):
 
min=0,
 
max=0,
 
avg=0
   
PEER
 
bsr03:
    peer 
pre
cent79_
send (usec): min=0, max=0, avg=0
02 {
       
acked
    
(usec):
 
min=0,
 
max=0,
 
avg=0
  ap_in_flight {
 
net_done
 
(usec):
 
min=0,
 
max=0,
 
avg=0
   
PEER
 
100.100.10.31:7792:
     
pre_send
 
(usec):
 
min=571,
 
max=214862,
 
avg=15703
  size   
acked
     
(usec): min=555, max=210004, avg=7966
17301504; # bytes
     
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
count 
-
 
vnr0]
  
Run:
 
2020-12-06_05:46:36.678
 
- 2020-12-08_09:45:46.219
 33;
  
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
     rs_in_
actlog
flight {
      
(usec):
 
min=1,
 
max=589946,
 
avg=549,
 
samples=28
     
submit
     size     
(usec):
 
min=2,
 
max=721793, avg=349, samples=72
 0; # bytes
   
bio_endio
       
(usec):
 
min=3,
 
max=589987,
 
avg=579,
 
samples=28
     
destroy
 count       0;
(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
   highwater  
after_sync_page
 
(usec):
 
min=0,
 
max=0,
 
avg=0, samples=0
 33;
  
PEER
 
100.100.10.31:7792:
     
pre_send
 
(usec):
 
min=7,
 
max=1667187,
 
avg=22364,
 
samples=161
   fill  
acked
  17301504; # 
(usec): min=11, max=1635581, avg=15737, samples=161
bytes
        
net_done
 
(usec):
 
min=82, max=2362749, avg=39406, samples=161 PEER bsr03:
      data_stream {
                    size        20971520; # bytes
             
pre_send
 
(usec):
 
min=0,
 
max=0,
 
avg=0,
 
samples=0
  used   
acked
    
(usec):
 
min=0, max=0, avg=0, samples=0
0; # bytes
       
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}

peer request 생성 시점을 기준으로 특정 구간까지 소요된 시간에 대한 집계 데이터 (usec)

  • peer_requests : 모니터링 기간(주기) 동안 처리된 peer requests 갯수

  • submit : peer request submit 이 실행 되기까지 소요된 시간

  • bio_endio : peer request 의 bio 완료 로직이 실행 되기까지 소요된 시간

  • destroy : peer request가 해제 되기까지 소요된 시간

> bsrmon /watch peer_reqstat r0 0 2021-07-19_21:52:02.191 PEER bsr-03:
Expand
title사용 예
  • peer request 성능 데이터 실시간 모니터링

Code Block
         packet {
        
peer
 
requests
 
:
 
0
     
submit
    
(usec):
 
min=0,
 
max=0,
 
avg=0
 name    
bio_endio (usec): min=0, max=0, avg=0
P_DATA
                   
destroy
   
(usec):
 
min=0, max=0, avg=0
 count   1;
PEER
 
bsr-02:
     
peer
 
requests
 
:
 
100
     
submit
    
(usec):
 
min=421,
 
max=6907,
 
avg=2184
   size  
bio_endio
 
(usec): min=1021, max=7312, avg=2563
 0; # bytes
    
destroy
   
(usec):
 
min=1739,
 
max=7955, avg=3244

→ peer bsr-02 에 대한 100개의 peer request가 처리됨

→ peer bsr-03 에 대한 peer request 는 발생하지 않음

  • peer request 성능 통계 출력

Code Block> bsrmon /report peer_reqstat r0 0 Report r0 [PEER REQUEST STAT - vnr0] Run: 2021-07-11_22:23:08.890 - 2021-07-19_21:56:18.179 PEER bsr-02: peer requests : total=344054
           }
                }
        
submit
    
(usec):
 
min=1,
 
max=36103,
 
avg=99, samples=6902
 control_stream {
   
bio_endio
 
(usec):
 
min=1,
 
max=116988,
 
avg=96161,
 
samples=9517
     
destroy
   
(usec):
 
min=47,
 
max=117495, avg=96340, samples=9518 PEER bsr-03:
  size        5242880; # bytes
                    used        0; # bytes
     
peer
 
requests
 
:
 
total=133288
     
submit
   }
(usec):
 
min=1,
 
max=1670,
 
avg=5,
 
samples=6037
     
bio_endio
 
(usec):
 
min=1, max=117000, avg=104660, samples=8708
 }
      
destroy
   
(usec):
 
min=63,
 
max=125871, avg=104839, samples=8709

→ 2021-07-11_22:23:08.890 - 2021-07-19_21:56:18.179 기간동안 집계된 데이터

→ bio 완료 로직이 실행 되기까지 평균 0.1초 가량 소요되었음

alstat {resource} {vnr}

active log 의 사용 수치에 대한 집계 데이터

  • used 값, used 값의 최대값 집계

  • hits, misses, starving, locked, changed 증가 값 집계

  • al_wait retry 횟수 집계

  • al 부족 발생 원인 집계

    • starving, pending, used, busy, wouldblock

> bsrmon /watch alstat r0 0 2021-08-04_19:10:11.463 used :
Expand
title사용 예
  • active log 성능 데이터 실시간 모니터링

Code Block
 peer cent79_03 {
                ap_in_flight {
          
3/67 (max=8)
        
hits
  size  
:
      0; # 
579 (total=2843)
bytes
    
misses
  
:
       
2250
 
(total=17564)
   
starving:
   count       0;
 
(total=0)
   
locked
  
:
          
0
}
(total=0)
   
changed
 
:
        
749
 
(total=5854)
   
al_wait retry :
rs_in_flight {
             
0
 
(total=0,
 
max=0)
   
pending_changes
 
:
 size 
1/64
   
error
   
:
 0; # bytes
   
NOBUFS
     
-
 
starving
 
:
 
0
         count   
-
 
pending
 
slot
 
:
 0;
             
- used slot : 0
   }
              
BUSY
 
:
 
0
highwater     
WOULDBLOCK
 
:
 0;
  
flags
     
:
 
__LC_DIRTY
 
__LC_LOCKED

→ 해당 시점에 사용중인 al slot 은 3개

→ pending 되어있는 al slot은 1개

→ dirty, locked flag가 설정되어 있음

  • active log 성능 통계 출력

Code Block> bsrmon /report alstat r0 0 Report r0 [AL STAT - vnr0] Run: 2021-08-03_04:48:33.721 - 2021-08-03_22:47:28.326 al_extents : 6001
       fill    0; # bytes
               
used
 data_stream {
  
:
 
max=0(all_slot_used=0),
 
avg=0
     
hits
     
:
 
total=0
     
misses
size   
:
 
total=0
    20971520; 
starving
# 
:
bytes
total=0
     
locked
   
:
 
total=0
     
changed
  
:
 
total=0
   used  
al_wait
 
retry
 
count
 
:
 
max=0, total=0
  0; # bytes
  
pending_changes
     
:
 
max=0,
 
total=0
     
error
 
:
 
total=0
}
      
NOBUFS
 
-
 
starving
     
:
 
total=0
  control_stream {
          
-
 
pending
 
slot
 
:
 
total=0
      size        
-
5242880; 
used
# bytes
  
slot
 
:
 
total=0
       
BUSY
       
:
 
total=0
 used      
WOULDBLOCK
 
:
 
total=
0; # 
->
bytes
al_extents
 
changed
   
Run:
 
2021-08-03_22:47:52.895
 
-
 
2021-08-04_19:27:06.522
   
al_extents
 
:
 
67
    }
used
     
: max=67(all_slot_used=59),
 
avg=3
     
hits
 }
   
:
 
total=337528
    }
misses
   
:
 
total=2020409
    
starving : total=2
timestamp 2022-09-29_22:54:24.021;
    }
    resource r1 {
      
locked
  network 
:
{
total=0
     
changed
  
:
 
total=673370
    peer 
al
cent79_
wait
02 {
retry
 
count
 
:
 
max=2,
 
total=501
     
pending_changes
     
:
 
max=64, total=258
 send    0; 
error
# 
: total=1004
byte/second
       
NOBUFS
 
-
 
starving
     
:
 
total=501
 recv    0; # byte/second
      
-
   
pending
 
slot
 
:
 
total=0
}
            peer 
-
cent79_03 
used
{
   
slot
 
:
 
total=503
       
BUSY
    send   
:
 
total=
0; # byte/second
     
WOULDBLOCK
 
:
 
total=0

→ 2021-08-03_22:47:52.895 에 al_extents 값이 6001 에서 67 로 변경됨

→ al이 67 개로 설정된 경우, 모든 al slot 을 사용한 횟수 59회, starving 상황 2회, al_wait retry 501 회 발생

network {resource}

복제 네트워크 송수신 속도 (byte/s)

>
Expand
title사용 예
  • network 성능 데이터 실시간 모니터링

Code Block
 
bsrmon
 
/watch
 
network
 
r0
 
2020-12-08_09:47:45.84
   
PEER 100.100.10.31:7792:
 recv    0; 
send
# 
(
byte/
s): 62932184
second
        
recv
 
(byte/s):
 
4820
  }
PEER
 
bsr03:
     
send
 
(byte/s): 0
 }
    
recv
 
(byte/s):
 
0
 
2020-12-08_09:47:46.160 PEER 100.100.10.31:7792:
 sendbuf {
      
send
 
(byte/s):
 
104896568
    peer 
recv (byte/s): 12320
cent79_02 {
   
PEER
 
bsr03:
     
send
 
(byte/s):
 
0
     
recv (byte/s): 0 ...

→ peer bsr03 과는 연결 단절된 상태

→ peer 100.100.10.31:7792 로 데이터 전송이 진행되고 있는 중

  • network 성능 통계 출력

Code Block
> bsrmon /report network r0
Report r0 [NETWORK SPEED]
 Run: 2020-11-30_06:38:44.653 - 2020-12-08_09:53:31.455
  PEER 100.100.10.31:7792: send=52497905byte/s, receive=5902byte/s
    send (byte/s): min=3, max=115395016, avg=52497905, samples=392
    recv (byte/s): min=3, max=15004, avg=5902, samples=367
  PEER bsr03: send=0byte/s, receive=0byte/s
    send (byte/s): min=0, max=0, avg=0, samples=0
    recv (byte/s): min=0, max=0, avg=0, samples=0

→ 평균적으로 52.4 MB 의 데이터가 peer 100.100.10.31 노드로 전송되고 있음

sendbuf {resource}

송신버퍼 사용량 (bytes)

> bsrmon /watch sendbuf r0 2020-12-08_09:54:13.735 PEER 100.100.10.31:7792: highwater: 11246, fill: 37094400bytes
Expand
title사용 예
  • 송신버퍼 성능 데이터 실시간 모니터링

Code Block
ap_in_flight {
                    size        0; # bytes
                    count       0;
                }
                rs_in_flight {
            
ap_in_flight:
 
8881
 
(9094144bytes)
      size   
rs_in_flight:
 
2365
 
(28000256bytes)
   0; # 
data
bytes
stream
         
size
 
(bytes):
 
10485760000
         
used
count 
(bytes):
 
27098576
     0;
    
[P_DATA]
  
-
  
cnt:
 
7542
  
size:
 
8024616bytes
    }
     
[P_RS_DATA_REPLY] - cnt: 1596 size: 18942304bytes
           highwater       0;
       
[P_BARRIER]
  
-
  
cnt:
 
549
  
size:
 
13176bytes
 fill    0; # bytes
  
[P_UNPLUG_REMOTE]
  
-
  
cnt:
 
7406
  
size:
 
118496bytes
     
control
 data_stream {
               
size
 
(bytes):
 
5242880
   size      
used
 
(bytes):
 0; # bytes
PEER
 
bsr03:
     
highwater:
 
0,
 
fill:
 
0bytes
         
ap_in_flight:
 
0
 
(0bytes)
used        
rs_in_flight: 0 (0bytes)
0; # bytes
     
data
 
stream
         
size
 
(bytes):
}
10485761
         
used
 
(bytes):
 
0
     control
_stream {
       
size
 
(bytes):
 
5242881
         
used
 
(bytes):
 
0 ...

→ peer 100.100.10.31:7792, bsr03 에 송신버퍼가 할당되어 있음

→ peer bsr03 과는 연결 단절된 상태

→ peer 100.100.10.31:7792 로 데이터 전송이 진행되고 있는 중

→ peer 100.100.10.31:7792 에 계류중인 복제 및 동기화 데이터 갯수는 11246 개 (복제 데이터 8881개, 동기화 데이터 2365개)

  • 송신버퍼 성능 통계 출력

Code Block> bsrmon /report sendbuf r0 Report r0 [SEND BUFFER] Run: 2020-12-05_13:26:59.969 - 2020-12-08_09:56:33.718 PEER 100.100.10.31:7792: data stream size=10485761byte, control stream size=5242881byte
size        0; # bytes
                    
data-
used 
(bytes): min=2097232, max=7603084, avg=4787174, samples=5
       0; # bytes
            
cntl-used
 
(bytes):
 
min=0,
 
max=0, avg=0, samples=0
 }
     
highwater:
 
min=1,
 
max=8014,
 
avg=760,
 
samples=999
   
PEER
}
bsr03:
 
data
 
stream
 
size=10485761byte,
 
control
 
stream
 
size=5242881byte
     
data-used (bytes): min=0, max=0, avg=0, samples=0
 peer cent79_03 {
      
cntl-used
 
(bytes):
 
min=0,
 
max=0,
 
avg=0, samples=0

→ 평균적으로 10MB 중 4.7MB 의 버퍼가 사용되고 있음

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

> bsrmon /watch memstat 2020-12-08_09:57:27.171 module (bytes) BSR_REQ : 16334336 BSR_AL : 803760 BSR_BM : 4161536 BSR_EE : 2782560 user (kbytes) name pid rsz
Expand
title사용 예
  • linux 메모리 사용량 실시간 모니터링

Code Block
      ap_in_flight {
                    size        0; # bytes
                    count       0;
                
vsz
}
           
bsrmon
    
29304
 rs_in_flight 
1192
{
      
12724
          
bsrmon
    
37474
size  
1200
      0; 
12720
# bytes
        
bsrmon
    
112177
 
1192
       
12724
count       0;
  
bsrmon
    
113913
 
1068
       
12724
  }
       
bsrmon
    
113978
 
1308
    highwater   
12728
   

→ bsrmon 프로세스가 여러개 실행되고 있는 상태. 종료되지 않은 bsrmon 프로세스가 존재

  • 메모리 사용량 통계 출력

Code Block> bsrmon /report memstat Report [MEMORY] Run: 2020-12-06_19:04:12.177 - 2020-12-08_09:59:17.716 module (bytes) BSR_REQ: 16303104 - 16459264 BSR_AL : 803760
 0;
                fill    0; # bytes
                
BSR_BM : 4063232 - 5271552
data_stream {
           
BSR_EE
 
:
 
2782560
       size        0; # bytes
user
 
(kbytes)
   
name
          
rsz
      used        0; # bytes
    
vsz
   
bsradm
        
0
 }
                control_stream 
{
  
0
                  size  
bsrsetup
      0; # bytes
                    
0
used        0; # bytes
               
bsrmeta
 }
     
0
       }
        }
      
0
  
bsrmon 1068 - 1368 12720 - 12732

→ 2020-12-06_19:04:12.177 - 2020-12-08_09:59:17.716 기간동안 수집된 데이터의 메모리 사용량 범위 출력

→ BSR_REQ 는 16303104 ~ 16459264 bytes 사용됨

→ 유저 공간에서 bsrmon 이외에는 수집된 데이터가 없는 것으로 보아, cli 명령들이 1초 이내에 수행 완료 되었음을 알 수 있다.

resync_ratio {resource} {vnr}

실시간 복제, 동기화 전송량과 이에 대한 동기화 전송 비율

동기화가 진행 중일때 소스 노드에서만 갱신됩니다.

→ 연결되어있는 svr06 노드에 초당 복제 데이터가 144100kb, 동기화 데이터가 18508kb 전송되었으며 이에 대한 동기화 전송 비율은 11%입니다
Expand
title사용 예
Code Block
> bsrmon /watch resync_ratio r0 0
2022-04-12_15:34:52.206
svr06
    replcation(144100kb)/resync(18508kb),  resync ratio 11%
timestamp 2022-10-04_00:19:53.026;
    }
}

/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 옵션 입력시 날짜와 시간은 언더바(_)로 구분합니다.

Expand
title사용 예
  • bsrmon /report iostat r0 0 /d 2022-11-01

    • 11월 1일에 수집된 iostat 통계 출력

  • bsrmon /report iostat r0 0 /s 2022-11-01 /e 2022-11-10

    • 11월 1일부터 10일까지 수집된 iostat 통계 출력

  • bsrmon /report iostat r0 0 /s 2022-11-01_09:00 /e 2022-11-10_20:00

    • 11월 1일 9시부터 11월 10일 20시까지 수집된 iostat 통계 출력

  • bsrmon /report iostat r0 0 /s 09:00 /e 20:00

    • 수집되 모든 기간동안 9시부터 20시까지의 iostat 통계를 날짜별로 출력

/set {period, file_size, file_cnt} {value}

모니터링과 관련된 수치를 조정하는 명령입니다.

period

파일 저장과 모니터링 주기를 설정합니다. 초 단위로 설정하며 기본 값은 1초 입니다.

file_size

파일 롤링 크기를 설정합니다. MB 단위로 설정하며 기본 값은 50MB 입니다.

file_cnt

파일 롤링 수를 설정합니다. 기본 값은 3개 입니다.

/get {all, period, file_size, file_cnt}

모니터링과 관련된 수치를 조회하는 명령입니다.

/io_delay_test {flag} {delay point} {delay time}

I/O 성능 저하를 의도적으로 발생시켜 bsr 성능 모니터의 기능을 검증합니다. 개발자용 기능 입니다.

/debug cmds options

debugfs 정보를 조회하기 위한 windows 용 명령어입니다.