jeremyczhen / fdbus

FDBus - Fast Distributed Bus
https://blog.csdn.net/jeremy_cz/article/details/89060291
161 stars 85 forks source link

fdbus invoke 接口交叉编译在QNX系统上,for循环调用不成功 #16

Open HSnowh opened 4 years ago

HSnowh commented 4 years ago

前提:fdbus库交叉编译在QNX系统上运行 动作:执行fdbus库自带的性能测试代码:fdbxserver 与 fdbxclient, 不加任何参数 附加动作:在源码中的onInvoke和onReply接口的开始加上了printf打印,用来表明进入该函数 运行结果:只打印了6次onInvoke,1次onReply 其它:在自己编写的测试代码中,for循环异步调用invoke接口,10次可以执行,1000次就不可以了,现象同上

jeremyczhen commented 3 years ago

首先看一下使用的是不是最新版本。其次解释一下性能测试过程:首先在一端把fdbxserver启动起来,然后在另一端把fdbxclient启动起来,后者会发送大量数据给前者,前者再把收到的数据复制一份reply给后者。 fdbxclient是以burst位单位来发送,每个burst包含若干个block的连续数据。为了测试出准确的性能,在启动fdbxclient时需要把参数调整好,以期达到最佳效果,这些参数包括: -d delay:两个burst之间插入的时间间隔大小,以微秒为单位;默认是0 -s burst size: 一个burst包含的block个数,默认是16 -b block size: 每个block包含的字节数,默认是1024

当以默认参数运行时,发送的数据量是很大的,会造成阻塞。是否发生阻塞可以看打印出来的“Pending Req”列,如果不断在增大说明阻塞严重,需要用-d插入延时,直到稳定为0或1为止。为了调整测试压力可以调整-b和-s:加大-b可以增加一次连续传输的数量,减少消息交互上的开销;加大--s可以在两个延时之间插入更多block。

调整以上参数使得Data Rate达到最大值,同时“Pending Req”维持很小,Failure为0。注意Data Rate是单向的带宽。实际通信是双向的,双向带宽要x2。

另外一个性能指标是延时。测延时时要把-d放得比较大,-s放小,确保“Pending Req”一直为0。这时候由于没有消息堆积,测出的delay就是线路上花费的时间,也就是从client到server,再从server返回这样一个来回花费的时间。