zoukankan      html  css  js  c++  java
  • 性能分析 函数粒度 函数里的一条语句 汇编 反编译 机器指令 %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.

  • 相关阅读:
    (转) Nova是如何统计OpenStack资源
    (转) 一次批量重启引发的Neutron网络故障
    (转)理解Keystone的四种Token
    neutron 虚拟机网络问题调试
    转 Nova: 虚机的块设备总结 [Nova Instance Block Device]
    kvm 客户机系统的代码是如何运行的
    12 while循环
    11猜拳游戏
    10 if 嵌套
    09 if...elif..else语句
  • 原文地址:https://www.cnblogs.com/rsapaper/p/11689445.html
Copyright © 2011-2022 走看看