[PATCH] ath10k: Implement get_expected_throughput callback

akolli at codeaurora.org akolli at codeaurora.org
Fri Mar 23 06:41:48 PDT 2018


Hi Sven,

Thanks for the review.

On 2018-03-23 13:39, Sven Eckelmann wrote:
> On Freitag, 23. März 2018 13:07:00 CET Anilkumar Kolli wrote:
> [...]
>> +static u32 ath10k_get_expected_throughput(struct ieee80211_hw *hw,
>> +                                         struct ieee80211_sta *sta)
>> +{
>> +       struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
>> +       u32 tx_bitrate;
>> +
>> +       tx_bitrate = cfg80211_calculate_bitrate(&arsta->txrate);
>> +       ewma_sta_txrate_add(&arsta->ave_sta_txrate, tx_bitrate);
>> +
>> +       return ewma_sta_txrate_read(&arsta->ave_sta_txrate);
>>  }
> 
> Antonio and Felix, please correct me when this statement is incorrect.
> 
> The expected_throughput as initially implemented for minstrel(_ht) is 
> not
> about the raw physical bitrate but about the throughput which is 
> expected for
> things running on top of the wifi link. See
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cca674d47e59665630f3005291b61bb883015fc5
> for more details
> 
> when I interpret your change correctly then your it doesn't get the
> information about packet loss or aggregation and doesn't do anything 
> convert
> from raw physical rate to something the user could get see. It will 
> just
> overestimate the throughput for ath10k links and thus give wrong 
> information
> to routing algorithms. This could for example cause them to prefer 
> links over
> ath10k based hw when mt76 would actually provide a significant better
> throughput.
> 
> Beside that - why is the ave_sta_txrate only filled when with new 
> information
> when someone requests the current expected_throughput via
> get_expected_throughput. I would have expected that it is filled 
> everytime you
> get new information about the current rate from the firmware
> (ath10k_sta_statistics).
> 
Yes. ideally it should be doing the rate avg. of all the sent packets.

>> @@ -7686,6 +7686,22 @@ static void ath10k_sta_statistics(struct 
>> ieee80211_hw *hw,
>>         }
>>         sinfo->txrate.flags = arsta->txrate.flags;
>>         sinfo->filled |= 1ULL << NL80211_STA_INFO_TX_BITRATE;
>> +
>> +       sinfo->expected_throughput =
>> +                               
>> ewma_sta_txrate_read(&arsta->ave_sta_txrate);
>> +       sinfo->filled |= BIT(NL80211_STA_INFO_EXPECTED_THROUGHPUT);
>> +}
> 
> This brings me directly to the next point. Why are you changing these 
> values
> here? Isn't sta_set_sinfo is expected to do that? This is at least what 
> we
> expect how it works when we call cfg80211_get_station() in batman-adv.
> 

Yes. This looks redundant, I will remove this line,
  sinfo->filled |= BIT(NL80211_STA_INFO_EXPECTED_THROUGHPUT);

I will make these changes and send v2.

Thanks,
Anil.



More information about the ath10k mailing list