Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents
maxLevel3

개요

BSR은 호스트 기반 소프트웨어 복제로서 복제 I/O 전송에 기본적인 한계가 따릅니다. 이것은 TCP/IP 기반 10Gbps 네트워크에서 최대 6~7G bps 전송 성능을 보여서 10G 기준 최대 70% 까지 대역을 보장한다는 뜻 입니다. 따라서 이러한 BSR 연동 환경에서는 DRX가 가지고 있는 버퍼링과 압축에 대한 원천적인 성능을 측정하기 어렵습니다. 어떤 장비나 소프트웨어의 성능을 측정하기 위해선 데이터가 제한없이 입력될 수 있어야 하고 그에 따른 출력 결과가 산출될 수 있어야 합니다. 이러한 점에서 성능측정의 문제를 해결하기 위한 도구가 drxsim(구 drbdsim) 입니다.

drxsim은 기본적인 bsr 연결을 시뮬레이션 하며 제한이 없는 복제 데이터 전송을 시뮬레이션하여 DRX가 가진 원천적인 drxsim은 drx가 가진 원천적인 복제 성능을 측정할 수 있는 환경을 제공합니다. I/O 시뮬레이션을 쓰면 제공하는 도구입니다. 이를 위해 drxsim은 bsr 과의 네트워크 연결, 최대 성능 측정을 위한 무제한의 복제 데이터 전송을 시뮬레이션 합니다.  로컬/원격 drx 서비스만 구동해 놓으면 drxsim 자체적으로 처리하기 때문에 복제 리소스(디스크, 네트워크 연결)들을 미리 준비해서 구성해야하는 부담도 덜어줍니다. 는 준비하지 않아도 됩니다.

주요 기능

  • bsr 연결 시뮬레이션
    • Acceptor/Connector 두 채널의 연결을 시뮬레이션
  • 데이터 전송
    • DRX의 성능 측정을 위해 하드디스크 액세스 없이 대량의 데이터를 전송
    • 데이터 유형
      • zero-fill: 0x00으로 채워진 데이터
      • sequencial: 0x00 ~ 0xFF로 순차적으로 증가하는 데이터
      • random: 랜덤 생성된 데이터
      • 파일 지정: 지정된 파일의 내용을 순환하며 전송
  • 데이터 무결성 검사
    • 성능을 우선시하기 위해, 패킷 헤더와 데이터 시작/끝부분만 판단하는 저수준의 데이터 무결성 점검 기능이 포함됨 (CRC체크)

사용 방법

Code Block
languagetext
themeRDark
titledrbdsim
[root@proxy1 drxsim_demo]# ./drxsim
Usage: .\drxsim.exe [options] command {command_arguments...}
Global options:
  -h [ --help ]                         Help message.
  -l [ --stdout-log-level ] arg (=info) Standard output log level
  -f [ --file-log-level ] arg (=debug)  File log level
  -o [ --output ] arg                   Output file
  --command arg                         Command to execute
  --subargs arg                         Arguments for command

Commands:
  standby, control, wait, send-once, send

Log levels:
  trace(T), debug(D), info(I), warning(W), error(E), critical(C), off(O)

 * last modified : Nov 19 2018, 17:41:41

...

  • l / stdout-log-level: 화면에 출력되는 로그의 레벨 지정
  • f / file-log-level: 파일로 출력되는 로그의 레벨 지정
  • o / output: 로그를 저장할 파일명을 지정

단독 실행 모드

wait 모드

usage: drxsim [options] wait peer_ip peer_port

...

중간의 접속 오류는 원격 drxsim이 아직 가동중이 아니기 때문에 발생한 것이다.

send-once 모드

usage: drxsim [options] send-once peer_ip peer_port

...

데이터 전송이 이루어지면 B/W 측정 결과가 출력된다. B/W는 초당 한번 출력되고 총 4개의 과거 데이터를 합산하여 평균 값을 사용하므로, 한번의 데이터 전송으로 4초간의 B/W 측정 결과가 출력되었다.

send 모드

usage: drxsim [options] send peer_ip peer_port

...

Code Block
languagetext
themeRDark
[root@proxy1 drxsim_demo]# ./drxsim send -p 5000 200.60.211.252 5000 -s 5 -b 6G -t s
[08:46:23.997586] [t83947] [app:info] Start
[08:46:23.998114] [t83947] [resource:info] Start (Listen 5000, Peer 200.60.211.252:5000)
[08:46:23.998241] [t83947] [resource:info] [C] Connect to 200.60.211.252:5000
[08:46:23.998289] [t83947] [resource:info] [A] Listen 0.0.0.0:5000
[08:46:23.998292] [t83947] [resource:info] [A] Accept...
[08:46:23.998488] [t83950] [resource:error] [C] Can't connect to 200.60.211.252:5000. 연결이 거부됨
[08:46:25.167158] [t83950] [resource:info] [A] Accepted 200.60.211.252:43890
[08:46:25.199745] [t83950] [resource:info] [C] Connected. Send magic packet
[08:46:25.199780] [t83951] [resource:info] [C:meta] Start process
[08:46:25.199793] [t83951] [resource:info] [A:data] Start process
[08:46:25.199800] [t83951] [resource:info] [repl_test] Prepare test...
[08:46:25.199888] [t83951] [resource:info] [repl_test] Start replication test (duration: 5s, limits: 6.00 Gbps, packet_type: sequencial)
[08:46:26.199980] [t83950] [resource:info] [statistics] TX Bandwidth: 6.00 Gbps / 715.66 MB/s, RX Bandwitdh: 0.00 bps / 0.00 B/s
[08:46:27.199975] [t83951] [resource:info] [statistics] TX Bandwidth: 6.00 Gbps / 715.50 MB/s, RX Bandwitdh: 0.00 bps / 0.00 B/s
[08:46:28.199975] [t83950] [resource:info] [statistics] TX Bandwidth: 6.00 Gbps / 715.45 MB/s, RX Bandwitdh: 0.00 bps / 0.00 B/s
[08:46:29.199977] [t83951] [resource:info] [statistics] TX Bandwidth: 6.00 Gbps / 715.42 MB/s, RX Bandwitdh: 0.00 bps / 0.00 B/s
[08:46:30.199901] [t83951] [resource:info] [repl_test] Test finished
[08:46:30.199974] [t83950] [resource:info] [statistics] TX Bandwidth: 6.00 Gbps / 715.31 MB/s, RX Bandwitdh: 0.00 bps / 0.00 B/s
[08:46:31.199971] [t83951] [resource:info] [statistics] TX Bandwidth: 4.50 Gbps / 536.48 MB/s, RX Bandwitdh: 0.00 bps / 0.00 B/s
[08:46:32.199997] [t83950] [resource:info] [statistics] TX Bandwidth: 3.00 Gbps / 357.64 MB/s, RX Bandwitdh: 0.00 bps / 0.00 B/s
[08:46:33.200004] [t83951] [resource:info] [statistics] TX Bandwidth: 1.50 Gbps / 178.80 MB/s, RX Bandwitdh: 0.00 bps / 0.00 B/s

대기/제어 모드

standby 모드

usage: drxsim.exe [options] standby

...

Code Block
languagetext
themeRDark
[root@proxy1 drxsim_demo]# ./drxsim standby -p 9101
[08:51:56.413599] [t18932] [app:info] Start standby mode (port: 9101)

control 모드

usage: drxsim.exe [options] control [actions...]

...

이 모드에서 동작의 결과를 얻기 위해서는 로그의 표준 출력을 비활성화해야 한다.

list - 리소스 목록 출력

추가된 리소스의 목록을 출력한다.

Code Block
languagetext
themeRDark
[root@proxy1 drxsim_demo]# ./drxsim control -l=O --json=1 list
{"code": 0, "result": ["r0", "r1"]}
[root@proxy1 drxsim_demo]# ./drxsim control -l=O list
code: 0
result:
  r0
  r1
[root@proxy1 drxsim_demo]# ./drxsim control -l=O -p 9102 list
code: 0
result: empty

add - 리소스 추가

add [resource_name] [listen_ip] [listen_port] [peer_ip] [peer_port]

Code Block
languagetext
themeRDark
[root@proxy1 drxsim_demo]# ./drxsim control -l=O --json=0 -p 9101 add r0 0.0.0.0 9000 127.0.0.1 9001
code: 0
result: ok
[root@proxy1 drxsim_demo]# ./drxsim control -l=O --json=1 -p 9102 add r0 0.0.0.0 9001 127.0.0.1 9000
{"code": 0, "result": "ok"}

del - 리소스 제거

del [resource_name]

Code Block
languagetext
themeRDark
[root@proxy1 drxsim_demo]# ./drxsim control -l=O del r0
code: 0
result: ok
[root@proxy1 drxsim_demo]# ./drxsim control -l=O --json=1 del r0
{"code": -3000, "error": "There is no resource 'r0'.", "result": "failed"}

send - 데이터 전송

send [resource_name] [packet_type or filename] [total_length] [duration] [bps_limit]

...

Code Block
languagetext
themeRDark
[root@proxy1 drxsim_demo]# ./drxsim control -l=O --json=1 -p 9101 send r0 data.db 1G 0 100M
{"code": 0, "result": "ok"}

stop - 데이터 전송 중지

stop [resource_name]

Code Block
languagetext
themeRDark
[root@proxy1 drxsim_demo]# ./drxsim control -l=O --json=1 -p 9101 stop r0
{"code": 0, "result": "ok"}

states - 리소스 상태 출력

states [resource_name or all]

...

Code Block
languagetext
themeRDark
[root@proxy1 drxsim_demo]# ./drxsim control -l=O --json=0 -p 9101 states r0
code: 0
result:
  rx_bps: 0
  rx_bps_to_human: 0.00 bps
  state: connected
  testing: true
  tx_bps: 12501528
  tx_bps_to_human: 100.01 Mbps
[root@proxy1 drxsim_demo]# ./drxsim control -l=O --json=1 -p 9102 states r0
{"code": 0, "result": {"rx_bps": 12501528, "rx_bps_to_human": "100.01 Mbps", "state": "connected", "testing": false, "tx_bps": 0, "tx_bps_to_human": "0.00 bps"}}
[root@proxy1 drxsim_demo]# ./drxsim control -l=O --json=0 -p 9101 states all
code: 0
result:
  r0:
    rx_bps: 0
    rx_bps_to_human: 0.00 bps
    state: connected
    testing: false
    tx_bps: 0
    tx_bps_to_human: 0.00 bps
[root@proxy1 drxsim_demo]# ./drxsim control -l=O --json=1 -p 9102 states all
{"code": 0, "result": {"r0": {"rx_bps": 0, "rx_bps_to_human": "0.00 bps", "state": "connected", "testing": false, "tx_bps": 0, "tx_bps_to_human": "0.00 bps"}}}

quit - 종료

대기모드인 drxsim을 종료한다. 성공시에는 별도의 출력이 없다.

...