[dpdk-dev] [DPDK-memory] how qemu waste such long time under dpdk huge page envriment?

Bruce Richardson bruce.richardson at intel.com
Fri Jun 16 10:59:35 CEST 2017


On Fri, Jun 16, 2017 at 04:26:40PM +0800, Sam wrote:
> BTW, while running ovs-dpdk, this log is also take long time, does that
> mean dpdk request large memory take long time?
> 
> EAL: Setting up physically contiguous memory...
> 

When running with 1G pages, I found that the mmap system call takes a
considerable amount of time to execute. I think this is due to the
kernel zero-ing out the 1G pages. IIRC on one system I measured it as taking
about 0.4 seconds per 1G page.

/Bruce

> 
> 2017-06-16 16:11 GMT+08:00 Sam <batmanustc at gmail.com>:
> 
> > Hi all,
> >
> > I'm running `QEMU_CMD ...` to create a vm under dpdk huge page envriment
> > (which set huge page 1G). And I enable all events in qemu.
> >
> > For qemu and ovs-dpdk(ovs-2.4.9 with dpdk-2.2.0) environment, detail log
> > is:
> >
> > > 30012 at 1497443246.678304:object_dynamic_cast_assert
> > qemu:memory-region->qemu:memory-region (/home/hu
> > > anghuai/cloud/contrib/qemu-2.6.0/memory.c:1076:memory_region_initfn)
> > > 30012 at 1497443256.274866:object_dynamic_cast_assert
> > qio-channel-socket->qio-channel-socket (io/chann
> > > el-socket.c:389:qio_channel_socket_init)
> >
> >
> > I don't know why qemu doing 'memory_region_initfn' function in this 10
> > second, does anyone know this?
> >
> > static void memory_region_initfn(Object *obj)
> >> {
> >>     MemoryRegion *mr = MEMORY_REGION(obj);
> >>     ObjectProperty *op;
> >>     mr->ops = &unassigned_mem_ops;
> >>     mr->enabled = true;
> >>     mr->romd_mode = true;
> >>     mr->global_locking = true;
> >>     mr->destructor = memory_region_destructor_none;
> >>     QTAILQ_INIT(&mr->subregions);
> >>     QTAILQ_INIT(&mr->coalesced);
> >>     op = object_property_add(OBJECT(mr), "container",
> >>                              "link<" TYPE_MEMORY_REGION ">",
> >>                              memory_region_get_container,
> >>                              NULL, /* memory_region_set_container */
> >>                              NULL, NULL, &error_abort);
> >>     op->resolve = memory_region_resolve_container;
> >>     object_property_add(OBJECT(mr), "addr", "uint64",
> >>                         memory_region_get_addr,
> >>                         NULL, /* memory_region_set_addr */
> >>                         NULL, NULL, &error_abort);
> >>     object_property_add(OBJECT(mr), "priority", "uint32",
> >>                         memory_region_get_priority,
> >>                         NULL, /* memory_region_set_priority */
> >>                         NULL, NULL, &error_abort);
> >>     object_property_add_bool(OBJECT(mr), "may-overlap",
> >>                              memory_region_get_may_overlap,
> >>                              NULL, /* memory_region_set_may_overlap */
> >>                              &error_abort);
> >>     object_property_add(OBJECT(mr), "size", "uint64",
> >>                         memory_region_get_size,
> >>                         NULL, /* memory_region_set_size, */
> >>                         NULL, NULL, &error_abort);
> >> }
> >
> >
> > Thank you~
> >


More information about the dev mailing list