it's a Per-CPU variable.
 Default: 64
 
+dev_weight_rx_bias
+--------------
+
+RPS (e.g. RFS, aRFS) processing is competing with the registered NAPI poll function
+of the driver for the per softirq cycle netdev_budget. This parameter influences
+the proportion of the configured netdev_budget that is spent on RPS based packet
+processing during RX softirq cycles. It is further meant for making current
+dev_weight adaptable for asymmetric CPU needs on RX/TX side of the network stack.
+(see dev_weight_tx_bias) It is effective on a per CPU basis. Determination is based
+on dev_weight and is calculated multiplicative (dev_weight * dev_weight_rx_bias).
+Default: 1
+
+dev_weight_tx_bias
+--------------
+
+Scales the maximum number of packets that can be processed during a TX softirq cycle.
+Effective on a per CPU basis. Allows scaling of current dev_weight for asymmetric
+net stack processing needs. Be careful to avoid making TX softirq processing a CPU hog.
+Calculation is based on dev_weight (dev_weight * dev_weight_tx_bias).
+Default: 1
+
 default_qdisc
 --------------
 
 
 extern int             netdev_max_backlog;
 extern int             netdev_tstamp_prequeue;
 extern int             weight_p;
+extern int             dev_weight_rx_bias;
+extern int             dev_weight_tx_bias;
+extern int             dev_rx_weight;
+extern int             dev_tx_weight;
 
 bool netdev_has_upper_dev(struct net_device *dev, struct net_device *upper_dev);
 struct net_device *netdev_upper_get_next_dev_rcu(struct net_device *dev,
 
 
 int netdev_tstamp_prequeue __read_mostly = 1;
 int netdev_budget __read_mostly = 300;
-int weight_p __read_mostly = 64;            /* old backlog weight */
+int weight_p __read_mostly = 64;           /* old backlog weight */
+int dev_weight_rx_bias __read_mostly = 1;  /* bias for backlog weight */
+int dev_weight_tx_bias __read_mostly = 1;  /* bias for output_queue quota */
+int dev_rx_weight __read_mostly = 64;
+int dev_tx_weight __read_mostly = 64;
 
 /* Called with irq disabled */
 static inline void ____napi_schedule(struct softnet_data *sd,
                net_rps_action_and_irq_enable(sd);
        }
 
-       napi->weight = weight_p;
+       napi->weight = dev_rx_weight;
        while (again) {
                struct sk_buff *skb;
 
 
 }
 #endif
 
+static int proc_do_dev_weight(struct ctl_table *table, int write,
+                          void __user *buffer, size_t *lenp, loff_t *ppos)
+{
+       int ret;
+
+       ret = proc_dointvec(table, write, buffer, lenp, ppos);
+       if (ret != 0)
+               return ret;
+
+       dev_rx_weight = weight_p * dev_weight_rx_bias;
+       dev_tx_weight = weight_p * dev_weight_tx_bias;
+
+       return ret;
+}
+
 static int proc_do_rss_key(struct ctl_table *table, int write,
                           void __user *buffer, size_t *lenp, loff_t *ppos)
 {
                .data           = &weight_p,
                .maxlen         = sizeof(int),
                .mode           = 0644,
-               .proc_handler   = proc_dointvec
+               .proc_handler   = proc_do_dev_weight,
+       },
+       {
+               .procname       = "dev_weight_rx_bias",
+               .data           = &dev_weight_rx_bias,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_do_dev_weight,
+       },
+       {
+               .procname       = "dev_weight_tx_bias",
+               .data           = &dev_weight_tx_bias,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_do_dev_weight,
        },
        {
                .procname       = "netdev_max_backlog",
 
 
 void __qdisc_run(struct Qdisc *q)
 {
-       int quota = weight_p;
+       int quota = dev_tx_weight;
        int packets;
 
        while (qdisc_restart(q, &packets)) {