范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

perf让CPU消耗无处遁形

  前言
  前几天我在看一篇公众号文章《DBA接招:一次因PAUSE指令变化引发的MySQL性能危机》 文章写得很棒,分析地也很彻底,但是更吸引我的是文中的几张图,例如
  区别于我们平时的perf top所看到的,在这张图里能看到函数嵌套的调用关系以及子函数的CPU占比。
  又例如:
  这里能看到整个函数调用链和各自的CPU占比,这对于我们进行性能诊断的时候来确定具体是哪个函数造成的无疑是非常有帮助的,一眼就能诊断出问题出在哪里。
  再比如这张火焰图
  简直太炫酷了。
  那么今天我们就来看下这些效果都是怎么实现的。
  一、perf top
  我们通过man perf top查看perf top的使用帮助,我们注意到有一个-g选项,大意就是能够追踪链路调用 -g
  Enables call-graph (stack chain/backtrace) recording
  我们来测试一把(13499是我的mysqld pid) perf top -p 13499 -v -g
  通过上下键选择某个函数,按回车就可以展开,是不是很方便呢。
  二、调用链
  要生成如前文所说的调用链的话,首先需要使用perf record记录采样数据保存在文件中,然后使用perf report进行分析生成报告输出
  perf record常用选项-e record指定PMU事件
  --filter event事件过滤器
  -a 录取所有CPU的事件
  -p 录取指定pid进程的事件
  -o 指定录取保存数据的文件名
  -g 使能函数调用图功能
  -C 录取指定CPU的事件
  实际测试perf record -F 99 -a -g -p 13499 -- sleep 60
  采集60秒以后会保存在文件perf.data中,然后使用perf report工具进行分析perf report --stdio
  生成函数调用链图,比如如下图(当时我正在用sysbench准备数据)# Children Self Command Shared Object Symbol
  # ........ ........ ....... .................. ...........................................................................................................................
  #
  95.42% 0.00% mysqld libpthread-2.17.so [.] start_thread
  |
  ---start_thread
  pfs_spawn_thread
  handle_connection
  do_command
  dispatch_command
  mysql_parse
  mysql_execute_command
  Sql_cmd_create_or_drop_index_base::execute
  mysql_alter_table
  mysql_inplace_alter_table
  ha_innobase::inplace_alter_table
  ha_innobase::inplace_alter_table_impl
  row_merge_build_indexes
  |
  --95.36%--row_merge_read_clustered_index
  |
  |--39.67%--row_merge_buf_sort
  | |
  | --39.48%--row_merge_tuple_sort
  | |
  | |--33.11%--row_merge_tuple_sort
  | | |
  | | |--27.10%--row_merge_tuple_sort
  | | | |
  | | | |--22.09%--row_merge_tuple_sort
  | | | | |
  | | | | |--18.50%--row_merge_tuple_sort
  | | | | | |
  | | | | | |--16.34%--row_merge_tuple_sort
  | | | | | | |
  | | | | | | |--14.67%--row_merge_tuple_sort
  | | | | | | | |
  | | | | | | | |--13.49%--row_merge_tuple_sort
  | | | | | | | | |
  | | | | | | | | |--12.38%--row_merge_tuple_sort
  | | | | | | | | | |
  | | | | | | | | | --11.63%--row_merge_tuple_sort
  | | | | | | | | | |
  | | | | | | | | | |--10.40%--row_merge_tuple_sort
  | | | | | | | | | | |
  | | | | | | | | | | |--9.16%--row_merge_tuple_sort
  | | | | | | | | | | | |
  | | | | | | | | | | | |--7.92%--row_merge_tuple_sort
  | | | | | | | | | | | | |
  | | | | | | | | | | | | --7.43%--row_merge_tuple_sort
  | | | | | | | | | | | | |
  | | | | | | | | | | | | --6.62%--row_merge_tuple_sort
  | | | | | | | | | | | | |
  | | | | | | | | | | | | --5.82%--row_merge_tuple_sort
  | | | | | | | | | | | | |
  | | | | | | | | | | | | |--4.46%--row_merge_tuple_sort
  | | | | | | | | | | | | | |
  | | | | | | | | | | | | | --3.77%--row_merge_tuple_sort
  | | | | | | | | | | | | | |
  | | | | | | | | | | | | | |--2.72%--row_merge_tuple_sort
  | | | | | | | | | | | | | | |
  | | | | | | | | | | | | | | --1.73%--row_merge_tuple_sort
  | | | | | | | | | | | | | | |
  | | | | | | | | | | | | | | |--0.87%--row_merge_tuple_sort
  | | | | | | | | | | | | | | |
  | | | | | | | | | | | | | | --0.62%--row_merge_tuple_cmp
  | | | | | | | | | | | | | |
  | | | | | | | | | | | | | --0.56%--row_merge_tuple_cmp
  | | | | | | | | | | | | |
  | | | | | | | | | | | | --0.74%--row_merge_tuple_cmp
  | | | | | | | | | | | |
  | | | | | | | | | | | --1.11%--row_merge_tuple_cmp
  | | | | | | | | | | | |
  | | | | | | | | | | | --0.74%--cmp_data_data
  | | | | | | | | | | |
  | | | | | | | | | | --1.05%--row_merge_tuple_cmp
  | | | | | | | | | | |
  | | | | | | | | | | --0.56%--cmp_data_data
  | | | | | | | | | |
  | | | | | | | | | --0.99%--row_merge_tuple_cmp
  | | | | | | | | | |
  | | | | | | | | | --0.62%--cmp_data_data
  | | | | | | | | |
  | | | | | | | | --0.93%--row_merge_tuple_cmp
  | | | | | | | |
  | | | | | | | --0.99%--row_merge_tuple_cmp
  | | | | | | |
  | | | | | | --1.42%--row_merge_tuple_cmp
  | | | | | | |
  | | | | | | --0.56%--cmp_data_data
  | | | | | |
  | | | | | --1.73%--row_merge_tuple_cmp
  | | | | |
  | | | | --3.28%--row_merge_tuple_cmp
  | | | | |
  | | | | --0.80%--cmp_data_data
  | | | |
  | | | --4.83%--row_merge_tuple_cmp
  | | | |
  | | | --0.80%--cmp_data_data
  | | |
  | | --5.75%--row_merge_tuple_cmp
  | | |
  | | --0.62%--cmp_data_data
  | |
  | --6.13%--row_merge_tuple_cmp
  | |
  | --0.56%--cmp_data_data
  |
  |--34.96%--buf_page_get_gen
  | |
  | --34.90%--Buf_fetch::single_page
  | |
  | |--29.08%--buf_read_ahead_linear
  | | |
  | | --28.96%--buf_read_page_low
  | | |
  | | |--27.04%--fil_io
  | | | |
  | | | --26.92%--Fil_shard::do_io
  | | | |
  | | | --26.30%--os_aio_func
  | | | |
  | | | |--25.62%--io_submit
  | | | | |
  | | | | --25.56%--system_call_fastpath
  | | | | |
  | | | | --25.50%--sys_io_submit
  | | | | |
  | | | | --25.37%--do_io_submit
  | | | | |
  | | | | |--23.02%--blk_finish_plug
  | | | | | |
  | | | | | --22.96%--blk_flush_plug_list
  | | | | | |
  | | | | | --22.83%--blk_mq_flush_plug_list
  | | | | | blk_mq_sched_insert_requests
  | | | | | |
  | | | | | --22.77%--blk_mq_run_hw_queue
  | | | | | |
  | | | | | --22.71%--__blk_mq_delay_run_hw_queue
  | | | | | __blk_mq_run_hw_queue
  | | | | | |
  | | | | | --22.65%--blk_mq_sched_dispatch_requests
  | | | | | blk_mq_do_dispatch_sched
  | | | | | |
  | | | | | --22.59%--blk_mq_dispatch_rq_list
  | | | | | |
  | | | | | --22.46%--virtio_queue_rq
  | | | | | |
  | | | | | --21.97%--virtqueue_notify
  | | | | | |
  | | | | | |--16.77%--iowrite16
  | | | | | |
  | | | | | --5.14%--ret_from_intr
  | | | | | __irqentry_text_start
  | | | | | irq_exit
  | | | | | do_softirq
  | | | | | call_softirq
  | | | | | __do_softirq
  | | | | |
  | | | | --1.92%--ext4_file_read
  | | | | generic_file_aio_read
  | | | | |
  | | | | --1.67%--ext4_direct_IO
  | | | | ext4_ind_direct_IO
  | | | | __blockdev_direct_IO
  | | | | |
  | | | | --1.61%--do_blockdev_direct_IO
  | | | | |
  | | | | --0.62%--submit_bio
  | | | | generic_make_request
  | | | | |
  | | | | --0.56%--blk_mq_make_request
  | | | |
  | | | --0.56%--AIO::reserve_slot
  | | |
  | | --1.79%--buf_page_init_for_read
  | | |
  | | --1.49%--buf_LRU_get_free_block
  | | |
  | | --1.18%--buf_LRU_scan_and_free_block
  | | |
  | | --0.99%--buf_LRU_free_page
  | |
  | |--3.28%--0x7ff1f636be5d
  | | |
  | | --2.97%--system_call_fastpath
  | | |
  | | --2.78%--sys_nanosleep
  | | |
  | | --2.35%--hrtimer_nanosleep
  | | |
  | | --2.17%--do_nanosleep
  | | |
  | | |--1.30%--schedule
  | | | |
  | | | --1.24%--__schedule
  | | | |
  | | | --0.99%--finish_task_switch
  | | |
  | | --0.62%--hrtimer_start_range_ns
  | | |
  | | --0.56%--_raw_spin_unlock_irqrestore
  | |
  | |--0.93%--__libc_nanosleep
  | |
  | --0.68%--buf_wait_for_read
  |
  |--8.66%--row_merge_buf_write
  | |
  | --7.67%--rec_get_converted_size_temp
  |
  |--2.54%--row_build_low
  |
  |--2.48%--row_merge_buf_add
  |
  |--2.23%--rec_get_offsets_func
  | |
  | --1.61%--rec_init_offsets
  |
  |--1.30%--dict_table_copy_types
  |
  --0.68%--__memset_sse2
  三、火焰图
  如何生成火焰图呢?这里介绍一个工具,叫做FlameGraphgit clone https://github.com/brendangregg/FlameGraph
  里面其实就是一堆perl脚本
  用perf script工具对perf.data(第二步使用perf record采集到的数据)进行解析perf script -i perf.data &> perf.unfold
  将perf.unfold中的符号进行折叠:./stackcollapse-perf.pl perf.unfold &> perf.folded
  最后生成svg图:./flamegraph.pl perf.folded > perf.svg
  如下所示:
  总结:
  到这里主要的技巧已经介绍完了,具体深入的用法也还是需要读者们深入研究的,我这里只是给出了简单的用法
  掌握了这些技巧以后,相信对以后的性能问题诊断会有巨大的帮助,但是手工处理可能还是比较麻烦的,大家可以考虑集成到自动化中使用起来更加方便
  另外需要注意的是线上千万不要随便使用perf,可能会造成性能下降,慎用!
  参考文档:
  http://www.brendangregg.com/perf.html
  https://www.ibm.com/developerworks/cn/linux/l-cn-perf1/
  https://www.ibm.com/developerworks/cn/linux/l-cn-perf2/

新手爸妈看过来01岁宝宝这样做早教,省钱省心又实用文卿晨原创作品,版权归本人所有,转载请联系早期教育要从婴儿开始早期教育与天才早教是现在父母越来越纠结的问题,很多父母认为1岁内的宝宝不会走路不会说话就什么都不会,天天抱着他。在孩子亲生爸爸拒绝配合补办6岁女儿出生证孩子出生后,要重视这4个证看到这样一个事情在福建福州,一名6岁女孩因为出生证明遗失,无法上学。妈妈希望爸爸配合补办,爸爸的妈妈却说先退我儿子15万彩礼!原来这名女孩的父母并没有办理结婚证,只是办了婚宴,男方开放二胎后生育率依然下降用阿德勒人生三大任务分析原因文卿晨原创作品,版权归本人所有,转载请联系妈妈对于孩子是怎样的存在?你1岁时,她喂你吃奶并给你洗澡,你的报答是整夜的哭着你3岁时,她费尽了心思为你做菜你的报答是把菜扔在地上你4岁时添加辅食不是一直吃米糊,适时改变辅食,助宝宝更强的咀嚼能力文卿晨图网络如有侵权,联系删除前几天去参加一个宝宝的生日宴,同桌有一个3岁左右的男孩,吃饭的时候,他的奶奶一直拿着剪刀,帮他把所有的食物剪成碎状。我看着身边1岁多的儿子正在拿着馒头外国女人不坐月子,就你矫情还事儿多?坐月子到底是干嘛?文卿晨图网络原创作品产后调理院有一句话说得特别好妈妈不是神,妈妈也是人。只有妈妈幸福,孩子才会幸福。生完孩子后,女性要经历的必是坐月子。但很多人认为外国人不用坐月子,就咱们中国女人全职妈妈写给孩子他爹的表扬信你是个好爸爸!余生,请继续文卿晨原创作品孩子的成长,离不开父亲的陪伴一个家庭的幸福,更需要父亲的投入。最近看到这样一个故事如果想要验证一个孩子和他父亲的关系如何,可以让爸爸悄悄的学校门口等孩子放学,孩子看到三成初中生不会系鞋带找对动画片,轻松教育,4步学会系鞋带文卿晨,图网络系鞋带是我们生活中最常见的一件小事。然而看到一个新闻却让人很惊呆,原来有很多初中生甚至30多岁的孩子都不会系鞋带。根据一项调查统计,仅有5。1的孩子到了初中还不会系鞋辅食是为了让宝宝吃饱?新手爸妈要明白为什么给宝宝添加辅食文卿晨图网络原创朋友小丽由于自己奶水一直很好,怕添加辅食后反而导致宝宝营养不够,就迟迟未添加辅食。等到8个月时她发现孩子好像总是吃不饱,才考虑给孩子添加辅食,目的就是为了让孩子多吃儿子落水,58岁吴镇宇心疼落泪别让你的指责,阻碍孩子的求助文卿晨原创作品小孩宁愿被仙人掌刺伤,也不愿听见大人对他的冷嘲热讽几米看到这样一个新闻常州一个6岁的小女孩在父亲所在的工地上玩耍,当他们父女两准备收工时,女孩不小心触发了射钉枪,导致建立真正良好的人际关系,始于对自己的彻底接纳很多时候,我们总是习惯性批判,却未曾觉察过背后的伤痛。在所有的关系中,放下你的批判,学会彻底地接纳,允许自己不够完美。除非改善与自己的关系,才可能与别人建立起真正良好的关系。除非对海灵格现代伴侣关系中一个很大的问题是01hr当一个妈妈的宝贝儿子与一个爸爸的宝贝女儿结婚时,这位先生,只是想要以爱人的形式,寻找母亲的替代品而妻子,只是想要以爱人的形式,寻找父亲的替代品。然而,只有父亲的儿子和母亲的
夏天,抓住孩子长高的黄金期,多给孩子吃这4种菜,不吃亏立夏过后,正是孩子长高的黄金期,妈妈们一定要抓住这个时间段,多给孩子们吃一些优质蛋白,含钙高的食物,增强免疫力,益智长得快。如今的疫情一直断断续续,在不清0的情况下,只能把孩子困在小孩子睡觉张嘴呼吸会变丑?一贴阻止不仅没用还有窒息风险现代快报讯(记者马壮壮)小孩子睡觉时张嘴呼吸会变丑?网络上流行的这种说法让不少家长焦虑不已。不过,在社交平台上,有博主对此已有对策。不少家长被种草口呼吸矫正贴,在睡觉时,用矫正贴简护眼灯怎么选?以下5个坑还请绕道各大媒体关于我国儿童青少年近视率居高不下的报道屡见不鲜,为了保护孩子的眼睛,很多家长都会把护眼灯作为书桌上的优先考虑。但是,市面上各大品牌的护眼灯琳琅满目,而且还有不少被央视曝光,康熙家训不想养逆子,就一定要让他吃这五种苦!可怜天下父母心。没有不爱子女的父母。但是一味溺爱,只能把孩子推向深渊。古人说爱其子而不教,犹为不爱也教而不以善,犹为不教也。有些磨难一定要让孩子承受,再爱孩子,也要舍得给孩子吃这五曝光!网红防晒霜致多个孩子皮肤灼伤,这种成分别选小满一过,骄阳似火的日子终于还是到来了,除了热,就是晒!又到了和紫外线作战的日子。太阳一毒起来,姐妹们就得开始忙活上孩子的防晒用品。硬防晒自然是没得说的,软防晒的学问可就多了。不知最适合孩子吃的食物排行榜,鸡翅倒数第1,牛肉只排第3,建议了解孩子正处于不断生长发育的阶段,对营养素的需要量较大,科学选择孩子的食物十分重要。对于正在生长发育时期的孩子来说,没有及时摄入身体所需的营养物质,抵抗力差,也会影响长个,还会影响学习爸爸,请你蹲下来爱我大家好,我是柳叶刀不唠叨,点击右上角关注,每天跟跟你们一起舞文弄墨,分享人间喜乐。小女孩嫌弃雾化声音太吵,暖心爸爸一个妙招解决!今日,一位爸爸因为凌晨给孩子做雾化而走红网络。原因是帮助妈妈走出育儿困境,她们这样做母亲节已经过去,但是母婴群体却从未远离过公众视野,尤其是近两年,大家关注和讨论的不仅仅是如何更好地养育孩子,也包括如何更好地理解年轻的妈妈们,应该为她们提供怎样的支持体系。去年10听了小雪月子里的遭遇我很无语同事小雪生孩子前高兴地和我们说,她的月子婆婆和妈妈都要来照顾她,听到有两个妈来照顾她坐月子,同事都很替她开心,可是等休完产假的小雪告诉了我们她月子期间的经历,却让我们觉得震惊不已!2009年湖北夫妻生连体怪婴,两人共用一个肛门,邻居都劝再生一个文黛月白编辑黛月白手术台上,医生看到从产妇子宫里拿出的婴儿禁不住颤抖了一下,险些把手中的钳子掉在地上,旁边几位医护人员也都不约而同露出惊愕的表情。只见两个婴儿肚脐以下完全地连在一起辅食这道菜外皮酥脆,馅料Q弹,是一款实打实的补钙硬菜今天给姐妹们分享一道最近我大爱的宝藏食谱!无论是家里的大人还是宝宝都赞不绝口呢,酥脆的外皮搭配里面弹牙爽脆的鲜虾肉,每一口还能吃到热乎乎的芝士拉丝,别提有多爽了。这也是一道实打实的