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

Re: [Xen-devel] [PATCH] xl: print runtime info in "xl list -l"



On Thu, Sep 12, 2013 at 01:52:09PM +0100, Ian Campbell wrote:
> On Wed, 2013-09-04 at 10:04 -0400, Konrad Rzeszutek Wilk wrote:
> >  - No status in xl list -l when only dom0 is present. 
> 
> Which bits of status are you interested in?

The
    (status 2)

field.
> 
> I'm thinking something like the following, which will include the
> content of libxl_dominfo for every domain.
> 
> 8<----------------------------------
> 
> >From ee9fb6c41cd53afd4983fd2e21ad0e39f178c066 Mon Sep 17 00:00:00 2001
> From: Ian Campbell <ian.campbell@xxxxxxxxxx>
> Date: Thu, 12 Sep 2013 13:50:33 +0100
> Subject: [PATCH] xl: print runtime info in "xl list -l"
> 
> Include dom0 runtime information, but not domain config.

With that I get (with /etc/xen/xl.conf having output_mode=sxp)

-bash-4.1# xl list -l
dom0
no d_config
(domain
        (domid 0)
        (create_info)
        (hvm 1)
        (hap True)
        (oos <default>)
        (ssidref 0)
        (name (null))
        (uuid 00000000-0000-0000-0000-000000000000)
        (xsdata (null))
        (platformdata (null))
        (build_info)
        (max_vcpus 0)
        (tsc_mode (null))
        (max_memkb 0)
        (target_memkb 45887743)
        (nomigrate True)
        (image
                (hvm
                        (firmware )
                        (video_memkb 140277926854668)
                        (shadow_memkb 140280103390500)
                        (pae True)
                        (apic True)
                        (acpi True)
                        (nx False)
                        (viridian True)
                        (hpet False)
                        (vpt_align <default>)
                        (timer_mode (null))
                        (nestedhvm True)
                        (stdvga False)
                        (vnc <default>)
Segmentation fault

While under xm:
-bash-4.1# xm list -l
(domain
    (domid 0)
    (cpu_weight 256)
    (cpu_cap 0)
    (pool_name Pool-0)
    (bootloader '')
    (vcpus 4)
    (cpus ((0 1 2 3) (0 1 2 3) (0 1 2 3) (0 1 2 3)))
    (on_poweroff destroy)
    (on_crash restart)
    (uuid 00000000-0000-0000-0000-000000000000)
    (bootloader_args '')
    (name Domain-0)
    (on_reboot restart)
    (maxmem 6144)
    (memory 2048)
    (shadow_memory 0)
    (features '')
    (on_xend_start ignore)
    (on_xend_stop ignore)
    (cpu_time 11.138272406)
    (online_vcpus 4)
    (image (linux (kernel '') (superpages 0) (nomigrate 0) (tsc_mode 0)))
    (status 2)
    (state r-----)
)


Let me (once I am done with this email backlog) look at this and see if I
can make the segfault go away.

Thanks for the prototype!

> 
> Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
> ---
>  tools/libxl/xl_cmdimpl.c |   74 
> ++++++++++++++++++++++++++++------------------
>  1 file changed, 46 insertions(+), 28 deletions(-)
> 
> diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
> index 884f050..46fdafc 100644
> --- a/tools/libxl/xl_cmdimpl.c
> +++ b/tools/libxl/xl_cmdimpl.c
> @@ -298,7 +298,8 @@ static void dolog(const char *file, int line, const char 
> *func, char *fmt, ...)
>  }
>  
>  static yajl_gen_status printf_info_one_json(yajl_gen hand, int domid,
> -                                            libxl_domain_config *d_config)
> +                                            libxl_domain_config *d_config,
> +                                            libxl_dominfo *d_info)
>  {
>      yajl_gen_status s;
>  
> @@ -317,13 +318,25 @@ static yajl_gen_status printf_info_one_json(yajl_gen 
> hand, int domid,
>      if (s != yajl_gen_status_ok)
>          goto out;
>  
> -    s = yajl_gen_string(hand, (const unsigned char *)"config",
> -                        sizeof("config")-1);
> -    if (s != yajl_gen_status_ok)
> -        goto out;
> -    s = libxl_domain_config_gen_json(hand, d_config);
> -    if (s != yajl_gen_status_ok)
> -        goto out;
> +    if (d_config) {
> +        s = yajl_gen_string(hand, (const unsigned char *)"config",
> +                            sizeof("config")-1);
> +        if (s != yajl_gen_status_ok)
> +            goto out;
> +        s = libxl_domain_config_gen_json(hand, d_config);
> +        if (s != yajl_gen_status_ok)
> +            goto out;
> +    }
> +
> +    if (d_info) {
> +        s = yajl_gen_string(hand, (const unsigned char *)"info",
> +                            sizeof("info")-1);
> +        if (s != yajl_gen_status_ok)
> +            goto out;
> +        s = libxl_dominfo_gen_json(hand, d_info);
> +        if (s != yajl_gen_status_ok)
> +            goto out;
> +    }
>  
>      s = yajl_gen_map_close(hand);
>      if (s != yajl_gen_status_ok)
> @@ -350,7 +363,7 @@ static void printf_info(enum output_format output_format,
>          return;
>      }
>  
> -    s = printf_info_one_json(hand, domid, d_config);
> +    s = printf_info_one_json(hand, domid, d_config, NULL);
>      if (s != yajl_gen_status_ok)
>          goto out;
>  
> @@ -2990,7 +3003,7 @@ static void reboot_domain(uint32_t domid, 
> libxl_evgen_domain_death **deathw,
>      }
>  }
>  
> -static void list_domains_details(const libxl_dominfo *info, int nb_domain)
> +static void list_domains_details(libxl_dominfo *info, int nb_domain)
>  {
>      libxl_domain_config d_config;
>  
> @@ -3017,26 +3030,31 @@ static void list_domains_details(const libxl_dominfo 
> *info, int nb_domain)
>          s = yajl_gen_status_ok;
>  
>      for (i = 0; i < nb_domain; i++) {
> -        /* no detailed info available on dom0 */
> -        if (info[i].domid == 0)
> -            continue;
> -        rc = libxl_userdata_retrieve(ctx, info[i].domid, "xl", &data, &len);
> -        if (rc)
> -            continue;
> -        CHK_ERRNO(asprintf(&config_source, "<domid %d data>", 
> info[i].domid));
> -        libxl_domain_config_init(&d_config);
> -        parse_config_data(config_source, (char *)data, len, &d_config, NULL);
> -        if (default_output_format == OUTPUT_FORMAT_JSON)
> -            s = printf_info_one_json(hand, info[i].domid, &d_config);
> -        else
> +        fprintf(stderr, "dom%d\n", info[i].domid);
> +
> +        if ( info[i].domid > 0 ) {
> +            fprintf(stderr, "parse d_config for dom%d\n", info[i].domid);
> +            rc = libxl_userdata_retrieve(ctx, info[i].domid, "xl", &data, 
> &len);
> +            if (rc)
> +                continue;
> +            CHK_ERRNO(asprintf(&config_source, "<domid %d data>", 
> info[i].domid));
> +            libxl_domain_config_init(&d_config);
> +            parse_config_data(config_source, (char *)data, len, &d_config, 
> NULL);
> +        } else { fprintf(stderr, "no d_config\n"); }
> +        if (default_output_format == OUTPUT_FORMAT_JSON) {
> +            s = printf_info_one_json(hand, info[i].domid,
> +                                     i == 0 ? NULL : &d_config, &info[i]);
> +            if (s != yajl_gen_status_ok)
> +                goto out;
> +        } else
>              printf_info_sexp(info[i].domid, &d_config);
> -        libxl_domain_config_dispose(&d_config);
> -        free(data);
> -        free(config_source);
> -        if (s != yajl_gen_status_ok)
> -            goto out;
> -    }
>  
> +        if ( info[i].domid > 0 ) {
> +            libxl_domain_config_dispose(&d_config);
> +            free(data);
> +            free(config_source);
> +        }
> +    }
>      if (default_output_format == OUTPUT_FORMAT_JSON) {
>          s = yajl_gen_array_close(hand);
>          if (s != yajl_gen_status_ok)
> -- 
> 1.7.10.4
> 
> 
> 

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.