All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] xenperf hypercall pretty print
@ 2006-11-02  4:22 Yoshihiko Yaegashi
  2006-11-14  1:22 ` Yoshihiko Yaegashi
  0 siblings, 1 reply; 2+ messages in thread
From: Yoshihiko Yaegashi @ 2006-11-02  4:22 UTC (permalink / raw)
  To: xen-devel

[-- 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

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] xenperf hypercall pretty print
  2006-11-02  4:22 [PATCH] xenperf hypercall pretty print Yoshihiko Yaegashi
@ 2006-11-14  1:22 ` Yoshihiko Yaegashi
  0 siblings, 0 replies; 2+ messages in thread
From: Yoshihiko Yaegashi @ 2006-11-14  1:22 UTC (permalink / raw)
  To: xen-devel

Hi,

Do you have any comment?
If you have no comment, could you commit this patch?

http://lists.xensource.com/archives/html/xen-devel/2006-11/msg00009.html

Best regards,
 Yaegashi

Yoshihiko Yaegashi wrote:
> 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>

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2006-11-14  1:22 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-11-02  4:22 [PATCH] xenperf hypercall pretty print Yoshihiko Yaegashi
2006-11-14  1:22 ` Yoshihiko Yaegashi

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.