On 2016/3/23 17:50, Peter Zijlstra wrote:
On Mon, Mar 14, 2016 at 09:59:43AM +0000, Wang Nan wrote:
Convert perf_output_begin to __perf_output_begin and make the later
function able to write records from the end of the ring buffer.
Following commits will utilize the 'backward' flag.

This patch doesn't introduce any extra performance overhead since we
use always_inline.
So while I agree that with __always_inline and constant propagation we
_should_ end up with the same code, we have:

$ size defconfig-build/kernel/events/ring_buffer.o.{pre,post}
    text    data     bss     dec     hex filename
    3785       2       0    3787     ecb 
defconfig-build/kernel/events/ring_buffer.o.pre
    3673       2       0    3675     e5b 
defconfig-build/kernel/events/ring_buffer.o.post

The patch actually makes the file shrink.

So I think we still want to have some actual performance numbers.

In my environment the two objects are nearly idential:


$ objdump -d kernel/events/ring_buffer.o.new  > ./out.new.S
$ objdump -d kernel/events/ring_buffer.o.old  > ./out.old.S

--- ./out.old.S    2016-03-25 12:18:52.060656423 +0000
+++ ./out.new.S    2016-03-25 12:18:45.376630269 +0000
@@ -1,5 +1,5 @@

-kernel/events/ring_buffer.o.old:     file format elf64-x86-64
+kernel/events/ring_buffer.o.new:     file format elf64-x86-64


 Disassembly of section .text:
@@ -320,7 +320,7 @@
  402:    4d 8d 04 0f              lea    (%r15,%rcx,1),%r8
  406:    48 89 c8                 mov    %rcx,%rax
  409:    4c 0f b1 43 40           cmpxchg %r8,0x40(%rbx)
- 40e:    48 39 c8                 cmp    %rcx,%rax
+ 40e:    48 39 c1                 cmp    %rax,%rcx
  411:    75 b4                    jne    3c7 <perf_output_begin+0xc7>
  413:    48 8b 73 58              mov    0x58(%rbx),%rsi
  417:    48 8b 43 68              mov    0x68(%rbx),%rax
@@ -357,7 +357,7 @@
  480:    85 c0                    test   %eax,%eax
  482:    0f 85 02 ff ff ff        jne    38a <perf_output_begin+0x8a>
  488:    48 c7 c2 00 00 00 00     mov    $0x0,%rdx
- 48f:    be 7c 00 00 00           mov    $0x7c,%esi
+ 48f:    be 89 00 00 00           mov    $0x89,%esi
  494:    48 c7 c7 00 00 00 00     mov    $0x0,%rdi
49b: c6 05 00 00 00 00 01 movb $0x1,0x0(%rip) # 4a2 <perf_output_begin+0x1a2>
  4a2:    e8 00 00 00 00           callq  4a7 <perf_output_begin+0x1a7>
@@ -874,7 +874,7 @@
  c39:    eb e7                    jmp    c22 <perf_aux_output_begin+0x172>
c3b: 80 3d 00 00 00 00 00 cmpb $0x0,0x0(%rip) # c42 <perf_aux_output_begin+0x192>
  c42:    75 93                    jne    bd7 <perf_aux_output_begin+0x127>
- c44:    be 2b 01 00 00           mov    $0x12b,%esi
+ c44:    be 49 01 00 00           mov    $0x149,%esi
  c49:    48 c7 c7 00 00 00 00     mov    $0x0,%rdi
  c50:    e8 00 00 00 00           callq  c55 <perf_aux_output_begin+0x1a5>
c55: c6 05 00 00 00 00 01 movb $0x1,0x0(%rip) # c5c <perf_aux_output_begin+0x1ac>


I think you enabled some unusual config options?

Thank you.

Reply via email to