From: Zhou Jie <zhoujie2011@cn.fujitsu.com>
To: qemu-devel@nongnu.org
Cc: jcmvbkbc@gmail.com
Subject: Re: [Qemu-devel] [PATCH v2] hw/net/opencores_eth: Allocating Large sized arrays to heap
Date: Wed, 27 Apr 2016 10:18:56 +0800 [thread overview]
Message-ID: <57202190.9070106@cn.fujitsu.com> (raw)
In-Reply-To: <1461722868-11624-1-git-send-email-zhoujie2011@cn.fujitsu.com>
Hi Max,
When I committed another patch which named as
"hw/net/virtio-net: Allocating Large sized arrays to heap" .
Christian Borntraeger said that 16k is usually perfectly fine
for a userspace stack and doing allocations in a hot path
might actually hurt performance.
Although the size is 65536 bytes here,
I think open_eth_start_xmit is in a hot path.
So, it is OK, if you think that this patch should not be applied.
Sincerely,
Zhou Jie
On 2016/4/27 10:07, Zhou Jie wrote:
> open_eth_start_xmit has a huge stack usage of 65536 bytes approx.
> Moving large arrays to heap to reduce stack usage.
>
> Signed-off-by: Zhou Jie <zhoujie2011@cn.fujitsu.com>
> ---
> hw/net/opencores_eth.c | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/hw/net/opencores_eth.c b/hw/net/opencores_eth.c
> index c6094fb..fa0a4e7 100644
> --- a/hw/net/opencores_eth.c
> +++ b/hw/net/opencores_eth.c
> @@ -483,7 +483,8 @@ static NetClientInfo net_open_eth_info = {
>
> static void open_eth_start_xmit(OpenEthState *s, desc *tx)
> {
> - uint8_t buf[65536];
> + uint8_t *buf = NULL;
> + uint8_t buffer[0x600];
> unsigned len = GET_FIELD(tx->len_flags, TXD_LEN);
> unsigned tx_len = len;
>
> @@ -498,6 +499,11 @@ static void open_eth_start_xmit(OpenEthState *s, desc *tx)
>
> trace_open_eth_start_xmit(tx->buf_ptr, len, tx_len);
>
> + if (tx_len > 0x600) {
> + buf = g_new(uint8_t, tx_len);
> + } else {
> + buf = buffer;
> + }
> if (len > tx_len) {
> len = tx_len;
> }
> @@ -506,6 +512,9 @@ static void open_eth_start_xmit(OpenEthState *s, desc *tx)
> memset(buf + len, 0, tx_len - len);
> }
> qemu_send_packet(qemu_get_queue(s->nic), buf, tx_len);
> + if (tx_len > 0x600) {
> + g_free(buf);
> + }
>
> if (tx->len_flags & TXD_WR) {
> s->tx_desc = 0;
>
--
------------------------------------------------
周潔
Dept 1
No. 6 Wenzhu Road,
Nanjing, 210012, China
TEL:+86+25-86630566-8557
FUJITSU INTERNAL:7998-8557
E-Mail:zhoujie2011@cn.fujitsu.com
------------------------------------------------
next prev parent reply other threads:[~2016-04-27 2:19 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-27 2:07 [Qemu-devel] [PATCH v2] hw/net/opencores_eth: Allocating Large sized arrays to heap Zhou Jie
2016-04-27 2:18 ` Zhou Jie [this message]
2016-04-27 2:46 ` Max Filippov
2016-04-27 2:51 ` Zhou Jie
2016-04-27 2:37 ` Max Filippov
2016-04-27 3:27 ` Wei, Jiangang
2016-04-27 3:44 ` Max Filippov
2016-04-27 3:48 ` Wei, Jiangang
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=57202190.9070106@cn.fujitsu.com \
--to=zhoujie2011@cn.fujitsu.com \
--cc=jcmvbkbc@gmail.com \
--cc=qemu-devel@nongnu.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.