Versions Compared

Key

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

Table of Contents
maxLevel3

개요

drxsim은 drx가 가진 원천적인 복제 성능을 측정할 수 있는 환경을 제공하는 도구입니다. 이를 위해 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을 종료한다. 성공시에는 별도의 출력이 없다.

...