bonding: Add tlb_dynamic_lb parameter for tlb mode
The aggresive load balancing causes packet re-ordering as active flows are moved from a slave to another within the group. Sometime this aggresive lb is not necessary if the preference is for less re-ordering. This parameter if used with value "0" disables this dynamic flow shuffling minimizing packet re-ordering. Of course the side effect is that it has to live with the static load balancing that the hashing distribution provides. This impact is less severe if the correct xmit-hashing-policy is used for the tlb setup. The default value of the parameter is set to "1" mimicing the earlier behavior. Ran the netperf test with 200 stream for 1 min between two hosts with 4x1G trunk (xmit-lb mode with xmit-policy L3+4) before and after these changes. Following was the command used for those 200 instances - netperf -t TCP_RR -l 60 -s 5 -H <host> -- -r81920,81920 Transactions per second: Before change: 1,367.11 After change: 1,470.65 Change-Id: Ie3f75c77282cf602e83a6e833c6eb164e72a0990 Signed-off-by: Mahesh Bandewar <maheshb@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
f05b42eaa2
commit
e9f0fb8849
@@ -70,6 +70,8 @@ static int bond_option_mode_set(struct bonding *bond,
|
||||
const struct bond_opt_value *newval);
|
||||
static int bond_option_slaves_set(struct bonding *bond,
|
||||
const struct bond_opt_value *newval);
|
||||
static int bond_option_tlb_dynamic_lb_set(struct bonding *bond,
|
||||
const struct bond_opt_value *newval);
|
||||
|
||||
|
||||
static const struct bond_opt_value bond_mode_tbl[] = {
|
||||
@@ -179,6 +181,12 @@ static const struct bond_opt_value bond_lp_interval_tbl[] = {
|
||||
{ NULL, -1, 0},
|
||||
};
|
||||
|
||||
static const struct bond_opt_value bond_tlb_dynamic_lb_tbl[] = {
|
||||
{ "off", 0, 0},
|
||||
{ "on", 1, BOND_VALFLAG_DEFAULT},
|
||||
{ NULL, -1, 0}
|
||||
};
|
||||
|
||||
static const struct bond_option bond_opts[] = {
|
||||
[BOND_OPT_MODE] = {
|
||||
.id = BOND_OPT_MODE,
|
||||
@@ -364,6 +372,15 @@ static const struct bond_option bond_opts[] = {
|
||||
.flags = BOND_OPTFLAG_RAWVAL,
|
||||
.set = bond_option_slaves_set
|
||||
},
|
||||
[BOND_OPT_TLB_DYNAMIC_LB] = {
|
||||
.id = BOND_OPT_TLB_DYNAMIC_LB,
|
||||
.name = "dynamic_lb",
|
||||
.desc = "Enable dynamic flow shuffling",
|
||||
.unsuppmodes = BOND_MODE_ALL_EX(BIT(BOND_MODE_TLB)),
|
||||
.values = bond_tlb_dynamic_lb_tbl,
|
||||
.flags = BOND_OPTFLAG_IFDOWN,
|
||||
.set = bond_option_tlb_dynamic_lb_set,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
@@ -1337,3 +1354,13 @@ err_no_cmd:
|
||||
ret = -EPERM;
|
||||
goto out;
|
||||
}
|
||||
|
||||
static int bond_option_tlb_dynamic_lb_set(struct bonding *bond,
|
||||
const struct bond_opt_value *newval)
|
||||
{
|
||||
pr_info("%s: Setting dynamic-lb to %s (%llu)\n",
|
||||
bond->dev->name, newval->string, newval->value);
|
||||
bond->params.tlb_dynamic_lb = newval->value;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user