mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-30 21:44:27 -04:00 
			
		
		
		
	The removed patches were applied upstream. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
		
			
				
	
	
		
			82 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From: Felix Fietkau <nbd@nbd.name>
 | |
| Date: Fri, 24 Jul 2020 20:25:07 +0200
 | |
| Subject: [PATCH] mac80211: improve AQL tx airtime estimation
 | |
| 
 | |
| AQL does not take into account that most HT/VHT/HE traffic is A-MPDU aggregated.
 | |
| Because of that, the per-packet airtime overhead is vastly overestimated.
 | |
| Improve it by assuming an average aggregation length of 16 for non-legacy
 | |
| traffic if not using the VO AC queue.
 | |
| This should improve performance with high data rates, especially with multiple
 | |
| stations
 | |
| 
 | |
| Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | |
| ---
 | |
| 
 | |
| --- a/net/mac80211/airtime.c
 | |
| +++ b/net/mac80211/airtime.c
 | |
| @@ -551,7 +551,7 @@ EXPORT_SYMBOL_GPL(ieee80211_calc_tx_airt
 | |
|  u32 ieee80211_calc_expected_tx_airtime(struct ieee80211_hw *hw,
 | |
|  				       struct ieee80211_vif *vif,
 | |
|  				       struct ieee80211_sta *pubsta,
 | |
| -				       int len)
 | |
| +				       int len, bool ampdu)
 | |
|  {
 | |
|  	struct ieee80211_supported_band *sband;
 | |
|  	struct ieee80211_chanctx_conf *conf;
 | |
| @@ -572,10 +572,26 @@ u32 ieee80211_calc_expected_tx_airtime(s
 | |
|  	if (pubsta) {
 | |
|  		struct sta_info *sta = container_of(pubsta, struct sta_info,
 | |
|  						    sta);
 | |
| +		struct ieee80211_tx_rate *rate = &sta->tx_stats.last_rate;
 | |
| +		u32 airtime;
 | |
|  
 | |
| -		return ieee80211_calc_tx_airtime_rate(hw,
 | |
| -						      &sta->tx_stats.last_rate,
 | |
| -						      band, len);
 | |
| +		if (!(rate->flags & (IEEE80211_TX_RC_VHT_MCS |
 | |
| +				     IEEE80211_TX_RC_MCS)))
 | |
| +			ampdu = false;
 | |
| +
 | |
| +		/*
 | |
| +		 * Assume that HT/VHT transmission on any AC except VO will
 | |
| +		 * use aggregation. Since we don't have reliable reporting
 | |
| +		 * of aggregation length, assume an average of 16.
 | |
| +		 * This will not be very accurate, but much better than simply
 | |
| +		 * assuming un-aggregated tx.
 | |
| +		 */
 | |
| +		airtime = ieee80211_calc_tx_airtime_rate(hw, rate, band,
 | |
| +							 ampdu ? len * 16 : len);
 | |
| +		if (ampdu)
 | |
| +			airtime /= 16;
 | |
| +
 | |
| +		return airtime;
 | |
|  	}
 | |
|  
 | |
|  	if (!conf)
 | |
| --- a/net/mac80211/ieee80211_i.h
 | |
| +++ b/net/mac80211/ieee80211_i.h
 | |
| @@ -2294,7 +2294,7 @@ extern const struct ethtool_ops ieee8021
 | |
|  u32 ieee80211_calc_expected_tx_airtime(struct ieee80211_hw *hw,
 | |
|  				       struct ieee80211_vif *vif,
 | |
|  				       struct ieee80211_sta *pubsta,
 | |
| -				       int len);
 | |
| +				       int len, bool ampdu);
 | |
|  #ifdef CPTCFG_MAC80211_NOINLINE
 | |
|  #define debug_noinline noinline
 | |
|  #else
 | |
| --- a/net/mac80211/tx.c
 | |
| +++ b/net/mac80211/tx.c
 | |
| @@ -3707,10 +3707,11 @@ encap_out:
 | |
|  
 | |
|  	if (vif &&
 | |
|  	    wiphy_ext_feature_isset(local->hw.wiphy, NL80211_EXT_FEATURE_AQL)) {
 | |
| +		bool ampdu = txq->ac != IEEE80211_AC_VO;
 | |
|  		u32 airtime;
 | |
|  
 | |
|  		airtime = ieee80211_calc_expected_tx_airtime(hw, vif, txq->sta,
 | |
| -							     skb->len);
 | |
| +							     skb->len, ampdu);
 | |
|  		if (airtime) {
 | |
|  			airtime = ieee80211_info_set_tx_time_est(info, airtime);
 | |
|  			ieee80211_sta_update_pending_airtime(local, tx.sta,
 |