Thanks for making it clear. This may be one of the reasons why I still see 0.1% test failure at 2x standard deviation. The expected number of packet per interface can be as low as 64. Another reason I find to be the variations in hash value computed from packet.
Should we simply do "random_uin32() % #slaves", instead of hmap_random_node(), so that we can avoid your 2nd case? On Wed, May 7, 2014 at 8:07 PM, YAMAMOTO Takashi <yamam...@valinux.co.jp> wrote: >> On Wed, May 7, 2014 at 7:01 PM, YAMAMOTO Takashi <yamam...@valinux.co.jp> >> wrote: >>>> Sorry I was not clear in the commit message. It is the average of the >>>> first interface. I will make it clear before pushing. >>> >>> thanks for clarification. >>> i think the average is not so important. hash colision is. >>> the worst case is, two interfaces in the same bucket, one in the other. >>> in that case, packet distribution would be 1:1:2. >> Would you please explain more? How did you arrive at this >> distribution? Why is this the worst case? > > see hmap_random_node. > > given the number of items is 3, there are a few possible cases: > - a bucket has all 3 items. > - a bucket has 2 items, and another bucket has 1 item. > - 3 buckets, each has 1 item. > > for the first and last cases distribution would be 1:1:1. > > for the 2nd case, each bucket would have the same chance to be selected. > > YAMAMOTO Takashi > >>> your value is safe enough for the distribution. >>> >>> YAMAMOTO Takashi >>> >>>> >>>> On Wed, May 7, 2014 at 6:18 PM, YAMAMOTO Takashi <yamam...@valinux.co.jp> >>>> wrote: >>>>>> Raise the minimal per interface packet distribution from 7 to 24. >>>>>> >>>>>> With 256 packet distributing to 3 interfaces, the expected packets per >>>>>> interface should be 256/3 = 85.3 >>>>>> >>>>>> Tested with 200 runs, the average number of packet per interface is >>>>>> 85.9. close to the expected number, standard deviation within the 200 >>>>>> run is 24.4. Tested with 2x standard deviation with 10K test runs, >>>>>> got around 0.1% failure rate. 2.5x standard deviation passes 100K test >>>>>> runs without failure. >>>>>> >>>>>> Using 2.5x for the unit test, 83.5 - 2.5 * 24.4, Round down to the >>>>>> whole number of 24. >>>>> >>>>> the patch itself looks ok (thus acked-by) but i have a question on >>>>> the commit message. >>>>> why can the average number be larger than the expected number? >>>>> the total number of packets for a run is expected to be exactly 256, >>>>> isn't it? >>>>> >>>>> Acked-by: YAMAMOTO Takashi <yamam...@valinux.co.jp> >>>>> Tested-by: YAMAMOTO Takashi <yamam...@valinux.co.jp> >>>>> >>>>> YAMAMOTO Takashi >>>>> >>>>>> >>>>>> Signed-off-by: Andy Zhou <az...@nicira.com> >>>>>> --- >>>>>> tests/ofproto-dpif.at | 6 +++--- >>>>>> 1 file changed, 3 insertions(+), 3 deletions(-) >>>>>> >>>>>> diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at >>>>>> index c46e997..3723459 100644 >>>>>> --- a/tests/ofproto-dpif.at >>>>>> +++ b/tests/ofproto-dpif.at >>>>>> @@ -191,9 +191,9 @@ AT_CHECK([ovs-appctl dpif/dump-flows br0 |grep tcp > >>>>>> br0_flows.txt]) >>>>>> AT_CHECK([ovs-appctl dpif/dump-flows br1 |grep tcp > br1_flows.txt]) >>>>>> # Make sure there is resonable distribution to all three ports. >>>>>> # We don't want to make this check precise, in case hash function >>>>>> changes. >>>>>> -AT_CHECK([test `grep in_port.4 br1_flows.txt |wc -l` -gt 7]) >>>>>> -AT_CHECK([test `grep in_port.5 br1_flows.txt |wc -l` -gt 7]) >>>>>> -AT_CHECK([test `grep in_port.6 br1_flows.txt |wc -l` -gt 7]) >>>>>> +AT_CHECK([test `grep in_port.4 br1_flows.txt |wc -l` -gt 24]) >>>>>> +AT_CHECK([test `grep in_port.5 br1_flows.txt |wc -l` -gt 24]) >>>>>> +AT_CHECK([test `grep in_port.6 br1_flows.txt |wc -l` -gt 24]) >>>>>> OVS_VSWITCHD_STOP() >>>>>> AT_CLEANUP >>>>>> >>>>>> -- >>>>>> 1.9.1 >>>>>> >>>>>> _______________________________________________ >>>>>> dev mailing list >>>>>> dev@openvswitch.org >>>>>> http://openvswitch.org/mailman/listinfo/dev >>>> _______________________________________________ >>>> dev mailing list >>>> dev@openvswitch.org >>>> http://openvswitch.org/mailman/listinfo/dev >> _______________________________________________ >> dev mailing list >> dev@openvswitch.org >> http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev