qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 1/3] iothread: provide helpers for internal use


From: Stefan Hajnoczi
Subject: Re: [Qemu-devel] [PATCH 1/3] iothread: provide helpers for internal use
Date: Fri, 22 Sep 2017 11:16:52 +0100
User-agent: Mutt/1.8.3 (2017-05-23)

On Fri, Sep 22, 2017 at 04:56:10PM +0800, Peter Xu wrote:
> IOThread is a general framework that contains IO loop environment and a
> real thread behind.  It's also good to be used internally inside qemu.
> Provide some helpers for it to create iothreads to be used internally.
> 
> Signed-off-by: Peter Xu <address@hidden>
> ---
>  include/sysemu/iothread.h |  8 ++++++++
>  iothread.c                | 21 +++++++++++++++++++++
>  2 files changed, 29 insertions(+)
> 
> diff --git a/include/sysemu/iothread.h b/include/sysemu/iothread.h
> index d2985b3..b07663f 100644
> --- a/include/sysemu/iothread.h
> +++ b/include/sysemu/iothread.h
> @@ -46,4 +46,12 @@ AioContext *iothread_get_aio_context(IOThread *iothread);
>  void iothread_stop_all(void);
>  GMainContext *iothread_get_g_main_context(IOThread *iothread);
>  
> +/*
> + * Helpers used to allocate iothreads for internal use.  These
> + * iothreads will not be seen by monitor clients when query using
> + * "query-iothreads".
> + */
> +IOThread *iothread_create(const char *id, Error **errp);
> +void iothread_destroy(IOThread *iothread);
> +
>  #endif /* IOTHREAD_H */
> diff --git a/iothread.c b/iothread.c
> index 44c8944..74e400c 100644
> --- a/iothread.c
> +++ b/iothread.c
> @@ -354,3 +354,24 @@ GMainContext *iothread_get_g_main_context(IOThread 
> *iothread)
>  
>      return iothread->worker_context;
>  }
> +
> +static Object *iothread_get_internal_parent(void)
> +{
> +    return container_get(object_get_root(), "/internal-iothreads");
> +}

Markus, please advise on the following QMP API design issue.

The query-iothreads QMP command lists IOThread objects.  This patch
introduces "internal" IOThreads whose lifetime is dictated by QEMU, not
the user's command-line or object-add command.

QMP clients might still want to know the thread IDs of internal
IOThreads for CPU affinity.  Clients may also want to tweak the
AioContext polling properties on the internal objects for performance
tuning.

I suggest adding internal IOThreads alongside user-created IOThreads
instead of hiding them.  IOThread also needs a bool user_created field
and a UserCreatableClass->can_be_deleted() function:

  static bool iothread_can_be_deleted(UserCreatable *uc)
  {
      return IOTHREAD(uc)->user_created;
  }

This way users cannot delete internal IOThreads.

But how should object ids be handled?  In theory existing -object
iothread,id=<id> users could use any name.  How can QEMU generate ids
for internal IOThreads without conflicting with existing users's ids?

> +
> +IOThread *iothread_create(const char *id, Error **errp)
> +{
> +    Object *obj;
> +
> +    obj = object_new_with_props(TYPE_IOTHREAD,
> +                                iothread_get_internal_parent(),
> +                                id, errp, NULL);
> +
> +    return IOTHREAD(obj);
> +}
> +
> +void iothread_destroy(IOThread *iothread)
> +{
> +    object_unparent(OBJECT(iothread));
> +}
> -- 
> 2.7.4
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]