Optimization Factor

Optimization of DRX is accomplished by adjusting the DRX internal parameters or by changing the settings of the system so that the buffering and compression functions provided by DRX can achieve optimal performance. The performance of DRX can be buffered up to 6 to 7 Gbps in a 10 Gbps network, and it can be said that the performance is adequate when the compression is 1.5 times more than that. However, these high-performance processing results ​​are based on the assumption that the DRX transmission network bandwidth of the TX side is sufficient, and usually can not show such throughput in the WAN interval. Therefore, in the case of such a high level I/O load state, It is difficult to optimize the performance of DRX in situations where random high level I/O load occurs in such a low transmission band, and it is necessary to check the bandwidth situation of WAN section in advance through proper level simulation for I/O load. DRX provides the drxsim tool to perform these checks.

In general, the network bandwidth can be checked with tools such as iperf, and iperf calculates the maximum bandwidth the network can make. drxsim injects I/O load into DRX from local drxsim and receives remote relayed data from remote drxsim to calculate the throughput that DRX can process on the network. Therefore, DRX will perform best when iperf's result is equal to drxsim's or when drxsim's is greater than it by compression. Please refer to drxsim usage guide for more information on how to use it.

Based on the above, the factors of optimization are summarized as follows:


Latency and throughput optimization on the local I/O side should be handled with optimization on the replication side. For this, please refer to the following.


Performance Indicator

Performance for the DRX can be viewed through the CLI commands provided by the DRX.

BAB Performance : memusage

This command checks the usage rate and latency of the BAB.

Compression performance statistics.: statistics

This command checks the DRX statistics information.

Optimization procedure

DRX can optimize by adjusting the buffer size and compression options.

Buffer size

Size of the buffer is set via "memlimit" value in "proxy" section of the bsr configuration file.

proxy {
	memlimit 1G;
}

Compression type and level

DRX provides the following compression plug-ins.


Type
System
Level range
Remarks
ZLIBSW1~9-
LZ4SW1~9-
NONE--OFF


The command to set the compression plug-in is as follows.

TypeCommandsExample output
ZLIB drx-ctl set compress zlib [level] [connect name] 


< Set compression plug-in to ZLIB >
[root@c73-1 bsr.d]# drx-ctl set compress zlib 1 r0-c73-2-c73-1
r0-c73-2-c73-1: updated.
Result: 1 resource(s) updated.

[root@c73-1 bsr.d]#


LZ4drx-ctl set compress lz4 [level] [connect name] 


< Set compression plug-in to LZ4 >
[root@c73-1 bsr.d]# drx-ctl set compress lz4 1 r0-c73-2-c73-1
r0-c73-2-c73-1: updated.
Result: 1 resource(s) updated.

[root@c73-1 bsr.d]#


NONEdrx-ctl set compress none 0 [connect name] 


< Turn off compression plug-ins >
[root@c73-1 bsr.d]# drx-ctl set compress none 0 r0-c73-2-c73-1
r0-c73-2-c73-1: updated.
Result: 1 resource(s) updated.

[root@c73-1 bsr.d]#



Number of compressing threads

It is possible to change the number of threads processing packets.

The number of threads is set to "process-thread-count" value in the configuration file. If you do not set it or input "-1", it will operate at half the number of CPU cores.

Others

For DRX Appliance, you can perform optimizations on the local replication I/O reception intervals that work with bsr. DRX is primarily designed to perform buffering in the application address space, so performance may vary depending on the receiving performance of the OS kernel of the appliance, which is directly linked to bsr. Therefore, you can tune the receive buffer of this OS kernel socket to further enhance RX receive performance. To ensure that the OS kernel has enough receive buffers, it is necessary to apply the following to the OS kernel.

Linux Kernel Network Parameter

Changing the value using sysctl should be aware that there is a risk that the system will crash.

If you set an unreasonable value to the system, it may stop immediately, so it should be done after enough testing.