All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yoshihiko Yaegashi <y.yaegashi@jp.fujitsu.com>
To: xen-devel@lists.xensource.com
Subject: [PATCH] xenperf hypercall pretty print
Date: Thu, 02 Nov 2006 13:22:57 +0900	[thread overview]
Message-ID: <454972A1.6080804@jp.fujitsu.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 474 bytes --]

Hi,

This patch implements a pretty print feature to the hypercall counters.
I added an option -p so it would be easier to see how many times each
hypercall was called.
The function of option -f is left untouched.
The result is as the attachment.

Reference:
http://lists.xensource.com/archives/html/xen-devel/2006-08/msg01324.html

Signed-off-by: Yoshihiko Yaegashi <y.yaegashi@jp.fujitsu.com>
Signed-off-by: Ken Hironaka <kenny@logos.ic.i.u-tokyo.ac.jp>

Thanks,
Yaegashi

[-- Attachment #2: xenperf-pretty-print-v1.patch --]
[-- Type: text/plain, Size: 8349 bytes --]

diff -r b21246720fde -r 986fd62fbfda tools/misc/xenperf.c
--- a/tools/misc/xenperf.c	Mon Oct 30 17:35:11 2006 +0000
+++ b/tools/misc/xenperf.c	Wed Nov 01 14:47:25 2006 +0900
@@ -10,7 +10,6 @@
  * Description: 
  */
 
-
 #include <xenctrl.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -18,6 +17,75 @@
 #include <errno.h>
 #include <string.h>
 
+const char* hypercall_name_table[64]=
+{
+    [__HYPERVISOR_set_trap_table] = "set_trap_table",                            /*0*/
+    [__HYPERVISOR_mmu_update] = "mmu_update",                                    /*1*/
+    [__HYPERVISOR_set_gdt] = "set_gdt",                                          /*2*/
+    [__HYPERVISOR_stack_switch] = "stack_switch",                                /*3*/
+    [__HYPERVISOR_set_callbacks] = "set_callbacks",                              /*4*/
+    [__HYPERVISOR_fpu_taskswitch] = "fpu_taskswitch",                            /*5*/
+    [__HYPERVISOR_sched_op_compat] = "sched_op_compat",                          /*6*/
+    [__HYPERVISOR_platform_op] = "platform_op",                                  /*7*/
+    [__HYPERVISOR_set_debugreg] = "set_debugreg",                                /*8*/
+    [__HYPERVISOR_get_debugreg] = "get_debugreg",                                /*9*/
+    [__HYPERVISOR_update_descriptor] = "update_descriptor",                      /*10*/
+    [11] = "NULL",                                                               /*11*/
+    [__HYPERVISOR_memory_op] = "memory_op",                                      /*12*/
+    [__HYPERVISOR_multicall] = "multicall",                                      /*13*/
+    [__HYPERVISOR_update_va_mapping] = "update_va_mapping",                      /*14*/
+    [__HYPERVISOR_set_timer_op] = "set_timer_op",                                /*15*/
+    [__HYPERVISOR_event_channel_op_compat] = "event_channel_op_compat",          /*16 compat since 0x00030202 */
+    [__HYPERVISOR_xen_version] = "xen_version",                                  /*17*/
+    [__HYPERVISOR_console_io] = "console_io",                                    /*18*/
+    [__HYPERVISOR_physdev_op_compat] = "physdev_op_compat",                      /*19  compat since 0x00030202 */
+    [__HYPERVISOR_grant_table_op] = "grant_table_op",                            /*20*/
+    [__HYPERVISOR_vm_assist] = "vm_assist",                                      /*21*/
+    [__HYPERVISOR_update_va_mapping_otherdomain] = "update_va_mapping_otherdomain", /*22*/
+    [__HYPERVISOR_iret] = "iret",                                                /*23  x86 only */
+    [__HYPERVISOR_vcpu_op] = "vcpu_op",                                          /*24*/
+    [__HYPERVISOR_set_segment_base] = "set_segment_base",                        /*25  x86/64 only */
+    [__HYPERVISOR_mmuext_op] = "mmuext_op",                                      /*26*/
+    [__HYPERVISOR_acm_op] = "acm_op",                                            /*27*/
+    [__HYPERVISOR_nmi_op] = "nmi_op",                                            /*28*/
+    [__HYPERVISOR_sched_op] = "sched_op",                                        /*29*/
+    [__HYPERVISOR_callback_op] = "callback_op",                                  /*30*/
+    [__HYPERVISOR_xenoprof_op] = "xenoprof_op",                                  /*31*/
+    [__HYPERVISOR_event_channel_op] = "event_channel_op",                        /*32*/
+    [__HYPERVISOR_physdev_op] = "physdev_op",                                    /*33*/
+    [__HYPERVISOR_hvm_op] = "hvm_op",                                            /*34*/
+    [35] = "NULL",                                                               /*35*/
+    [36] = "NULL",                                                               /*36*/
+    [37] = "NULL",                                                               /*37*/
+    [38] = "NULL",                                                               /*38*/
+    [39] = "NULL",                                                               /*39*/
+    [40] = "NULL",                                                               /*40*/
+    [41] = "NULL",                                                               /*41*/
+    [42] = "NULL",                                                               /*42*/
+    [43] = "NULL",                                                               /*43*/
+    [44] = "NULL",                                                               /*44*/
+    [45] = "NULL",                                                               /*45*/
+    [46] = "NULL",                                                               /*46*/
+    [47] = "NULL",                                                               /*47*/
+/* Architecture-specific hypercall definitions. */
+    [__HYPERVISOR_arch_0] = "arch_0",                                            /*48*/
+    [__HYPERVISOR_arch_1] = "arch_1",                                            /*49*/
+    [__HYPERVISOR_arch_2] = "arch_2",                                            /*50*/
+    [__HYPERVISOR_arch_3] = "arch_3",                                            /*51*/
+    [__HYPERVISOR_arch_4] = "arch_4",                                            /*52*/
+    [__HYPERVISOR_arch_5] = "arch_5",                                            /*53*/
+    [__HYPERVISOR_arch_6] = "arch_6",                                            /*54*/
+    [__HYPERVISOR_arch_7] = "arch_7",                                            /*55*/
+    [56] = "NULL",                                                               /*56*/
+    [57] = "NULL",                                                               /*57*/
+    [58] = "NULL",                                                               /*58*/
+    [59] = "NULL",                                                               /*59*/
+    [60] = "NULL",                                                               /*60*/
+    [61] = "NULL",                                                               /*61*/
+    [62] = "NULL",                                                               /*62*/
+    [63] = "NULL"                                                                /*63*/
+};
+
 int lock_pages(void *addr, size_t len)
 {
     int e = 0;
@@ -41,7 +109,8 @@ int main(int argc, char *argv[])
 	xc_perfc_val_t  *pcv;
 	xc_perfc_val_t  *val;
 	int num_desc, num_val;
-    unsigned int    sum, reset = 0, full = 0;
+    unsigned int    sum, reset = 0, full = 0, pretty = 0;
+    char hypercall_name[36];
 
     if ( argc > 1 )
     {
@@ -52,6 +121,10 @@ int main(int argc, char *argv[])
             {
             case 'f':
                 full = 1;
+                break;
+            case 'p':
+                full = 1;
+                pretty = 1;
                 break;
             case 'r':
                 reset = 1;
@@ -66,6 +139,7 @@ int main(int argc, char *argv[])
             printf("%s: [-r]\n", argv[0]);
             printf("no args: print digested counters\n");
             printf("    -f : print full arrays/histograms\n");
+            printf("    -p : print full arrays/histograms in pretty format\n");
             printf("    -r : reset counters\n");
             return 0;
         }
@@ -134,11 +208,31 @@ int main(int argc, char *argv[])
         printf ("T=%10u ", (unsigned int)sum);
 
         if ( full || (pcd[i].nr_vals <= 4) )
-            for ( j = 0; j < pcd[i].nr_vals; j++ )
-                printf(" %10u", (unsigned int)val[j]);
-
-        printf("\n");
-		val += pcd[i].nr_vals;
+        {
+            if ( pretty && (strcmp(pcd[i].name, "hypercalls") == 0) )
+            {
+                printf("\n");
+                for( j = 0; j < pcd[i].nr_vals; j++ )
+                {
+                    strncpy(hypercall_name, hypercall_name_table[j], 35);
+                    hypercall_name[35]='\0';
+                    printf("%-35s ", hypercall_name);
+                    printf("%12u\n", (unsigned int)val[j]);
+                }
+            }
+            else
+            {
+                for ( j = 0; j < pcd[i].nr_vals; j++ )
+                    printf(" %10u", (unsigned int)val[j]);
+                printf("\n");
+            }
+        }
+        else
+        {
+            printf("\n");
+        }
+
+        val += pcd[i].nr_vals;
     }
 
     return 0;

[-- Attachment #3: xenperf-pretty-print.log --]
[-- Type: text/plain, Size: 12158 bytes --]

exceptions                          T=      3979           0          0          0          0          0          0          0         47          0          0          0          0          0       3450        482          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0
vmexits                             T=         0           0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0
cause vector                        T=         0           0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0
SVMexits                            T=         0           0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0
segmentation fixups                 T=      3282        1916        144        908        314
apic timer interrupts               T=      3517         863        921        875        858
domain page tlb flushes             T=         0           0          0          0          0
calls_to_mmu_update                 T=        17           0          4          4          9
num_page_updates                    T=        17           0          4          4          9
calls_to_update_va_map              T=       548           6        188        188        166
page faults                         T=       482           4        105        137        236
copy_user faults                    T=         2           0          0          0          2
map_domain_page count               T=       965         431        126        163        245
writable pt emulations              T=       177           2          6         31        138
pre-exception fixed                 T=         0           0          0          0          0
calls to shadow_alloc               T=         0           0          0          0          0
shadow_alloc flushed TLBs           T=         0           0          0          0          0
number of shadow pages in use       T=         0           0
calls to shadow_free                T=         0           0          0          0          0
shadow recycles old shadows         T=         0           0          0          0          0
shadow recycles in-use shadows      T=         0           0          0          0          0
shadow hit read-only linear map     T=         0           0          0          0          0
shadow A bit update                 T=         0           0          0          0          0
shadow A&D bit update               T=         0           0          0          0          0
calls to shadow_fault               T=         0           0          0          0          0
shadow_fault guest bad gfn          T=         0           0          0          0          0
shadow_fault guest not-present      T=         0           0          0          0          0
shadow_fault guest NX fault         T=         0           0          0          0          0
shadow_fault guest R/W fault        T=         0           0          0          0          0
shadow_fault guest U/S fault        T=         0           0          0          0          0
shadow_fault emulates a read        T=         0           0          0          0          0
shadow_fault emulates a write       T=         0           0          0          0          0
shadow_fault emulator fails         T=         0           0          0          0          0
shadow_fault handled as mmio        T=         0           0          0          0          0
shadow_fault fixed fault            T=         0           0          0          0          0
shadow causes ptwr to emulate       T=         0           0          0          0          0
calls to shadow_validate_gl1e       T=         0           0          0          0          0
calls to shadow_validate_gl2e       T=         0           0          0          0          0
calls to shadow_validate_gl3e       T=         0           0          0          0          0
calls to shadow_validate_gl4e       T=         0           0          0          0          0
calls to shadow_hash_lookup         T=         0           0          0          0          0
shadow hash hit in bucket head      T=         0           0          0          0          0
shadow hash misses                  T=         0           0          0          0          0
calls to get_shadow_status          T=         0           0          0          0          0
calls to shadow_hash_insert         T=         0           0          0          0          0
calls to shadow_hash_delete         T=         0           0          0          0          0
shadow removes write access         T=         0           0          0          0          0
shadow writeable: 32b w2k3          T=         0           0          0          0          0
shadow writeable: 32pae w2k3        T=         0           0          0          0          0
shadow writeable: 64b w2k3          T=         0           0          0          0          0
shadow writeable: 32b linux low     T=         0           0          0          0          0
shadow writeable: 32b linux high    T=         0           0          0          0          0
shadow writeable brute-force        T=         0           0          0          0          0
shadow removes all mappings         T=         0           0          0          0          0
shadow rm-mappings brute-force      T=         0           0          0          0          0
shadow unshadows for fork/exit      T=         0           0          0          0          0
shadow unshadows a page             T=         0           0          0          0          0
shadow unshadow by up-pointer       T=         0           0          0          0          0
shadow unshadow brute-force         T=         0           0          0          0          0
shadow_get_page_from_l1e failed     T=         0           0          0          0          0
shadow walks guest tables           T=         0           0          0          0          0
shadow emulates invlpg              T=         0           0          0          0          0
shadow invlpg faults                T=         0           0          0          0          0
hypercalls                          T=      3295 
set_trap_table                                 0
mmu_update                                    17
set_gdt                                        0
stack_switch                                   0
set_callbacks                                  0
fpu_taskswitch                                 0
sched_op_compat                                0
platform_op                                    0
set_debugreg                                   0
get_debugreg                                   0
update_descriptor                              3
NULL                                           0
memory_op                                      0
multicall                                    845
update_va_mapping                            548
set_timer_op                                 696
event_channel_op_compat                        0
xen_version                                    0
console_io                                     0
physdev_op_compat                              0
grant_table_op                                 0
vm_assist                                      0
update_va_mapping_otherdomain                  0
iret                                           0
vcpu_op                                        0
set_segment_base                               0
mmuext_op                                    305
acm_op                                         0
nmi_op                                         0
sched_op                                     696
callback_op                                    0
xenoprof_op                                    0
event_channel_op                              84
physdev_op                                    99
hvm_op                                         0
NULL                                           2
NULL                                           0
NULL                                           0
NULL                                           0
NULL                                           0
NULL                                           0
NULL                                           0
NULL                                           0
NULL                                           0
NULL                                           0
NULL                                           0
NULL                                           0
NULL                                           0
arch_0                                         0
arch_1                                         0
arch_2                                         0
arch_3                                         0
arch_4                                         0
arch_5                                         0
arch_6                                         0
arch_7                                         0
NULL                                           0
NULL                                           0
NULL                                           0
NULL                                           0
NULL                                           0
NULL                                           0
NULL                                           0
NULL                                           0
#interrupts                         T=       942         942          0          0          0
#IPIs                               T=       107          61          2         25         19
sched: timer                        T=       870         137        248        233        252
sched: runs through scheduler       T=      2192         947        392        462        391
sched: context switches             T=      1388         840        164        237        147
PG_need_flush tlb flushes           T=         8           0          1          1          6

[-- Attachment #4: Type: text/plain, Size: 138 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel

             reply	other threads:[~2006-11-02  4:22 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-11-02  4:22 Yoshihiko Yaegashi [this message]
2006-11-14  1:22 ` [PATCH] xenperf hypercall pretty print Yoshihiko Yaegashi

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=454972A1.6080804@jp.fujitsu.com \
    --to=y.yaegashi@jp.fujitsu.com \
    --cc=xen-devel@lists.xensource.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.