In [5]:
%pylab inline
import re
import pandas as pd
import log_query as lq
# Import DB
store = lq.LogQuery("../../log.h5")
df_write = store.select(where="message_type == 'sdram' and type == 'write'", columns=['time', 'len'])
df_read = store.select(where="message_type == 'sdram' and type == 'read'", columns=['time', 'len'])
In [6]:
bins = 3000
max_time = max( df_read['time'].max(), df_write['time'].max())
bin_time = (max_time + 1) / bins
time_range = np.arange(0, max_time + 1, (max_time+1)/bins)
df_read['bin'] = np.digitize(df_read['time'], time_range)
df_write['bin'] = np.digitize(df_write['time'], time_range)
df_read_group = df_read.groupby(['bin'])
df_write_group = df_write.groupby(['bin'])
ser_read_result = df_read_group['len'].aggregate(np.sum)
ser_write_result = df_write_group['len'].aggregate(np.sum)
binned_read = pd.DataFrame(ser_read_result).reset_index()
binned_write = pd.DataFrame(ser_write_result).reset_index()
binned_read['bin'] = binned_read['bin'] - 1
binned_write['bin'] = binned_write['bin'] - 1
df_result_read = pd.DataFrame()
df_result_write = pd.DataFrame()
df_result_read['time_ps'] = np.arange(0, max_time + 1, (max_time+1)/bins)
df_result_write['time_ps'] = np.arange(0, max_time + 1, (max_time+1)/bins)
df_result_read = pd.DataFrame.merge(df_result_read, binned_read, left_index=True, right_on='bin', how='outer')
df_result_write = pd.DataFrame.merge(df_result_write, binned_write, left_index=True, right_on='bin', how='outer')
df_result_read['megabytespersecond'] = ((df_result_read['len'] / 1e6) / (bin_time / 1e9))
df_result_write['megabytespersecond'] = ((df_result_write['len'] / 1e6) / (bin_time / 1e9))
In [7]:
fig, axes = plt.subplots(figsize=(20, 5))
axes.plot(df_result_read['time_ps'], df_result_read['megabytespersecond'], label="read bandwidth")
axes.plot(df_result_write['time_ps'], df_result_write['megabytespersecond'], label="write bandwidth")
axes.set_ylabel("MBit/s")
axes.set_xlabel("simulated time in ps")
axes.legend()
axes.grid()
In [8]:
from statsmodels.nonparametric.kde import KDEUnivariate
mps = df_result_read['megabytespersecond']
mps_KDE = KDEUnivariate(mps)
mps_KDE.fit()
#density = kde.gaussian_kde(mps.values)
plt.plot(mps_KDE.support, mps_KDE.density)
Out[8]:
In [8]:
In [8]: