From: Wei Xu <wexu@redhat.com>
To: 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, 01 Feb 2016 16:39:25 +0800 [thread overview]
Message-ID: <56AF19BD.2030706@redhat.com> (raw)
In-Reply-To: <56AEFB1D.70903@redhat.com>
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?
>
>> + }
>> +}
>>
>> static void virtio_net_rsc_cleanup(VirtIONet *n)
>> {
>> @@ -1810,6 +1844,8 @@ static size_t virtio_net_rsc_callback(NetRscChain *chain, NetClientState *nc,
>> if (!virtio_net_rsc_cache_buf(chain, nc, buf, size)) {
>> return 0;
>> } else {
>> + timer_mod(chain->drain_timer,
>> + qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + rsc_timeout);
>> return size;
>> }
>> }
>> @@ -1877,6 +1913,8 @@ static NetRscChain *virtio_net_rsc_lookup_chain(NetClientState *nc,
>> }
>>
>> chain->proto = proto;
>> + chain->drain_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL,
>> + virtio_net_rsc_purge, chain);
>> chain->do_receive = virtio_net_rsc_receive4;
>>
>> QTAILQ_INIT(&chain->buffers);
>
next prev parent reply other threads:[~2016-02-01 8:39 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 [this message]
2016-02-01 9:31 ` Jason Wang
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=56AF19BD.2030706@redhat.com \
--to=wexu@redhat.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 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).