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

Re: [Xen-devel] [PATCH v5 03/17] xenctx: Add -n (--display-stack-pages) option to output larger stack



On 03/21/14 10:29, Ian Campbell wrote:
On Thu, 2014-03-20 at 15:06 -0400, Don Slutz wrote:
From: Don Slutz <Don@xxxxxxxxxxxxxxx>

Important: This is the stack size to display not the configured
stack size.

Note: use with caution (easy to get garbage).

Below is various pictures of a configured 3 page stack, and where
the SP currently is.  Each box is a page.

        +------------------+
        |                  |
        |                  |
        |                  |
        |                  |
        |                  |
        +------------------+
        |                  |
        |                  |
        |                  |
        |                  |
        |                  |
        +------------------+
        |                  |
        |                  |
        |                  |
SP --> |                  |
        |                  |
        +------------------+

Display using "-n 1" since the used stack pages is 1.
Like George I am also confused by what these diagrams are trying to show
me, and even having read your response to him I'm confused.

Let me try again.

Here is real output for a kernel with 4 page stacks:

tools/xentrace/xenctx -s ~/zzm 4 -n 1
rip: ffffffff81346876 io_serial_in+0x16
flags: 00000002 nz
rsp: ffff8800385a5ab8
rax: 000000000000006f   rcx: 0000000000000000   rdx: 00000000000003fd
rbx: ffffffff81ff8f00   rsi: 0000000000000005   rdi: ffffffff81ff8f00
rbp: ffff8800385a5ab8    r8: ffffffff81c03a10    r9: 0000000000000080
r10: 0000000000000005   r11: 0000000000000046   r12: 000000000000270f
r13: 0000000000000020   r14: 0000000000000025   r15: ffffffff81346f20
 cs: 0010        ss: 0018        ds: 0000        es: 0000
 fs: 0000 @ 00007f07972f3700
 gs: 0000 @ ffff88000b400000/0000000000000000/
Code (instr addr ffffffff81346876)
48 89 e5 0f 1f 44 00 00 0f b6 4f 41 0f b7 57 08 d3 e6 01 f2 ec <0f> b6 c0 c9 c3 0f 1f 44 00 00 55


Stack:
 ffff8800385a5ae8 ffffffff81346e64 ffffffff81ff8f00 0000000000000072
 0000000000000064 0000000000000025 ffff8800385a5b08 ffffffff81346f46
 ffffffff81e3e430 ffffffff81ff8f00 ffff8800385a5b48 ffffffff813428de
 ffffffff8100bc0e 0000000000000000 ffffffff81ff8f00 0000000000000001
 0000000000000064 ffffffff81e3e40c ffff8800385a5b98 ffffffff813472ad

Call Trace:
  [<ffffffff81346876>] io_serial_in+0x16 <--
  [<ffffffff81346e64>] wait_for_xmitr+0x24
  [<ffffffff81346f46>] serial8250_console_putchar+0x26
  [<ffffffff813428de>] uart_console_write+0x3e
  [<ffffffff8100bc0e>] apic_timer_interrupt+0xe
  [<ffffffff813472ad>] serial8250_console_write+0xbd
  [<ffffffff8106b8f5>] __call_console_drivers+0x75
  [<ffffffff8106b95a>] _call_console_drivers+0x4a
  [<ffffffff8106be6e>] release_console_sem+0x4e
  [<ffffffff8106c628>] vprintk+0x248
  [<ffffffff814fd363>] printk+0x41


tools/xentrace/xenctx -s ~/zzm 4 -n 2
rip: ffffffff81346876 io_serial_in+0x16
flags: 00000002 nz
rsp: ffff8800385a5ab8
rax: 000000000000006f   rcx: 0000000000000000   rdx: 00000000000003fd
rbx: ffffffff81ff8f00   rsi: 0000000000000005   rdi: ffffffff81ff8f00
rbp: ffff8800385a5ab8    r8: ffffffff81c03a10    r9: 0000000000000080
r10: 0000000000000005   r11: 0000000000000046   r12: 000000000000270f
r13: 0000000000000020   r14: 0000000000000025   r15: ffffffff81346f20
 cs: 0010        ss: 0018        ds: 0000        es: 0000
 fs: 0000 @ 00007f07972f3700
 gs: 0000 @ ffff88000b400000/0000000000000000/
Code (instr addr ffffffff81346876)
48 89 e5 0f 1f 44 00 00 0f b6 4f 41 0f b7 57 08 d3 e6 01 f2 ec <0f> b6 c0 c9 c3 0f 1f 44 00 00 55


Stack:
 ffff8800385a5ae8 ffffffff81346e64 ffffffff81ff8f00 0000000000000072
 0000000000000064 0000000000000025 ffff8800385a5b08 ffffffff81346f46
 ffffffff81e3e430 ffffffff81ff8f00 ffff8800385a5b48 ffffffff813428de
 ffffffff8100bc0e 0000000000000000 ffffffff81ff8f00 0000000000000001
 0000000000000064 ffffffff81e3e40c ffff8800385a5b98 ffffffff813472ad

Call Trace:
  [<ffffffff81346876>] io_serial_in+0x16 <--
  [<ffffffff81346e64>] wait_for_xmitr+0x24
  [<ffffffff81346f46>] serial8250_console_putchar+0x26
  [<ffffffff813428de>] uart_console_write+0x3e
  [<ffffffff8100bc0e>] apic_timer_interrupt+0xe
  [<ffffffff813472ad>] serial8250_console_write+0xbd
  [<ffffffff8106b8f5>] __call_console_drivers+0x75
  [<ffffffff8106b95a>] _call_console_drivers+0x4a
  [<ffffffff8106be6e>] release_console_sem+0x4e
  [<ffffffff8106c628>] vprintk+0x248
  [<ffffffff814fd363>] printk+0x41


tools/xentrace/xenctx -s ~/zzm 4 -n 3
rip: ffffffff81346876 io_serial_in+0x16
flags: 00000002 nz
rsp: ffff8800385a5ab8
rax: 000000000000006f   rcx: 0000000000000000   rdx: 00000000000003fd
rbx: ffffffff81ff8f00   rsi: 0000000000000005   rdi: ffffffff81ff8f00
rbp: ffff8800385a5ab8    r8: ffffffff81c03a10    r9: 0000000000000080
r10: 0000000000000005   r11: 0000000000000046   r12: 000000000000270f
r13: 0000000000000020   r14: 0000000000000025   r15: ffffffff81346f20
 cs: 0010        ss: 0018        ds: 0000        es: 0000
 fs: 0000 @ 00007f07972f3700
 gs: 0000 @ ffff88000b400000/0000000000000000/
Code (instr addr ffffffff81346876)
48 89 e5 0f 1f 44 00 00 0f b6 4f 41 0f b7 57 08 d3 e6 01 f2 ec <0f> b6 c0 c9 c3 0f 1f 44 00 00 55


Stack:
 ffff8800385a5ae8 ffffffff81346e64 ffffffff81ff8f00 0000000000000072
 0000000000000064 0000000000000025 ffff8800385a5b08 ffffffff81346f46
 ffffffff81e3e430 ffffffff81ff8f00 ffff8800385a5b48 ffffffff813428de
 ffffffff8100bc0e 0000000000000000 ffffffff81ff8f00 0000000000000001
 0000000000000064 ffffffff81e3e40c ffff8800385a5b98 ffffffff813472ad

Call Trace:
  [<ffffffff81346876>] io_serial_in+0x16 <--
  [<ffffffff81346e64>] wait_for_xmitr+0x24
  [<ffffffff81346f46>] serial8250_console_putchar+0x26
  [<ffffffff813428de>] uart_console_write+0x3e
  [<ffffffff8100bc0e>] apic_timer_interrupt+0xe
  [<ffffffff813472ad>] serial8250_console_write+0xbd
  [<ffffffff8106b8f5>] __call_console_drivers+0x75
  [<ffffffff8106b95a>] _call_console_drivers+0x4a
  [<ffffffff8106be6e>] release_console_sem+0x4e
  [<ffffffff8106c628>] vprintk+0x248
  [<ffffffff814fd363>] printk+0x41
  [<ffffffff8100204c>] do_one_initcall+0x3c
  [<ffffffff810b0eb1>] sys_init_module+0xe1
  [<ffffffff8100b0f2>] system_call_fastpath+0x16



As you can see from above, only the last 3 lines show up for "-n 3"



Why is the SP moving around in these pictures? I understood that this
option was changing what was considered to be the limit of the stack,
not the stack pointer itself, so shouldn't it be the base of the stack
which is moving around?

These are pictures of the same stack at 3 different times. And as you can see
from above, this option does change the stack limit.



Perhaps if you had the diagram once and along side it had columns
showing what is printed for each -n value as a range

e.g.
                               None     -n 1
        +------------------+              +
        |                  |              |
        |                  |              |
        |                  |              |
        |                  |              |
        |                  |              |
        +------------------+     +        |
        |                  |     |        |
SP --> |                  |     +        +
        |                  |
        |                  |
        |                  |
        +------------------+

(or whatever the reality is)

[...]

I will add this. And some statement about each picture is for a different time.

Signed-off-by: Don Slutz <Don@xxxxxxxxxxxxxxx>
Out of date?

Yes, and no.  Both email continue to work.  I will update it.

---
v5: Adjust option to -n, --display-stack-pages.  Adjust usage message.

  tools/xentrace/xenctx.c | 12 +++++++++++-
  1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/tools/xentrace/xenctx.c b/tools/xentrace/xenctx.c
index 42a47f3..caa8899 100644
--- a/tools/xentrace/xenctx.c
+++ b/tools/xentrace/xenctx.c
@@ -35,6 +35,7 @@ static struct xenctx {
      int frame_ptrs;
      int stack_trace;
      int disp_all;
+    int multiple_pages;
      int all_vcpus;
      int self_paused;
      xc_dominfo_t dominfo;
@@ -664,6 +665,8 @@ static int print_stack(vcpu_guest_context_any_t *ctx, int 
vcpu, int width)
stack_limit = ((stack_pointer(ctx) + XC_PAGE_SIZE)
                     & ~((guest_word_t) XC_PAGE_SIZE - 1));
+    if ( xenctx.multiple_pages > 1 )
+        stack_limit += (xenctx.multiple_pages - 1) * XC_PAGE_SIZE;
"multiple_pages" sounds like a boolean to me, you seem to use it as
"extra_pages", but why not just call it nr_stack_pages, initialise it to
1 and override it with --display-stack-pages.

I will adjust the internal name also. No idea why I did not do so when to option name was changed.

   -Don Slutz

Ian.



_______________________________________________
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®.