2014-12-29 06:19:09

by Sujith Manoharan

[permalink] [raw]
Subject: [PATCH] ath10k: Enable RX batching

From: Sujith Manoharan <[email protected]>

This feature allows the FW to batch RX indications,
reducing the rate of host interrupt generation, which
in turn reduces CPU load. Currently, this is enabled
only for the 10.2 firmware.

Signed-off-by: Sujith Manoharan <[email protected]>
---
drivers/net/wireless/ath/ath10k/wmi.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c
index b103122..aad08a2 100644
--- a/drivers/net/wireless/ath/ath10k/wmi.c
+++ b/drivers/net/wireless/ath/ath10k/wmi.c
@@ -3710,7 +3710,7 @@ static struct sk_buff *ath10k_wmi_10_2_op_gen_init(struct ath10k *ar)
struct wmi_init_cmd_10_2 *cmd;
struct sk_buff *buf;
struct wmi_resource_config_10x config = {};
- u32 len, val;
+ u32 len, val, features = 0;

config.num_vdevs = __cpu_to_le32(TARGET_10X_NUM_VDEVS);
config.num_peers = __cpu_to_le32(TARGET_10X_NUM_PEERS);
@@ -3764,6 +3764,9 @@ static struct sk_buff *ath10k_wmi_10_2_op_gen_init(struct ath10k *ar)

cmd = (struct wmi_init_cmd_10_2 *)buf->data;

+ features |= WMI_10_2_RX_BATCH_MODE;
+ cmd->resource_config.feature_mask = __cpu_to_le32(features);
+
memcpy(&cmd->resource_config.common, &config, sizeof(config));
ath10k_wmi_put_host_mem_chunks(ar, &cmd->mem_chunks);

--
2.2.1



2015-01-02 13:33:30

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH] ath10k: Enable RX batching

Sujith Manoharan <[email protected]> writes:

> Kalle Valo wrote:
>> > Along with the other patch and an internal fix,
>> > UDP RX increased to about 950 Mbps.
>>
>> What was the number before?
>
> It was about 600 Mbps. Maybe slightly higher, but the CPU
> was maxed out by the torrent of tasklets trying to
> replenish HTT buffers.

Wow, that's a huge improvement.

--
Kalle Valo

2015-01-02 08:50:09

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH] ath10k: Enable RX batching

Sujith Manoharan <[email protected]> writes:

> Along with the other patch and an internal fix,
> UDP RX increased to about 950 Mbps.

What was the number before?

--
Kalle Valo

2015-01-02 08:39:39

by Sujith Manoharan

[permalink] [raw]
Subject: Re: [PATCH] ath10k: Enable RX batching

Kalle Valo wrote:
> Any throughput improvements?

Along with the other patch and an internal fix,
UDP RX increased to about 950 Mbps.

Sujith

2015-01-02 10:41:13

by Sujith Manoharan

[permalink] [raw]
Subject: Re: [PATCH] ath10k: Enable RX batching

Kalle Valo wrote:
> > Along with the other patch and an internal fix,
> > UDP RX increased to about 950 Mbps.
>
> What was the number before?

It was about 600 Mbps. Maybe slightly higher, but the CPU
was maxed out by the torrent of tasklets trying to
replenish HTT buffers.

Sujith

2015-01-12 11:56:31

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH] ath10k: Enable RX batching

Sujith Manoharan <[email protected]> writes:

> From: Sujith Manoharan <[email protected]>
>
> This feature allows the FW to batch RX indications,
> reducing the rate of host interrupt generation, which
> in turn reduces CPU load. Currently, this is enabled
> only for the 10.2 firmware.
>
> Signed-off-by: Sujith Manoharan <[email protected]>

Thanks, applied.

--
Kalle Valo

2015-01-02 07:46:06

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH] ath10k: Enable RX batching

Sujith Manoharan <[email protected]> writes:

> From: Sujith Manoharan <[email protected]>
>
> This feature allows the FW to batch RX indications,
> reducing the rate of host interrupt generation, which
> in turn reduces CPU load. Currently, this is enabled
> only for the 10.2 firmware.
>
> Signed-off-by: Sujith Manoharan <[email protected]>

Any throughput improvements?

Also I simplified the patch a bit in ath-next-test:

--- a/drivers/net/wireless/ath/ath10k/wmi.c
+++ b/drivers/net/wireless/ath/ath10k/wmi.c
@@ -3710,7 +3710,7 @@ static struct sk_buff *ath10k_wmi_10_2_op_gen_init(struct ath10k *ar)
struct wmi_init_cmd_10_2 *cmd;
struct sk_buff *buf;
struct wmi_resource_config_10x config = {};
- u32 len, val, features = 0;
+ u32 len, val, features;

config.num_vdevs = __cpu_to_le32(TARGET_10X_NUM_VDEVS);
config.num_peers = __cpu_to_le32(TARGET_10X_NUM_PEERS);
@@ -3764,7 +3764,7 @@ static struct sk_buff *ath10k_wmi_10_2_op_gen_init(struct ath10k *ar)

cmd = (struct wmi_init_cmd_10_2 *)buf->data;

- features |= WMI_10_2_RX_BATCH_MODE;
+ features = WMI_10_2_RX_BATCH_MODE;
cmd->resource_config.feature_mask = __cpu_to_le32(features);

memcpy(&cmd->resource_config.common, &config, sizeof(config));


--
Kalle Valo