From: Jason Wang <jasowang@redhat.com>
To: Wei Xu <wexu@redhat.com>, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [RFC Patch v2 05/10] virtio-net rsc: Create timer to drain the packets from the cache pool
Date: Mon, 1 Feb 2016 17:31:05 +0800 [thread overview]
Message-ID: <56AF25D9.5020707@redhat.com> (raw)
In-Reply-To: <56AF19BD.2030706@redhat.com>
On 02/01/2016 04:39 PM, Wei Xu wrote:
> On 02/01/2016 02:28 PM, Jason Wang wrote:
>>
>> On 02/01/2016 02:13 AM, wexu@redhat.com wrote:
>>> From: Wei Xu <wei@wei-thinkpad.nay.redhat.com>
>>>
>>> The timer will only be triggered if the packets pool is not empty,
>>> and it'll drain off all the cached packets, this is to reduce the
>>> delay to upper layer protocol stack.
>>>
>>> Signed-off-by: Wei Xu <wexu@redhat.com>
>>> ---
>>> hw/net/virtio-net.c | 38 ++++++++++++++++++++++++++++++++++++++
>>> 1 file changed, 38 insertions(+)
>>>
>>> diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
>>> index 4f77fbe..93df0d5 100644
>>> --- a/hw/net/virtio-net.c
>>> +++ b/hw/net/virtio-net.c
>>> @@ -48,12 +48,17 @@
>>> #define MAX_VIRTIO_IP_PAYLOAD (65535 + IP_OFFSET)
>>> +/* Purge coalesced packets timer interval */
>>> +#define RSC_TIMER_INTERVAL 500000
>> Any hints for choosing this as default value? Do we need a property for
>> user to change this?
> This is still under estimation, 300ms -500ms is a good value to adapt
> the test, this should be configurable.
>>> +
>>> /* Global statistics */
>>> static uint32_t rsc_chain_no_mem;
>>> /* Switcher to enable/disable rsc */
>>> static bool virtio_net_rsc_bypass;
>>> +static uint32_t rsc_timeout = RSC_TIMER_INTERVAL;
>>> +
>>> /* Coalesce callback for ipv4/6 */
>>> typedef int32_t (VirtioNetCoalesce) (NetRscChain *chain, NetRscSeg
>>> *seg,
>>> const uint8_t *buf, size_t
>>> size);
>>> @@ -1625,6 +1630,35 @@ static int
>>> virtio_net_load_device(VirtIODevice *vdev, QEMUFile *f,
>>> return 0;
>>> }
>>> +static void virtio_net_rsc_purge(void *opq)
>>> +{
>>> + int ret = 0;
>>> + NetRscChain *chain = (NetRscChain *)opq;
>>> + NetRscSeg *seg, *rn;
>>> +
>>> + QTAILQ_FOREACH_SAFE(seg, &chain->buffers, next, rn) {
>>> + if (!qemu_can_send_packet(seg->nc)) {
>>> + /* Should quit or continue? not sure if one or some
>>> + * of the queues fail would happen, try continue here */
>> This looks wrong, qemu_can_send_packet() is used for nc's peer not nc
>> itself.
> OK.
>>
>>> + continue;
>>> + }
>>> +
>>> + ret = virtio_net_do_receive(seg->nc, seg->buf, seg->size);
>>> + QTAILQ_REMOVE(&chain->buffers, seg, next);
>>> + g_free(seg->buf);
>>> + g_free(seg);
>>> +
>>> + if (ret == 0) {
>>> + /* Try next queue */
>> Try next seg?
> Yes, it's seg.
>>
>>> + continue;
>>> + }
>> Why need above?
> yes, it's optional, my maybe can help if there are extra codes after
> this, will remove this.
>>
>>> + }
>>> +
>>> + if (!QTAILQ_EMPTY(&chain->buffers)) {
>>> + timer_mod(chain->drain_timer,
>>> + qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) +
>>> rsc_timeout);
>> Need stop/start the timer during vm stop/start to save cpu.
> Thanks, do you know where should i add the code?
You may want to look at the vmstate change handler in virtio-net.c.
next prev parent reply other threads:[~2016-02-01 9:31 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-31 18:13 [Qemu-devel] [RFC v2 0/10] Support Receive-Segment-Offload(RSC) for WHQL test of Window guest wexu
2016-01-31 18:13 ` [Qemu-devel] [RFC Patch v2 01/10] virtio-net rsc: Data structure, 'Segment', 'Chain' and 'Status' wexu
2016-01-31 18:13 ` [Qemu-devel] [RFC Patch v2 02/10] virtio-net rsc: Initilize & Cleanup wexu
2016-01-31 18:47 ` Michael S. Tsirkin
2016-02-01 3:56 ` Wei Xu
2016-02-01 3:32 ` Jason Wang
2016-02-01 7:46 ` Wei Xu
2016-01-31 18:13 ` [Qemu-devel] [RFC Patch v2 03/10] virtio-net rsc: Chain Lookup, Packet Caching and Framework of IPv4 wexu
2016-01-31 18:50 ` Michael S. Tsirkin
2016-02-01 3:40 ` Wei Xu
2016-02-01 5:55 ` Jason Wang
2016-02-01 8:02 ` Wei Xu
2016-02-01 9:22 ` Jason Wang
2016-01-31 18:13 ` [Qemu-devel] [RFC Patch v2 04/10] virtio-net rsc: Detailed IPv4 and General TCP data coalescing wexu
2016-02-01 6:21 ` Jason Wang
2016-02-01 8:29 ` Wei Xu
2016-02-01 9:29 ` Jason Wang
2016-01-31 18:13 ` [Qemu-devel] [RFC Patch v2 05/10] virtio-net rsc: Create timer to drain the packets from the cache pool wexu
2016-02-01 6:28 ` Jason Wang
2016-02-01 8:39 ` Wei Xu
2016-02-01 9:31 ` Jason Wang [this message]
2016-02-01 13:31 ` Wei Xu
2016-01-31 18:13 ` [Qemu-devel] [RFC Patch v2 06/10] virtio-net rsc: IPv4 checksum wexu
2016-02-01 6:31 ` Jason Wang
2016-02-01 8:40 ` Wei Xu
2016-01-31 18:13 ` [Qemu-devel] [RFC Patch v2 07/10] virtio-net rsc: Checking TCP flag and drain specific connection packets wexu
2016-02-01 6:44 ` Jason Wang
2016-02-01 8:44 ` Wei Xu
2016-01-31 18:13 ` [Qemu-devel] [RFC Patch v2 08/10] virtio-net rsc: Sanity check & More bypass cases check wexu
2016-02-01 6:58 ` Jason Wang
2016-02-01 8:46 ` Wei Xu
2016-01-31 18:13 ` [Qemu-devel] [RFC Patch v2 09/10] virtio-net rsc: Add IPv6 support wexu
2016-02-01 7:14 ` Jason Wang
2016-02-01 8:49 ` Wei Xu
2016-01-31 18:13 ` [Qemu-devel] [RFC Patch v2 10/10] virtio-net rsc: Add Receive Segment Coalesce statistics wexu
2016-02-01 7:16 ` Jason Wang
2016-02-01 8:50 ` Wei Xu
2016-01-31 19:03 ` [Qemu-devel] [RFC v2 0/10] Support Receive-Segment-Offload(RSC) for WHQL test of Window guest Michael S. Tsirkin
2016-02-01 3:23 ` Jason Wang
2016-02-01 3:42 ` Wei Xu
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=56AF25D9.5020707@redhat.com \
--to=jasowang@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=wexu@redhat.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 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.