mirror of
https://github.com/zeromq/libzmq.git
synced 2025-10-27 02:53:12 +01:00
Better script for performance tests
This commit is contained in:
@@ -1,17 +1,21 @@
|
||||
#!/usr/bin/python
|
||||
#!/usr/bin/python3
|
||||
|
||||
#
|
||||
# This script assumes that a CSV file produced by "generate_csv.sh" is provided as input
|
||||
# This script assumes that the set of CSV files produced by "generate_csv.sh" is provided as input
|
||||
# and that locally there is the "results" folder.
|
||||
#
|
||||
|
||||
# configurable values:
|
||||
INPUT_FILE_PUSHPULL_TCP_THROUGHPUT="pushpull_tcp_thr_results.csv"
|
||||
INPUT_FILE_PUSHPULL_INPROC_THROUGHPUT="pushpull_inproc_thr_results.csv"
|
||||
INPUT_FILE_PUBSUBPROXY_INPROC_THROUGHPUT="pubsubproxy_inproc_thr_results.csv"
|
||||
INPUT_FILE_REQREP_TCP_LATENCY="reqrep_tcp_lat_results.csv"
|
||||
INPUT_FILE_PUSHPULL_TCP_THROUGHPUT="results/pushpull_tcp_thr_results.csv"
|
||||
INPUT_FILE_PUSHPULL_INPROC_THROUGHPUT="results/pushpull_inproc_thr_results.csv"
|
||||
INPUT_FILE_PUBSUBPROXY_INPROC_THROUGHPUT="results/pubsubproxy_inproc_thr_results.csv"
|
||||
INPUT_FILE_REQREP_TCP_LATENCY="results/reqrep_tcp_lat_results.csv"
|
||||
|
||||
|
||||
# dependencies
|
||||
#
|
||||
# pip3 install matplotlib
|
||||
#
|
||||
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
@@ -19,31 +23,48 @@ import numpy as np
|
||||
|
||||
# functions
|
||||
|
||||
def plot_throughput(csv_filename, title):
|
||||
def plot_throughput(csv_filename, title, force_10gb_limits=False):
|
||||
message_size_bytes, message_count, pps, mbps = np.loadtxt(csv_filename, delimiter=',', unpack=True)
|
||||
plt.semilogx(message_size_bytes, pps / 1e6, label='PPS [Mmsg/s]', marker='x')
|
||||
plt.semilogx(message_size_bytes, mbps / 1e3, label='Throughput [Mb/s]', marker='o')
|
||||
|
||||
fig, ax1 = plt.subplots()
|
||||
|
||||
# PPS axis
|
||||
color = 'tab:red'
|
||||
ax1.set_xlabel('Message size [B]')
|
||||
ax1.set_ylabel('PPS [Mmsg/s]', color=color)
|
||||
ax1.semilogx(message_size_bytes, pps / 1e6, label='PPS [Mmsg/s]', marker='x', color=color)
|
||||
ax1.tick_params(axis='y', labelcolor=color)
|
||||
|
||||
# GBPS axis
|
||||
color = 'tab:blue'
|
||||
ax2 = ax1.twinx() # instantiate a second axes that shares the same x-axis
|
||||
ax2.set_ylabel('Throughput [Gb/s]', color=color)
|
||||
ax2.semilogx(message_size_bytes, mbps / 1e3, label='Throughput [Gb/s]', marker='o')
|
||||
if force_10gb_limits:
|
||||
ax2.set_yticks(np.arange(0, 11, 1))
|
||||
ax2.tick_params(axis='y', labelcolor=color)
|
||||
ax2.grid(True)
|
||||
|
||||
plt.xlabel('Message size [B]')
|
||||
plt.title(title)
|
||||
plt.legend()
|
||||
plt.show()
|
||||
fig.tight_layout() # otherwise the right y-label is slightly clippe
|
||||
plt.savefig(csv_filename.replace('.csv', '.png'))
|
||||
plt.show()
|
||||
|
||||
def plot_latency(csv_filename, title):
|
||||
message_size_bytes, message_count, lat = np.loadtxt(csv_filename, delimiter=',', unpack=True)
|
||||
plt.semilogx(message_size_bytes, lat, label='Latency [us]', marker='o')
|
||||
|
||||
plt.xlabel('Message size [B]')
|
||||
plt.ylabel('Latency [us]')
|
||||
plt.grid(True)
|
||||
plt.title(title)
|
||||
plt.legend()
|
||||
plt.show()
|
||||
plt.savefig(csv_filename.replace('.csv', '.png'))
|
||||
plt.show()
|
||||
|
||||
|
||||
# main
|
||||
|
||||
plot_throughput(INPUT_FILE_PUSHPULL_TCP_THROUGHPUT, 'ZeroMQ PUSH/PULL socket throughput, TCP transport')
|
||||
plot_throughput(INPUT_FILE_PUSHPULL_TCP_THROUGHPUT, 'ZeroMQ PUSH/PULL socket throughput, TCP transport', force_10gb_limits=True)
|
||||
plot_throughput(INPUT_FILE_PUSHPULL_INPROC_THROUGHPUT, 'ZeroMQ PUSH/PULL socket throughput, INPROC transport')
|
||||
plot_throughput(INPUT_FILE_PUBSUBPROXY_INPROC_THROUGHPUT, 'ZeroMQ PUB/SUB PROXY socket throughput, INPROC transport')
|
||||
plot_latency(INPUT_FILE_REQREP_TCP_LATENCY, 'ZeroMQ REQ/REP socket latency, TCP transport')
|
||||
|
||||
Reference in New Issue
Block a user