qcacmn: Update airtime computation to per AC level

Update airtime computation to per AC level.

Change-Id: Ia8cb890d2f1dc167ec3a2610ff5a70238d55262d
CRs-Fixed: 3281256
This commit is contained in:
Himanshu Batra
2022-09-01 16:15:35 +05:30
committed by Madan Koyyalamudi
parent 6f012336ae
commit 6a5ab907c1
4 changed files with 31 additions and 21 deletions

View File

@@ -2679,7 +2679,7 @@ struct cdp_peer_telemetry_stats {
uint32_t tx_mpdu_total; uint32_t tx_mpdu_total;
uint32_t rx_mpdu_retried; uint32_t rx_mpdu_retried;
uint32_t rx_mpdu_total; uint32_t rx_mpdu_total;
uint8_t airtime_consumption; uint8_t airtime_consumption[WME_AC_MAX];
uint8_t snr; uint8_t snr;
}; };
#endif #endif

View File

@@ -2060,7 +2060,7 @@ void dp_peer_update_telemetry_stats(struct dp_peer *peer)
struct dp_pdev *pdev; struct dp_pdev *pdev;
struct dp_vdev *vdev; struct dp_vdev *vdev;
struct dp_mon_peer *mon_peer = NULL; struct dp_mon_peer *mon_peer = NULL;
uint8_t idx; uint8_t idx, ac;
vdev = peer->vdev; vdev = peer->vdev;
if (!vdev) if (!vdev)
@@ -2076,14 +2076,16 @@ void dp_peer_update_telemetry_stats(struct dp_peer *peer)
mon_peer->stats.tx.retries); mon_peer->stats.tx.retries);
DP_STATS_INC(pdev, telemetry_stats.tx_mpdu_total, DP_STATS_INC(pdev, telemetry_stats.tx_mpdu_total,
mon_peer->stats.tx.tx_mpdus_tried); mon_peer->stats.tx.tx_mpdus_tried);
idx = mon_peer->stats.airtime_consumption.avg_consumption.idx; for (ac = 0; ac < WME_AC_MAX; ac++) {
mon_peer->stats.airtime_consumption.avg_consumption.avg_consumption_per_sec[idx] = idx = mon_peer->stats.airtime_consumption[ac].avg_consumption.idx;
mon_peer->stats.airtime_consumption.consumption; mon_peer->stats.airtime_consumption[ac].avg_consumption.avg_consumption_per_sec[idx] =
mon_peer->stats.airtime_consumption.consumption = 0; mon_peer->stats.airtime_consumption[ac].consumption;
mon_peer->stats.airtime_consumption.avg_consumption.idx++; mon_peer->stats.airtime_consumption[ac].consumption = 0;
if (mon_peer->stats.airtime_consumption.avg_consumption.idx == mon_peer->stats.airtime_consumption[ac].avg_consumption.idx++;
MAX_CONSUMPTION_TIME) if (mon_peer->stats.airtime_consumption[ac].avg_consumption.idx ==
mon_peer->stats.airtime_consumption.avg_consumption.idx = 0; MAX_CONSUMPTION_TIME)
mon_peer->stats.airtime_consumption[ac].avg_consumption.idx = 0;
}
} }
} }
#else #else
@@ -4070,12 +4072,14 @@ void dp_ppdu_desc_user_airtime_consumption_update(
struct cdp_tx_completion_ppdu_user *user) struct cdp_tx_completion_ppdu_user *user)
{ {
struct dp_mon_peer *mon_peer = NULL; struct dp_mon_peer *mon_peer = NULL;
uint8_t ac = 0;
mon_peer = peer->monitor_peer; mon_peer = peer->monitor_peer;
if (qdf_unlikely(!mon_peer)) if (qdf_unlikely(!mon_peer))
return; return;
DP_STATS_INC(mon_peer, airtime_consumption.consumption, ac = TID_TO_WME_AC(user->tid);
DP_STATS_INC(mon_peer, airtime_consumption[ac].consumption,
user->phy_tx_time_us); user->phy_tx_time_us);
} }
#else #else

View File

@@ -903,7 +903,7 @@ struct dp_mon_peer_stats {
dp_mon_peer_tx_stats tx; dp_mon_peer_tx_stats tx;
dp_mon_peer_rx_stats rx; dp_mon_peer_rx_stats rx;
#ifdef WLAN_TELEMETRY_STATS_SUPPORT #ifdef WLAN_TELEMETRY_STATS_SUPPORT
struct dp_mon_peer_airtime_consumption airtime_consumption; struct dp_mon_peer_airtime_consumption airtime_consumption[WME_AC_MAX];
#endif #endif
#endif #endif
}; };
@@ -4239,20 +4239,24 @@ void dp_monitor_peer_telemetry_stats(struct dp_peer *peer,
struct cdp_peer_telemetry_stats *stats) struct cdp_peer_telemetry_stats *stats)
{ {
struct dp_mon_peer_stats *mon_peer_stats = NULL; struct dp_mon_peer_stats *mon_peer_stats = NULL;
uint8_t idx = 0; uint8_t idx = 0, ac;
uint32_t consumption = 0; uint32_t consumption = 0;
if (qdf_unlikely(!peer->monitor_peer)) if (qdf_unlikely(!peer->monitor_peer))
return; return;
mon_peer_stats = &peer->monitor_peer->stats; mon_peer_stats = &peer->monitor_peer->stats;
for (idx = 0; idx < MAX_CONSUMPTION_TIME; idx++) for (ac = 0; ac < WME_AC_MAX; ac++) {
consumption += consumption = 0;
mon_peer_stats->airtime_consumption.avg_consumption.avg_consumption_per_sec[idx]; for (idx = 0; idx < MAX_CONSUMPTION_TIME; idx++)
/* consumption is in micro seconds, convert it to seconds and consumption +=
* then calculate %age per 5 sec mon_peer_stats->airtime_consumption[ac].avg_consumption.avg_consumption_per_sec[idx];
*/ /* consumption is in micro seconds, convert it to seconds and
stats->airtime_consumption = ((consumption * 100) / (MAX_CONSUMPTION_TIME * 1000000)); * then calculate %age per 5 sec
*/
stats->airtime_consumption[ac] =
((consumption * 100) / (MAX_CONSUMPTION_TIME * 1000000));
}
stats->tx_mpdu_retried = mon_peer_stats->tx.retries; stats->tx_mpdu_retried = mon_peer_stats->tx.retries;
stats->tx_mpdu_total = mon_peer_stats->tx.tx_mpdus_tried; stats->tx_mpdu_total = mon_peer_stats->tx.tx_mpdus_tried;
stats->rx_mpdu_retried = mon_peer_stats->rx.mpdu_retry_cnt; stats->rx_mpdu_retried = mon_peer_stats->rx.mpdu_retry_cnt;

View File

@@ -818,6 +818,7 @@ dp_ppdu_desc_user_rx_time_update(struct dp_pdev *pdev,
{ {
uint32_t nss_ru_width_sum = 0; uint32_t nss_ru_width_sum = 0;
struct dp_mon_peer *mon_peer = NULL; struct dp_mon_peer *mon_peer = NULL;
uint8_t ac = 0;
if (!pdev || !ppdu_desc || !user || !peer) if (!pdev || !ppdu_desc || !user || !peer)
return; return;
@@ -839,7 +840,8 @@ dp_ppdu_desc_user_rx_time_update(struct dp_pdev *pdev,
if (qdf_unlikely(!mon_peer)) if (qdf_unlikely(!mon_peer))
return; return;
DP_STATS_INC(mon_peer, airtime_consumption.consumption, ac = TID_TO_WME_AC(user->tid);
DP_STATS_INC(mon_peer, airtime_consumption[ac].consumption,
user->rx_time_us); user->rx_time_us);
} }
#else #else