On Thu, 15 Mar 2012 15:46:31 +0200
Avi Kivity <a...@redhat.com> wrote:

> You can look at what's happening by doing
> 
>   perf record -a -f
>   perf report
> 
> using the TUI, select 'annotate rmap_get_next'
> 
> You should see where the time is spent.
> 

Since the default sampling rate was not enough to get consistent numbers,
I raised the frequency to 50K/sec; so there was surely some overheads
during that sampling.

>From the result below, it seems to be the prologue and epilogue on which
we spent most of our time.

        Takuya

===
 Percent |      Source code & Disassembly of kvm.ko
------------------------------------------------
         :
         :
         :
         :      Disassembly of section .text:
         :
         :      0001d260 <rmap_get_next>:
         :       * Must be used with a valid iterator: e.g. after 
rmap_get_first().
         :       *
         :       * Returns true if spte is found, false otherwise.
         :       */
         :      static bool rmap_get_next(struct rmap_iterator *iter)
         :      {
    1.75 :         1d260:       push   %ebp
   17.54 :         1d261:       mov    %esp,%ebp
   12.28 :         1d263:       push   %ebx
    7.02 :         1d264:       call   1d265 <rmap_get_next+0x5>
         :              if (iter->desc) {
    1.75 :         1d269:       mov    0x4(%eax),%ecx
         :       * Must be used with a valid iterator: e.g. after 
rmap_get_first().
         :       *
         :       * Returns true if spte is found, false otherwise.
         :       */
         :      static bool rmap_get_next(struct rmap_iterator *iter)
         :      {
   22.81 :         1d26c:       mov    %eax,%edx
         :              if (iter->desc) {
    0.00 :         1d26e:       test   %ecx,%ecx
    0.00 :         1d270:       je     1d2b8 <rmap_get_next+0x58>
         :                      if (iter->pos < PTE_LIST_EXT - 1) {
    0.00 :         1d272:       mov    0x8(%eax),%eax
    0.00 :         1d275:       cmp    $0x5,%eax
    0.00 :         1d278:       jg     1d298 <rmap_get_next+0x38>
         :                              ++iter->pos;
    0.00 :         1d27a:       add    $0x1,%eax
    0.00 :         1d27d:       mov    %eax,0x8(%edx)
         :                              iter->sptep = 
iter->desc->sptes[iter->pos];
    0.00 :         1d280:       mov    (%ecx,%eax,4),%ebx
         :                              if (iter->sptep)
         :                                      return true;
    0.00 :         1d283:       mov    $0x1,%eax
         :      {
         :              if (iter->desc) {
         :                      if (iter->pos < PTE_LIST_EXT - 1) {
         :                              ++iter->pos;
         :                              iter->sptep = 
iter->desc->sptes[iter->pos];
         :                              if (iter->sptep)
    0.00 :         1d288:       test   %ebx,%ebx
         :      static bool rmap_get_next(struct rmap_iterator *iter)
         :      {
         :              if (iter->desc) {
         :                      if (iter->pos < PTE_LIST_EXT - 1) {
         :                              ++iter->pos;
         :                              iter->sptep = 
iter->desc->sptes[iter->pos];
    0.00 :         1d28a:       mov    %ebx,(%edx)
         :                              if (iter->sptep)
    0.00 :         1d28c:       je     1d298 <rmap_get_next+0x38>
         :                      }
         :              }
         :
         :              iter->sptep = NULL;
         :              return false;
         :      }
    0.00 :         1d28e:       pop    %ebx
    0.00 :         1d28f:       pop    %ebp
    0.00 :         1d290:       ret    
    0.00 :         1d291:       lea    0x0(%esi,%eiz,1),%esi
         :                              iter->sptep = 
iter->desc->sptes[iter->pos];
         :                              if (iter->sptep)
         :                                      return true;
         :                      }
         :
         :                      iter->desc = iter->desc->more;
    0.00 :         1d298:       mov    0x1c(%ecx),%eax
         :
         :                      if (iter->desc) {
    0.00 :         1d29b:       test   %eax,%eax
         :                              iter->sptep = 
iter->desc->sptes[iter->pos];
         :                              if (iter->sptep)
         :                                      return true;
         :                      }
         :
         :                      iter->desc = iter->desc->more;
    0.00 :         1d29d:       mov    %eax,0x4(%edx)
         :
         :                      if (iter->desc) {
    0.00 :         1d2a0:       je     1d2b8 <rmap_get_next+0x58>
         :                              iter->pos = 0;
    0.00 :         1d2a2:       movl   $0x0,0x8(%edx)
         :                              iter->sptep = 
iter->desc->sptes[iter->pos];
    0.00 :         1d2a9:       mov    (%eax),%eax
    0.00 :         1d2ab:       mov    %eax,(%edx)
    0.00 :         1d2ad:       mov    $0x1,%eax
         :                      }
         :              }
         :
         :              iter->sptep = NULL;
         :              return false;
         :      }
    0.00 :         1d2b2:       pop    %ebx
    0.00 :         1d2b3:       pop    %ebp
    0.00 :         1d2b4:       ret    
    0.00 :         1d2b5:       lea    0x0(%esi),%esi
         :                              /* desc->sptes[0] cannot be NULL */
         :                              return true;
         :                      }
         :              }
         :
         :              iter->sptep = NULL;
    0.00 :         1d2b8:       movl   $0x0,(%edx)
         :              return false;
    1.75 :         1d2be:       xor    %eax,%eax
         :      }
   12.28 :         1d2c0:       pop    %ebx
   22.81 :         1d2c1:       pop    %ebp
    0.00 :         1d2c2:       ret    
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to