From patchwork Wed Apr 17 11:43:22 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Karl Beldan X-Patchwork-Id: 2453251 Return-Path: X-Original-To: patchwork-linux-wireless@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork2.kernel.org (Postfix) with ESMTP id B0C13DF23A for ; Wed, 17 Apr 2013 11:47:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S966098Ab3DQLrj (ORCPT ); Wed, 17 Apr 2013 07:47:39 -0400 Received: from mail-wi0-f173.google.com ([209.85.212.173]:46143 "EHLO mail-wi0-f173.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S966071Ab3DQLri (ORCPT ); Wed, 17 Apr 2013 07:47:38 -0400 Received: by mail-wi0-f173.google.com with SMTP id c10so346677wiw.0 for ; Wed, 17 Apr 2013 04:47:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:from:to:cc:subject:date:message-id:x-mailer; bh=AOTEsZNUutM7/0v2rdjnVAXvhNm+DAQenXya9Sh8d0U=; b=OFXswLX9LsZdgh1lmrKWEBz9ZtJNGmETVB3i/+6moIhOWGvr7fsbRwK272HyVUOFEw RZ/3K5u83LTmXP/5Hz/CF4TOGwuNmHXNeYmuBwi8IRh2XF2L2aDS60ZiaYAICAjmAGQk eT1O+Na9DYAw0/ze0PlaY7Z4XO1waMSjxcDt3oZ+/92pSt0KFrNQfFRSrJoy3giOgStZ 4JSg3+YQ9TfwjDXD6Ha/oLRN78cTebUeg4m7VJ8PuvzqadGMEHq8Cq7+837kTIIwi1r8 SqMi7XME8jlRI9UXOjUb1iEqOWlf66aJJBKkAbmRsnM0jMc1ZnI2KpCEyMqw3E3bVf7o vOog== X-Received: by 10.180.72.165 with SMTP id e5mr25588343wiv.7.1366199257094; Wed, 17 Apr 2013 04:47:37 -0700 (PDT) Received: from magnum.frso.rivierawaves.com (vpn.rivierawaves.com. [91.151.119.162]) by mx.google.com with ESMTPS id t7sm25013760wij.2.2013.04.17.04.47.35 (version=TLSv1.2 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 17 Apr 2013 04:47:36 -0700 (PDT) From: Karl Beldan To: Johannes Berg Cc: linux-wireless , Karl Beldan , Karl Beldan , Felix Fietkau Subject: [PATCH] mac80211: optimize minstrel_ewma Date: Wed, 17 Apr 2013 13:43:22 +0200 Message-Id: <1366199002-10177-1-git-send-email-karl.beldan@gmail.com> X-Mailer: git-send-email 1.8.2 Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Karl Beldan Use powers of two in ewma of minstrel. This changes : - EWMA_DIV from 100 to 2^7 - EWMA_LEVEL from 75 (/EWMA_DIV=100) to 2^6 + 2^5 (/EWMA_DIV=128) Note that this changes EWMA_DIV - EWMA_LEVEL from 25 to 2^5 and keeps EWMA_LEVEL / EWMA_DIV == 0.75. Signed-off-by: Karl Beldan Acked-by: Felix Fietkau --- Here's a quick benchmark with gcc -O2 -std=c99: { #ifndef ORIG #define EWMA_LEVEL 75 #define EWMA_DIV 100 #else #define EWMA_LEVEL 96 #define EWMA_DIV 128 #endif static inline int minstrel_ewma(int old, int new, int weight) { return (new * (EWMA_DIV - weight) + old * weight) / EWMA_DIV; } int main() { volatile int a, b, c; for (int i = 0; i < 1 << 30; i++) c = minstrel_ewma(a, b, EWMA_LEVEL); return 0; } On an i5: before: real 0m2.426s after: real 0m1.495s 1.495 / 2.426 = 0.6 On a mv-feroceon: before: real 0m20.231s after: real 0m18.193s 18.193 / 20.231 = 0.9 } net/mac80211/rc80211_minstrel.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/net/mac80211/rc80211_minstrel.h b/net/mac80211/rc80211_minstrel.h index 8e5a222..f4301f4 100644 --- a/net/mac80211/rc80211_minstrel.h +++ b/net/mac80211/rc80211_minstrel.h @@ -9,7 +9,8 @@ #ifndef __RC_MINSTREL_H #define __RC_MINSTREL_H -#define EWMA_LEVEL 75 /* ewma weighting factor [%] */ +#define EWMA_LEVEL 96 /* ewma weighting factor [/EWMA_DIV] */ +#define EWMA_DIV 128 #define SAMPLE_COLUMNS 10 /* number of columns in sample table */ @@ -27,7 +28,7 @@ static inline int minstrel_ewma(int old, int new, int weight) { - return (new * (100 - weight) + old * weight) / 100; + return (new * (EWMA_DIV - weight) + old * weight) / EWMA_DIV; }