Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »

Overview

DRBD is a host-based software replication that has a fundamental limitation on replication I / O transfer performance. These limits are measured at up to 5-6G bps transmissions on TCP / IP-based 10Gbps networks. Therefore, in such environments, it is difficult to measure the underlying performance of DRX's buffering or compression. In order to measure the performance of any equipment or software, data must be input without limitation and the resulting output can be calculated. In this regard, drbdsim is a tool developed to solve performance measurement problems.

drbdsim simulates a basic drbd connection and simulates unlimited replicated data transfers to provide an environment for measuring the inherent performance of DRX. The added advantage of I / O simulation also eliminates the need to pre-configure the replication resources (disks, network connections) that need to be prepared for testing.

Main Functions

  • drbd connection simulation
    • Simulates connection of Acceptor/Connector's two channels
  • data transmission
    • Transfer large amounts of data without hard disk access to measure DRX performance
    • Data type
      • zero-fill: Data filled with 0x00
      • sequencial: Data that sequentially increases from 0x00 to 0xFF
      • random: Randomly generated data
      • Specifying a file: Repeatedly sending the contents of the specified file
  • Data Integrity Check
    • Includes low-level data integrity checking to determine only packet headers and data start / end to prioritize performance (CRC check)

How to use

drbdsim
[root@proxy1 drbdsim_demo]# ./drbdsim
Usage: .\drbdsim.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

There are three modes of drbdsim: wait, send-once, and send. If mode is not specified, help is displayed.

공통 옵션:

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

단독 실행 모드

wait 모드

usage: drbdsim [options] wait peer_ip peer_port

가장 기본이 되는 모드로, 원격 drbdsim과의 연결을 수립하고 대기한다.

옵션:

  • i / ip: Listen IP 지정 (기본값: 0.0.0.0)
  • p / port: Listen port 지정 (기본값: 7780)
  • peer_ip: 원격 drbdsim 또는 DRX의 IP
  • peer_port: 원격 drbdsim 또는 DRX의 Port
wait 모드 실행의 예
[root@proxy1 drbdsim_demo]# ./drbdsim wait -p 5000 200.60.211.252 5000
[08:33:24.794367] [t81616] [app:info] Start
[08:33:24.794482] [t81616] [resource:info] Start (Listen 5000, Peer 200.60.211.252:5000)
[08:33:24.794589] [t81616] [resource:info] [C] Connect to 200.60.211.252:5000
[08:33:24.794629] [t81616] [resource:info] [A] Listen 0.0.0.0:5000
[08:33:24.794632] [t81616] [resource:info] [A] Accept...
[08:33:24.794823] [t81619] [resource:error] [C] Can't connect to 200.60.211.252:5000. 연결이 거부됨
[08:33:34.653542] [t81619] [resource:info] [A] Accepted 200.60.211.252:41072
[08:33:34.710491] [t81620] [resource:info] [C] Connected. Send magic packet
[08:33:34.710534] [t81619] [resource:info] [C:meta] Start process
[08:33:34.710546] [t81619] [resource:info] [A:data] Start process

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

send-once 모드

usage: drbdsim [options] send-once peer_ip peer_port

데이터 전송이 정상적으로 이루어지는지를 확인하기 위해, 접속 후 한번의 데이터 전송을 수행하는 모드이다.
DRX의 플러그인 사용시 패킷 스니핑을 통해 해당 플러그인의 동작이 정상적으로 이루어지는지 확인하기 위해 제작되었다.

추가 옵션:

  • t / packet-type: 패킷 유형 지정
    • z / zero-fill
    • s / sequencial
    • r / random
  • packet-file: 파일 기반 패킷 지정.
send-once 모드 실행의 예
[root@proxy1 drbdsim_demo]# ./drbdsim send-once -p 5000 -t random 200.60.211.252 5000
[08:38:17.514085] [t82488] [app:info] Start
[08:38:17.514271] [t82488] [resource:info] Start (Listen 5000, Peer 200.60.211.252:5000)
[08:38:17.514398] [t82488] [resource:info] [C] Connect to 200.60.211.252:5000
[08:38:17.514449] [t82488] [resource:info] [A] Listen 0.0.0.0:5000
[08:38:17.514452] [t82488] [resource:info] [A] Accept...
[08:38:17.514650] [t82491] [resource:error] [C] Can't connect to 200.60.211.252:5000. 연결이 거부됨
[08:38:19.558009] [t82491] [resource:info] [A] Accepted 200.60.211.252:41210
[08:38:19.617391] [t82491] [resource:info] [C] Connected. Send magic packet
[08:38:19.617439] [t82492] [resource:info] [C:meta] Start process
[08:38:19.617453] [t82492] [resource:info] [A:data] Start process
[08:38:19.617460] [t82492] [resource:info] [repl_test] Prepare test...
[08:38:19.621709] [t82492] [resource:info] [repl_test] Start packet test (packet_type: random)
[08:38:19.621770] [t82492] [resource:info] [repl_test] Test finished
[08:38:20.621796] [t82491] [resource:info] [statistics] TX Bandwidth: 524.34 Kbps / 64.01 KB/s, RX Bandwitdh: 0.00 bps / 0.00 B/s
[08:38:21.621784] [t82492] [resource:info] [statistics] TX Bandwidth: 262.17 Kbps / 32.00 KB/s, RX Bandwitdh: 0.00 bps / 0.00 B/s
[08:38:22.621789] [t82491] [resource:info] [statistics] TX Bandwidth: 174.78 Kbps / 21.33 KB/s, RX Bandwitdh: 0.00 bps / 0.00 B/s
[08:38:23.621766] [t82492] [resource:info] [statistics] TX Bandwidth: 131.08 Kbps / 16.00 KB/s, RX Bandwitdh: 0.00 bps / 0.00 B/s

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

send 모드

usage: drbdsim [options] send peer_ip peer_port

지속적인 데이터 전송을 수행하는 모드이다. 네트워크 성능이나 DRX의 성능을 측정하기 위해서 사용한다.

추가 옵션:

  • t / packet-type: 패킷 유형 지정
    • z / zero-fill
    • s / sequencial
    • r / random
  • packet-file: 파일 기반 패킷 지정. 지정한 파일의 내용을 반복적으로 전송한다.
  • s / transfer-duration: 전송 시간 지정 (초단위)
  • b / bps-limits: 전송 속도 제한 (bps 단위)
[root@proxy1 drbdsim_demo]# ./drbdsim 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: drbdsim.exe [options] standby

외부 제어를 기다리는 대기 모드이다. 제어를 위해 TCP 포트를 열고 대기한다.

추가 옵션:

  • i / ip: 제어 서버 IP (기본값: 0.0.0.0)
  • p / port: 제어 서버 포트 번호 (기본값: 9101)
[root@proxy1 drbdsim_demo]# ./drbdsim standby -p 9101
[08:51:56.413599] [t18932] [app:info] Start standby mode (port: 9101)

control 모드

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

standby 모드로 실행되어 있는 drbdsim을 제어하는 모드이다.

추가 옵션:

  • i / peer_ip: 제어할 drbdsim의 IP. (기본값: 127.0.0.1)
  • p / peer_port: 제어할 drbdsim의 포트 번호. (기본값: 9091)
  • json: 결과를 JSON 포맷으로 출력. 표준 출력 로그가 Off일 때만 동작한다. (기본값: 0)

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

list - 리소스 목록 출력

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

[root@proxy1 drbdsim_demo]# ./drbdsim control -l=O --json=1 list
{"code": 0, "result": ["r0", "r1"]}
[root@proxy1 drbdsim_demo]# ./drbdsim control -l=O list
code: 0
result:
  r0
  r1
[root@proxy1 drbdsim_demo]# ./drbdsim control -l=O -p 9102 list
code: 0
result: empty

add - 리소스 추가

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

[root@proxy1 drbdsim_demo]# ./drbdsim 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 drbdsim_demo]# ./drbdsim 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]

[root@proxy1 drbdsim_demo]# ./drbdsim control -l=O del r0
code: 0
result: ok
[root@proxy1 drbdsim_demo]# ./drbdsim 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]

옵션 목록:

  • packet_type or filename: 패킷 유형 또는 파일명. 사용가능한 패킷 유형은 단독 실행 모드와 같다.
    • z / zero-fill
    • s / sequencial
    • r / random
  • total_length: 전송할 데이터 길이.
  • duration: 전송 유지 시간. 0이면 무제한이고, 시간안에 지정한 데이터 길이를 다 보낸 경우 전송을 종료한다.
  • bps_limit: 전송 속도 제한. 0이면 무제한이다.
[root@proxy1 drbdsim_demo]# ./drbdsim control -l=O --json=1 -p 9101 send r0 data.db 1G 0 100M
{"code": 0, "result": "ok"}

stop - 데이터 전송 중지

stop [resource_name]

[root@proxy1 drbdsim_demo]# ./drbdsim control -l=O --json=1 -p 9101 stop r0
{"code": 0, "result": "ok"}

states - 리소스 상태 출력

states [resource_name or all]

동작중인 리소스의 상태를 출력한다. 'all'을 입력하면 모든 리소스의 정보가 출력된다.

출력 항목:

  • rx_bps, tx_bps, rx_bps_to_human, tx_bps_to_human: 전송 속도.
  • state: 리소스의 상태
    • connecting: 접속 시도중
    • connected: 접속됨
  • testing: 패킷 전송중인 경우 true, 아니면 false
[root@proxy1 drbdsim_demo]# ./drbdsim 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 drbdsim_demo]# ./drbdsim 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 drbdsim_demo]# ./drbdsim 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 drbdsim_demo]# ./drbdsim 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 - 종료

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

[root@proxy1 drbdsim_demo]# ./drbdsim control -l=O quit
[root@proxy1 drbdsim_demo]# ./drbdsim control -l=O --json=1 quit
{"code": -6000, "error": "Communication error: No connection could be made because the target machine actively refused it", "result": "failed"}



  • No labels