性能分析 函数粒度 函数里的一条语句 汇编 反编译 机器指令 %rbx,%rbp

在Linux下做性能分析3:perf - 知乎 https://zhuanlan.zhihu.com/p/22194920

Linux Perf 性能分析工具及火焰图浅析 - 知乎 https://zhuanlan.zhihu.com/p/54276509

perf record -a -g -e cycles -e cs #系统整体采样

查看指定进程

redis-server

perf report --pid 7070

mysqld

perf report --pid 5634

Samples: 25K of event 'cs', Event count (approx.): 463138
Children Self Command Shared Object Symbol
0.04% 0.00% mysqld [unknown] [.] 0xffffffff83b100f0 ▒
0.04% 0.00% mysqld [unknown] [.] 0xffffffff83b0fbd6 ▒
0.04% 0.00% mysqld [unknown] [.] 0xffffffff83b0de8b ▒
0.04% 0.00% mysqld [unknown] [.] 0xffffffff83b0d1a6 ▒
0.03% 0.00% mysqld mysqld [.] os_event::wait_time_low ▒
0.03% 0.00% mysqld libpthread-2.17.so;5d9ff4e7 (deleted) [.] 0x00007f23ef6b0d12 ◆
0.02% 0.00% mysqld mysqld [.] lock_wait_timeout_thread ▒
0.01% 0.00% mysqld mysqld [.] thd_prepare_connection ▒
0.01% 0.00% mysqld mysqld [.] check_connection ▒
0.01% 0.00% mysqld mysqld [.] acl_authenticate ▒
0.01% 0.00% mysqld mysqld [.] do_auth_once ▒
0.01% 0.00% mysqld mysqld [.] native_password_authenticate ▒
0.01% 0.00% mysqld mysqld [.] server_mpvio_read_packet ▒
0.01% 0.00% mysqld mysqld [.] parse_client_handshake_packet ▒
0.01% 0.00% mysqld libpthread-2.17.so;5d9ff4e7 (deleted) [.] 0x00007f23ef6b0965 ▒
0.01% 0.00% mysqld mysqld [.] srv_master_thread ▒
0.01% 0.00% mysqld libpthread-2.17.so;5d9ff4e7 (deleted) [.] 0x00007f23ef6b3e3d ▒
0.01% 0.00% mysqld [unknown] [.] 0xffffffff83ac6d36 ▒
0.01% 0.00% mysqld [unknown] [.] 0xffffffff83ac6bdb ▒
0.01% 0.00% mysqld [unknown] [.] 0xffffffff84167f06 ▒
0.01% 0.00% mysqld mysqld [.] buf_flush_page_cleaner_coordinator ▒
0.01% 0.00% mysqld mysqld [.] sslaccept ▒
0.01% 0.00% mysqld mysqld [.] yaSSL_accept ▒
0.00% 0.00% mysqld mysqld [.] srv_monitor_thread ▒
0.00% 0.00% mysqld libc-2.17.so;5d9ff4e7 (deleted) [.] 0x00007f23ee08a3d5 ▒
0.00% 0.00% mysqld mysqld [.] mysqld_main ▒
0.00% 0.00% mysqld [unknown] [.] 0xffffffff8416813d ▒
0.00% 0.00% mysqld mysqld [.] srv_error_monitor_thread ▒
3793a0 3793b0 g std::string::_Rep::_M_dispose@plt ▒

Samples: 159K of event 'cpu-clock', Event count (approx.): 39969500000
Children Self Command Shared Object Symbol
+ 0.72% 0.00% mysqld libpthread-2.17.so;5d9ff4e7 (deleted) [.] 0x00007f23ef6acdd5
+ 0.71% 0.00% mysqld mysqld [.] pfs_spawn_thread
+ 0.71% 0.00% mysqld mysqld [.] handle_connection
+ 0.60% 0.00% mysqld mysqld [.] thd_prepare_connection
+ 0.60% 0.00% mysqld mysqld [.] check_connection
+ 0.60% 0.00% mysqld mysqld [.] acl_authenticate
+ 0.60% 0.00% mysqld mysqld [.] do_auth_once
+ 0.60% 0.00% mysqld mysqld [.] native_password_authenticate
+ 0.60% 0.00% mysqld mysqld [.] server_mpvio_read_packet
+ 0.60% 0.00% mysqld mysqld [.] parse_client_handshake_packet
+ 0.60% 0.00% mysqld mysqld [.] sslaccept
+ 0.58% 0.00% mysqld mysqld [.] TaoCrypt::a_exp_b_mod_c
+ 0.58% 0.00% mysqld mysqld [.] TaoCrypt::AbstractRing::Exponentiate
+ 0.58% 0.00% mysqld mysqld [.] TaoCrypt::ModularArithmetic::SimultaneousExponentiate
+ 0.58% 0.00% mysqld mysqld [.] TaoCrypt::AbstractGroup::SimultaneousMultiply
+ 0.54% 0.00% mysqld mysqld [.] yaSSL_accept
0.47% 0.00% mysqld mysqld [.] yaSSL::sendServerKeyExchange
0.47% 0.00% mysqld mysqld [.] yaSSL::ServerKeyExchange::build
0.47% 0.00% mysqld mysqld [.] yaSSL::DH_Server::build
0.47% 0.00% mysqld mysqld [.] TaoCrypt::MontgomeryRepresentation::Square
0.47% 0.00% mysqld mysqld [.] TaoCrypt::RSA_PublicKey::ApplyFunction
0.47% 0.00% mysqld mysqld [.] yaSSL::RSA::sign
0.47% 0.00% mysqld mysqld [.] TaoCrypt::RSA_Encryptor<TaoCrypt::RSA_BlockType1>::Encrypt
0.36% 0.00% mysqld mysqld [.] TaoCrypt::MontgomeryReduce
0.32% 0.03% mysqld mysqld [.] TaoCrypt::RecursiveMultiply
0.27% 0.24% mysqld mysqld [.] TaoCrypt::Portable::Multiply8
0.18% 0.01% mysqld mysqld [.] TaoCrypt::RecursiveMultiplyTop
0.17% 0.01% mysqld mysqld [.] TaoCrypt::RecursiveSquare
0.15% 0.00% mysqld mysqld [.] TaoCrypt::RecursiveMultiplyBottom
0.14% 0.13% mysqld mysqld [.] TaoCrypt::Portable::Add
0.10% 0.00% mysqld mysqld [.] TaoCrypt::MontgomeryRepresentation::Multiply
0.10% 0.00% mysqld mysqld [.] do_command
0.10% 0.00% mysqld mysqld [.] TaoCrypt::AbstractRing::MultiplicativeGroupT::Accumulate
0.08% 0.00% mysqld mysqld [.] dispatch_command
0.08% 0.00% mysqld mysqld [.] yaSSL::processReply
Tip: System-wide collection from all CPUs: perf record -a

Samples: 159K of event 'cpu-clock', Event count (approx.): 39969500000
Children Self Command Shared Object Symbol
0.00% 0.00% nginx [unknown] [.] 0xffffffff8417a6e8 ◆
0.00% 0.00% nginx [unknown] [.] 0xffffffff83aa13f5 ▒
0.00% 0.00% nginx [unknown] [.] 0xffffffff83a2e675 ▒
0.00% 0.00% nginx [unknown] [.] 0xffffffff8417932c ▒
0.00% 0.00% nginx [unknown] [.] 0xffffffff84175ddb ▒
0.00% 0.00% nginx [unknown] [.] 0x64222c3030323a22 ▒
0.00% 0.00% nginx [unknown] [.] 0x000055d5cf29c5d0 ▒
0.00% 0.00% nginx [unknown] [k] 0x0000000000000019 ▒
0.00% 0.00% nginx libpthread-2.17.so;5d9ff4e7 (deleted) [.] 0x00007f304e9c4680 ▒
0.00% 0.00% nginx [unknown] [.] 0xffffffff83c426af ▒
0.00% 0.00% nginx [unknown] [.] 0xffffffff83c41890 ▒
0.00% 0.00% nginx [unknown] [.] 0xffffffff83c40da3 ▒
0.00% 0.00% nginx [unknown] [.] 0xffffffffc04c1322 ▒
0.00% 0.00% nginx [unknown] [.] 0xffffffff83bb8e89 ▒
0.00% 0.00% nginx [unknown] [.] 0xffffffff83bb8c12 ▒
0.00% 0.00% nginx [unknown] [.] 0xffffffff83aa1075 ▒
0.00% 0.00% nginx [kernel.kallsyms] [k] run_timer_softirq ▒
0.00% 0.00% nginx libz.so.1.2.7 [.] 0x000000000000388e ▒
0.00% 0.00% nginx libz.so.1.2.7 [.] crc32 ▒
0.00% 0.00% nginx [unknown] [k] 0x000055d5cf29c6f0 ▒
0.00% 0.00% nginx [unknown] [.] 0x000055d5cf1847e8 ▒
0.00% 0.00% nginx libz.so.1.2.7 [.] 0x00007f304dc3688e ▒
0.00% 0.00% nginx [kernel.kallsyms] [k] do_get_write_access ▒
0.00% 0.00% nginx [kernel.kallsyms] [k] eth_type_trans ▒
0.00% 0.00% nginx [kernel.kallsyms] [k] radix_tree_descend ▒
0.00% 0.00% nginx [kernel.kallsyms] [k] copy_user_enhanced_fast_string ▒
0.00% 0.00% nginx [kernel.kallsyms] [k] __x86_indirect_thunk_rax ▒
0.00% 0.00% nginx [kernel.kallsyms] [k] _raw_spin_unlock_irqrestore ▒
0.00% 0.00% nginx [kernel.kallsyms] [k] check_for_new_grace_period.isra.26 ▒
0.00% 0.00% nginx [kernel.kallsyms] [k] __do_softirq ▒
0.00% 0.00% nginx nginx [.] ngx_http_create_request ▒
0.00% 0.00% nginx [kernel.kallsyms] [k] sys_epoll_ctl ▒
0.00% 0.00% nginx nginx [.] 0x0000000000067287 ▒
0.00% 0.00% nginx nginx [.] 0x000000000007a501 ▒
0.00% 0.00% nginx libz.so.1.2.7 [.] 0x0000000000002c52

Samples: 159K of event 'cpu-clock', 4000 Hz, Event count (approx.): 39969500000
TaoCrypt::Portable::Add /usr/sbin/mysqld [Percent: local period]
3.48 │ lea 0x1(%r8),%r9d ▒
3.48 │ mov (%rdx,%r9,8),%rbx ▒
│ _ZN8TaoCrypt5DWordplEm(): ▒
3.48 │ mov %rbx,%r10 ▒
2.99 │ add (%rsi,%r9,8),%r10 ▒
3.48 │ add %r10,%r11 ▒
4.48 │ setb %r12b ▒
6.97 │ xor %eax,%eax ▒
1.49 │ cmp %r10,%rbx ▒
1.00 │ seta %al ▒
│ _ZN8TaoCrypt8Portable3AddEPmPKmS3_j(): ▒
7.96 │ add $0x2,%r8d ▒
0.50 │ mov %r11,(%rdi,%r9,8) ▒
│ _ZN8TaoCrypt5DWordplEm(): ▒
1.99 │ add %r12,%rax ▒
│ _ZN8TaoCrypt8Portable3AddEPmPKmS3_j(): ▒
3.48 │ cmp %r8d,%ecx ▒
│ → ja 1318f70 <TaoCrypt::Portable::Add(unsigned long*, unsigned long const*, unsigned long const*, unsigned int)+0x10> ▒
0.50 │ pop %rbx ▒
│ pop %r12 ▒
│ pop %rbp ▒
│ ← retq ▒
│ DWord(): ▒
│ xor %eax,%eax ▒
│ ← retq ▒


Samples: 159K of event 'cpu-clock', 4000 Hz, Event count (approx.): 39969500000
TaoCrypt::Portable::Add /usr/sbin/mysqld [Percent: local period]
Percent│ ◆
│ ▒
│ ▒
│ Disassembly of section .text: ▒
│ ▒
│ 0000000001318f60 <TaoCrypt::Portable::Add(unsigned long*, unsigned long const*, unsigned long const*, unsigned int)>: ▒
│ _ZN8TaoCrypt8Portable3AddEPmPKmS3_j(): ▒
1.49 │ test %ecx,%ecx ▒
│ → je 1318fd0 <TaoCrypt::Portable::Add(unsigned long*, unsigned long const*, unsigned long const*, unsigned int)+0x70> ▒
│ push %rbp ▒
│ DWord(): ▒
│ xor %eax,%eax ▒
│ _ZN8TaoCrypt8Portable3AddEPmPKmS3_j(): ▒
│ xor %r8d,%r8d ▒
│ mov %rsp,%rbp ▒
1.49 │ push %r12 ▒
3.48 │ push %rbx ▒
5.47 │ mov %r8d,%r10d ▒
│ _ZN8TaoCrypt5DWordplEm(): ▒
1.49 │ xor %r11d,%r11d ▒
│ _ZN8TaoCrypt8Portable3AddEPmPKmS3_j(): ▒
1.49 │ mov (%rdx,%r10,8),%rbx ▒
│ _ZN8TaoCrypt5DWordplEm(): ▒
3.98 │ mov %rbx,%r9 ▒
1.00 │ add (%rsi,%r10,8),%r9 ▒
1.49 │ add %r9,%rax ▒
3.48 │ setb %r11b ▒
4.98 │ cmp %r9,%rbx ▒
│ _ZN8TaoCrypt8Portable3AddEPmPKmS3_j(): ▒
3.98 │ mov %rax,(%rdi,%r10,8) ▒
│ _ZN8TaoCrypt5DWordplEm(): ▒
5.97 │ seta %r9b ▒
6.47 │ xor %r12d,%r12d ▒
2.49 │ movzbl %r9b,%r9d ▒
5.97 │ add %r9,%r11 ▒
Press 'h' for help on key bindings ▒

深入理解Windows X64调试 - _懒人 - 博客园 https://www.cnblogs.com/lanrenxinxin/p/4762858.html

 X86-64寄存器和栈帧 - 为程序员服务 http://ju.outofmemory.cn/entry/769

 x86寄存器问题 - wang010366的专栏 - CSDN博客 https://blog.csdn.net/wang010366/article/details/52015264

x64 Architecture - Windows drivers | Microsoft Docs https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/x64-architecture

#include <stdio.h>
#include <malloc.h>

int my_stack_heap(void){
   /*在栈上分配*/
    int  i1=0;
    int  i2=0;
    int  i3=0;
    int  i4=0;
    printf("---");
    printf("栈:向下 i1=0x%08x,i2=0x%08x,i3=0x%08x,i4=0x%08x,
",&i1,&i2,&i3,&i4);
    /*在堆上分配*/
    char  *p1 = (char *)malloc(256);
    char  *p2 = (char *)malloc(256);
    char  *p3 = (char *)malloc(256);
    char  *p4 = (char *)malloc(256);
    printf("堆:向上 p1=0x%08x,p2=0x%08x,p3=0x%08x,p4=0x%08x,
",p1,p2,p3,p4);
    /*释放堆内存*/
    free(p1);
    p1=NULL;
    free(p2);
    p2=NULL;
    free(p3);
    p3=NULL;
    free(p4);
    p4=NULL;
 
    /*
 
    栈:向下
    i1=0x0022fe2c
    i2=0x0022fe28
    i3=0x0022fe24
    i4=0x0022fe20
 
    --------------------
 
    p1=0x004bfe40
    p2=0x004bfe60
    p3=0x004bfe80
    p4=0x004bfea0
    堆:向上
 
    */
 return 0;
}
int main(void) {
 while (1==1)
 {
     /* code */
     my_stack_heap();
 }
 
    return 0;
}

gcc my_stack_heap.c -o my_stack_heap

  

Registers

x64 extends x86's 8 general-purpose registers to be 64-bit, and adds 8 new 64-bit registers. The 64-bit registers have names beginning with "r", so for example the 64-bit extension of eax is called rax. The new registers are named r8 through r15.

The lower 32 bits, 16 bits, and 8 bits of each register are directly addressable in operands. This includes registers, like esi, whose lower 8 bits were not previously addressable. The following table specifies the assembly-language names for the lower portions of 64-bit registers.

原文地址:https://www.cnblogs.com/rsapaper/p/11689445.html