From: Arthur Kepner <akepner@sgi.com>
To: "David S.Miller" <davem@davemloft.net>
Cc: mchan@broadcom.com, netdev@oss.sgi.com
Subject: Re: Perf data with recent tg3 patches
Date: Fri, 20 May 2005 14:52:35 -0700 (PDT) [thread overview]
Message-ID: <Pine.LNX.4.61.0505201442380.11419@linux.site> (raw)
In-Reply-To: <20050513.222007.78719997.davem@davemloft.net>
[-- Attachment #1: Type: TEXT/PLAIN, Size: 4383 bytes --]
Here are a couple more data points with the recent
interrupt coalescing patches for the tg3 driver.
Please see the attached graphs, which show how CPU
utilization, and number of received packets per
interrupt vary with link utilization. The workload
here is receive-as-fast-as-you-can-over-TCP, with
a single sending and a single receiving process.
The data in the graphs is labelled as follows:
----------------------------------------------
2.6.12-rc3: unmodified 2.6.12-rc3
dflt coal : 2.6.12-rc3 + [1] + [2] + [3] + [4]
using the default intr coalescence
values (rx-frames = rx-usecs-irq = 5)
4x coal : 2.6.12-rc3 + [1] + [2] + [3] + [4] + [5]
using 4 times the default values
for rx-frames and rx-frames-irq
[1] http://marc.theaimsgroup.com/?l=linux-netdev&m=111446723510962&w=2
(This is one of a series of 3 patches - the others can't be
found in the archive. But they're all in 2.6.12-rc4.)
[2] http://marc.theaimsgroup.com/?l=linux-netdev&m=111567944730302&w=2
("tagged status" patch)
[3] http://marc.theaimsgroup.com/?l=linux-netdev&m=111586526522981&w=2
("hw coalescing infrastructure" patch)
[4] http://marc.theaimsgroup.com/?l=linux-netdev&m=111604846510646&w=2
("tagged status update")
[5] the patches below which allow "ethtool -[cC]" to work
Patch [4] almost entirely eliminates updates to the tag in
the status block between when it's been saved in tg3_poll()
and when it's written back to the NIC in tg3_restart_ints().
It still happens, but the frequency is a few times in a
thousand, so it doesn't significantly affect the interrupt
rate.
I had to make a couple of changes to allow setting/
retrieving the coalescence parameters with ethtool. Those
patches are at the end.
When the default coalescence parameters are used (rx-frames,
rx-frames-irq both set to 5) the maximum number of received
packets per interrupt is ~4.2. Setting rx-frames and
rx-frames-irq to 20 caused the maximum number of received
packets per interrupt to rise to ~19.6. Maximum CPU
utilization went down from ~52% to ~35%. Very nice.
Fix typo in ethtool_set_coalesce()
Signed-off-by: Arthur Kepner <akepner@sgi.com>
--- linux.save/net/core/ethtool.c 2005-05-20 12:40:04.426385446 -0700
+++ linux/net/core/ethtool.c 2005-05-20 12:49:34.087515306 -0700
@@ -347,7 +347,7 @@ static int ethtool_set_coalesce(struct n
{
struct ethtool_coalesce coalesce;
- if (!dev->ethtool_ops->get_coalesce)
+ if (!dev->ethtool_ops->set_coalesce)
return -EOPNOTSUPP;
if (copy_from_user(&coalesce, useraddr, sizeof(coalesce)))
Changes to allow setting/getting coalescence parameters
with tg3.
Signed-off-by: Arthur Kepner <akepner@sgi.com>
--- linux.save/drivers/net/tg3.c 2005-05-20 13:02:41.610865448 -0700
+++ linux/drivers/net/tg3.c 2005-05-20 13:11:36.467011288 -0700
@@ -5094,8 +5094,11 @@ static void tg3_set_bdinfo(struct tg3 *t
}
static void __tg3_set_rx_mode(struct net_device *);
-static void tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec)
+static int tg3_set_coalesce(struct net_device *dev,
+ struct ethtool_coalesce *ec)
{
+ struct tg3 *tp = netdev_priv(dev);
+
tw32(HOSTCC_RXCOL_TICKS, ec->rx_coalesce_usecs);
tw32(HOSTCC_TXCOL_TICKS, ec->tx_coalesce_usecs);
tw32(HOSTCC_RXMAX_FRAMES, ec->rx_max_coalesced_frames);
@@ -5114,6 +5117,9 @@ static void tg3_set_coalesce(struct tg3
tw32(HOSTCC_STAT_COAL_TICKS, val);
}
+
+ memcpy(&tp->coal, ec, sizeof(tp->coal));
+ return 0;
}
/* tp->lock is held. */
@@ -5437,7 +5443,7 @@ static int tg3_reset_hw(struct tg3 *tp)
udelay(10);
}
- tg3_set_coalesce(tp, &tp->coal);
+ tg3_set_coalesce(tp->dev, &tp->coal);
/* set status block DMA address */
tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
@@ -7302,6 +7308,8 @@ static int tg3_get_coalesce(struct net_d
return 0;
}
+static int tg3_set_coalesce(struct net_device *, struct ethtool_coalesce *);
+
static struct ethtool_ops tg3_ethtool_ops = {
.get_settings = tg3_get_settings,
.set_settings = tg3_set_settings,
@@ -7335,6 +7343,7 @@ static struct ethtool_ops tg3_ethtool_op
.get_stats_count = tg3_get_stats_count,
.get_ethtool_stats = tg3_get_ethtool_stats,
.get_coalesce = tg3_get_coalesce,
+ .set_coalesce = tg3_set_coalesce,
};
static void __devinit tg3_get_eeprom_size(struct tg3 *tp)
--
Arthur
[-- Attachment #2: CPU utilization --]
[-- Type: IMAGE/png, Size: 3303 bytes --]
[-- Attachment #3: Received Pkts/Intr --]
[-- Type: IMAGE/png, Size: 3195 bytes --]
next prev parent reply other threads:[~2005-05-20 21:52 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-05-13 2:49 Perf data with recent tg3 patches Arthur Kepner
[not found] ` <20050512.211935.67881321.davem@davemloft.net>
2005-05-13 23:57 ` Arthur Kepner
2005-05-14 0:50 ` David S. Miller
2005-05-14 0:39 ` Michael Chan
2005-05-14 5:20 ` David S. Miller
2005-05-20 21:52 ` Arthur Kepner [this message]
2005-05-20 22:33 ` David S. Miller
2005-05-20 22:52 ` Rick Jones
2005-05-20 22:54 ` Arthur Kepner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Pine.LNX.4.61.0505201442380.11419@linux.site \
--to=akepner@sgi.com \
--cc=davem@davemloft.net \
--cc=mchan@broadcom.com \
--cc=netdev@oss.sgi.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).