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

内存如何诊断SLUB问题

  我们介绍了在RHEL6及较早的kernel上诊断slab泄漏问题的两种方法,可以说相当麻烦了,这是因为以前的slab没有提供原生的故障诊断机制。Linux kernel自2.6.23之后采用的Slub自带了故障诊断机制,就方便很多,然而习惯上仍然把slub称作slab。如何判断你的系统kernel是否在用slub呢?仅从kernel版本号是看不准的,比如RHEL6的kernel版本2.6.x仍然在使用slab,从RHEL7才开始采用Slub。有一个简单的判断方法,就是看是否存在/sys/kernel/slab目录,有就是slub,没有就是slab。 Slub的debug机制
  了解slub的debug机制之前,先要弄清楚可能会出现哪些问题,无论是slab还是slub,问题无非是以下几类: 内存泄露(leak),alloc之后忘了free,导致内存占用不断增长; 越界(overrun),访问了alloc分配的区域之外的内存,覆盖了不属于自己的数据; 使用已经释放的内存(use after free),正常情况下,已经被free释放的内存是不应该再被读写的,否则就意味着程序有bug; 使用未经初始化的数据(use uninitialised bytes),缺省模式下alloc分配的内存是不被初始化的,内存值是随机的,直接使用的话后果可能是灾难性的。
  Slub提供了red zone和poisoning等debug机制来检测以上问题。 Red zone来自于橄榄球术语,是指球场底线附近的区域,slub通过在每一个对象后面额外添加一块red zone区域来帮助检测越界(overrun)问题,在red zone里填充了特征字符,如果代码访问到了red zone就意味着越界了。 Poisoning是通过往slub对象中填充特征字符的方式来检测use-after-free、use-uninitialised等问题,比如在分配slub对象时填充0x5a,在释放时填充0x6b,然后debug代码检查时如果看到本该是0x6b的位置变成了别的内容,就可能是发生了use-after-free,而本该是0x5a的位置如果变成了其它内容就意味着可能是use-uninitialised问题。更多的poison字节定义参见以下文件:
  /lib/modules/$(uname -r)/build/include/linux/poison.h
  (图)SLUB对象的格式
  * 绿色的 Payload表示分配出去的 slub object;
  * slub debug机制需要占用额外的内存,比如 Red zone,还有,为了追溯 slub object的分配和释放过程,需要额外的空间来存放 stack trace,即图中的 Tracking/Debugging;
  * 图中的 FP是 Free Pointer的缩写,处于 free状态的 object是以链表的形式串在一起的,FP就是链表指针。 怎样开启slub debug
  Slub本身包含了完整的debug功能,缺省是关闭的,需要的时候打开就行了。
  开启slub debug有两种方式: 【启动时开启】
  在kernel command line中加入以下参数:
  slub_debug=,
  它会在重启时生效。
  注:
  slub_debug后面不跟任何参数表示打开所有的debug功能;
  slub_debug= 对所有的slab打开指定的debug options;
  slub_debug=, 对指定的slab打开指定的debug options;
  slub_debug=, 对指定的slab打开所有的debug options。 【运行中开启】
  在运行系统上可以通过以下文件对指定的slab打开指定的debug option:
  /sys/kernel/slab//
  Debug options如下:
  debug option
  sysfs debug file
  功能
  F
  sanity_checks
  激活完整性检查功能,在特定的环节比如free的时候增加各种条件判断,验证数据是否完好。
  Z
  red_zone
  用于检测overrun。通过在slub object后面插入一块额外的红色区域(橄榄球术语),一旦进入就表示有错。
  P
  poison
  用于检测use-after-free和use-uninitialised。给slub对象填充特征字符,比如在分配时填充0x5a,在释放时填充0x6b,根据特征字符是否被覆盖来检测是否出错。更多的poison字节定义参见: /lib/modules/$(uname -r)/build/include/linux/poison.h
  U
  store_user
  在slub object后面添加一块额外的空间,记录调用alloc/free的stack trace
  T
  trace
  在slub object alloc/free时,向系统日志中输出相关信息,包括stack trace
  开启debug option会降低系统性能,所以尽量只开启必要的选项。 如果slab出现data corruption问题,可以考虑read_zone,poison,store_user,sanity_checks; 如果某个slab的大小持续疯涨,则可能是leak(内存泄露),可以开启trace,观察统计slab的alloc/free情况,寻找线索。
  对于内核内存泄漏问题,还有另一个工具可供选用,详见:用KMEMLEAK检测内核内存泄漏
  在kernel commandline中开启slub debug与在运行系统上开启是有区别的。有些debug option不能在运行系统上开启,比如red_zone、store_user需要额外的存储空间来保存debug信息,如果不是从一开始就开启,那么以前分配出去的slub对象就没有debug数据区,会导致对齐问题,而且debug代码也很难分辨新老slub对象;再比如poison,如果不是从一开始就开启,那么以前分配出去的slub对象就没有填充特征字符,debug代码也辨别不了哪些slub对象是有填充的、哪些是没有填充的。所以,在运行系统上开启slub debug,如果指定的slab里面已经有了object,那么只能动态开启sanity_checks和trace,惟有当指定的slab还是空的,其它的debug option才可以动态开启。我们实际使用的时候,尽管去试好了,如果某个debug option不允许动态开启,命令就不会成功,比如: 1
  2 # echo "1" > /sys/kernel/slab/task_struct/red_zone
  -bash: echo: write error: Device or resource busy
  要进行slub debug,有一个重要特性不可不知,那就是slab merging。 Slab merging
  很多slab的大小和参数是相似的,slub会把这些不同的slab合并到一起,好处是可以减少内存碎片,提高内存使用效率,这个称为slab merging(合并)。
  怎么知道一个slab有没有发生合并呢?通过查看以下文件:
  /sys/kernel/slab//aliases
  aliases表示参与合并的slab的数量(自己除外),如果大于0就意味着发生了合并。
  slabinfo工具(见下一节的介绍)可以具体列出哪些slab合并到了一起: 1
  2
  3
  4
  5
  6
  7
  8 # slabinfo -a   :t-0000024 <- xfs_bmap_free_item fstrm_item scsi_data_buffer avtab_node fsnotify_event_holder   :t-0000032 <- pte_list_desc xfs_log_item_desc dnotify_struct kmalloc-32 sd_ext_cdb xfs_mru_cache_elem inotify_event_private_data fanotify_response_event   :t-0000040 <- khugepaged_mm_slot Acpi-Namespace dm_io   :t-0000048 <- nsproxy ftrace_event_field ip_fib_alias Acpi-Parse shared_policy_node ksm_stable_node ksm_mm_slot fasync_cache   :t-0000056 <- ip_fib_trie uhci_urb_priv   ...   Slab merging会干扰debug,因为不同的slab合并到了一起,出了问题以后很难分辨是哪一个slab导致的。关闭slab merging的方法有两个: 在kernel command line中加入"slub_nomerge"; 开启slub debug之后,slab merging就会自动关闭。如果slub_debug指定了某个slab,那么只有指定的slab会关闭merging。   注:最好是在启动时开启slub_debug,如果是在运行系统上通过sysfs开启slub debug,那么之前已经合并的那些slab仍然会保持合并状态。 slabinfo工具   随内核源程序提供了一个slabinfo工具,但是需要自己手工编译。源程序的位置是在源代码树下的 tools/vm/slabinfo.c,编译方法是:   $ gcc -o slabinfo tools/vm/slabinfo.c   或者进入 tools/vm 目录下直接执行make:   $ make slabinfo   slabinfo工具能做的事情见它的帮助信息: 1   2
  3
  4
  5
  6
  7
  8
  9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  21
  22
  23
  24
  25
  26
  27
  28
  29
  30
  31
  32 # slabinfo -h   slabinfo 4/15/2011. (c) 2007 sgi/(c) 2011 Linux Foundation.   slabinfo [-ahnpvtsz] [-d debugopts] [slab-regexp]   -a|--aliases Show aliases   -A|--activity Most active slabs first   -d|--debug= Set/Clear Debug options   -D|--display-active Switch line format to activity   -e|--empty Show empty slabs   -f|--first-alias Show first alias   -h|--help Show usage information   -i|--inverted Inverted list   -l|--slabs Show slabs   -n|--numa Show NUMA information   -o|--ops Show kmem_cache_ops   -s|--shrink Shrink slabs   -r|--report Detailed report on single slabs   -S|--Size Sort by size   -t|--tracking Show alloc/free information   -T|--Totals Show summary information   -v|--validate Validate slabs   -z|--zero Include empty slabs   -1|--1ref Single reference   Valid debug options (FZPUT may be combined)   a / A Switch on all debug options (=FZUP)   - Switch off all debug options   f / F Sanity Checks (SLAB_DEBUG_FREE)   z / Z Redzoning   p / P Poisoning   u / U Tracking   t / T Tracing   参考资料:   https://www.kernel.org/doc/Documentation/vm/slub.txt   https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-kernel-slab   https://lwn.net/Articles/340267/   https://gitlab.eurecom.fr/oai/odroid-linux-3.10.y-rt/commit/4c13dd3b48fcb6fbe44f241eb11a057ecd1cba75   一个实例分析

16岁参加工作,43年警涯,距退休剩一年的美女副局长为何主动投案此文不做任何道德评价,只是简单提一下人处在高位该如何洁身自好。就在本月的3号一位美女副局长主动投案的帖子占了热榜。说起来这位美女副局长大家可能有点印象,她就是13年前参与太子奶经济文旅局长要出圈更要出主意江武近日,身披祁剧大靠头戴帅魁,湖南省祁东县文化旅游广电体育局局长陈平原变装宋朝名将岳飞,以祁剧道白的形式诵读岳飞的满江红,在新媒体上推介岳飞留题大营驿题记之处祁东县双桥镇大云村,意大利传教士的书,揭开康熙荒诞的一面,他是否称得上千古一帝?说起康熙,很多人都会不由自主地想到电视剧康熙王朝。和剧中一样,康熙的一生可谓充满了传奇色彩,自8岁登基16岁打鳌拜6下江南平定三藩亲征准格尔。在位这61年间,他治国兴邦励精图治的功三八宏图展九州春意浓文樊纪华在这阳春三月,春意盎然,生机勃发的美好时节里。正值两会在京召开,我们迎来了一年一度的三八国际劳动妇女节。今年是国际的第113个国际妇女节,是我国第100个妇女节。三八国际劳聚焦瞭望刊文!昆明托管磨憨共建国际口岸城市省会城市昆明和边境口岸磨憨,相隔千里却由中老铁路一线相连。在共建国际口岸城市的目标下,昆明打破体制机制政策壁垒,全面托管磨憨,着力实现要素保障政策支撑和制度创新效益最大化资源向磨憨极不寻常这5年数读政府工作报告编者按成如容易却艰辛,过去的5年极不容易极不平凡。但平均每年5。2的GDP增长以及2左右的CPI增幅,不只昭示着中国经济发展抵御住了中美贸易战新冠疫情冲击以及俄乌冲突等重重叠加的重遵循十二经络时序作息投资健康说医不二读书笔记。感悟先说感悟,我把这一章浓缩成了一张图,新词诞生了一图了然,哈哈,还不收藏?笔记十二经络的值班表。23点到1点,子时胆经胆汁代谢,醒脑美容。胆经必须人睡着时才工作开春的第一件外套一起来chic一下现在很抱歉的通知您,您的衣橱要大换新啦羽绒服棉服大衣羊羔毛皮夹克毛衣等厚实的衣服拿去干洗风衣西服衬衫卫衣打底都往前挪挪准备好短裤短袖背心连衣裙在这个说冷不冷,说热不热的季节,一件适普京的特使来北京,只待了一天,俄方对中方,还是有点不放心俄罗斯总统普京的上合组织事务特别代表俄外交部巡回大使巴赫季耶尔哈基莫夫于3月2日至3月3日访问北京。在为期一天的访问期间,哈基莫夫重点提到上海合作组织成员国在国际舞台上并不总是统一活雷锋!今年是毛泽东等老一辈革命家为雷锋同志题词60周年长江日报通过图像AI算法在雷锋老照片的基础上采取特征提取融合图像重建等步骤修复了部分旧照雷锋活了看,照片中的他笑容灿烂他的笑容生动亲美国正放行中国光伏电池板?相关光伏企业这样回复当地时间3月6日,一名白宫官员表示,美国开始放行从中国进口的太阳能电池板,被困在美国海关边境或等待从海外运输的中国太阳能电池板已能够顺利在美清关。此前,美国海关和边境保护局在去年6
姚明亲自带队,男篮平均身高两米,年龄25岁,郭士强刘炜鼎力相助中国男篮公布了新一期集训名单,一共有18人,姚明将亲自带队,担任世预赛第六个窗口期的领队,郭士强刘炜鼎力相助,加盟了教练组,协助主帅乔尔杰维奇,本次大名单分为两类球员,一类是成名已清朝晚期,如没有慈禧太后垂帘听政,光绪帝能拯救清朝吗?发表本文章前,小编先申明,此文章只陈述小编自己的观点,欢迎各位友友一起探讨交流。首先先阐述下小编的个人观点小编认为,探讨这个问题,应该从清王朝闭关锁国导致的一系列影响说起,最终小编乔家大院那么富裕,为何日军当时不敢掠夺,看看乔家挂了什么如果您喜欢这篇作品,欢迎点击右上方关注。感谢您的鼓励与支持,希望能给您带来舒适的阅读体验。谈到乔家晋商我们都很熟悉,红极一时的富商,但是这么繁荣富裕的一个家族,为何在抗日战争期间,迈凯伦也出电动滑板车?4轮2轮的新生活方式说了很多年了,借着近年新能源风口,越来越多的汽车制造商开始积极推出电动两轮,也被看作是品牌构建自家出行生态圈的重要一环,其中不乏一些豪车品牌,像是布加迪宝马。现冬的味道(散文)冬的味道杨杰清天空阴沉沉的,还不到晚上,天色已经完全暗下来,提前步入夜的黑。从外面买了些东西回来。阴沉的天气,总是透着阴冷。身上的薄衣加外套已不足以御寒。特别是在这个时候。刚下车,年,就一个字为了生活与理想,我们奔赴远方但只要过年总会不远千里不辞辛苦地辗转回家是什么力量使我们年复一年地如此坚持?年,对我们而言究竟意味着什么?1hranimateanimateanimat面对看不起你的人怎么办?看不起是什么意思?什么是看不起?看不起就是不喜欢你,轻视你,把你看的很低,把你看的很渺小,觉得你没有任何优点,觉得你一无是处。那么,看不起你的人有什么样的表现?1,一个看不起你的人大年初二,愿你一生幸福安好头条创作挑战赛兔年,开开心心,兔年,幸福美满,大年初二,愿你一生幸福安好,愿你一生健康无忧,兔年送上一份祝福,愿你事事都会如意。带着希望,带着美好,带着心愿,带着幸福,大年初二,所又到过年了,你害怕吗?又是一年春节到,外出漂泊的游子借着长假奔赴回老家。不管对过年有没有感情,也不管愿不愿意过年的操劳,更不管喜不喜欢过年的氛围,回家过年都是一个必须的过程,是家人的期盼,是根源的思念。炸花生米怎么做才好吃?教你这样做,酥脆爽口,好吃又下饭,真香炸花生米怎么做才好吃?教你这样做,酥脆爽口,好吃又下饭,真香。油炸是花生米的众多做法中最为经典的一种,经过油炸的花生米,抓一把塞进嘴里,香酥脆,越嚼越香,让你吃一次便上瘾,家里时不1件红色单品基础款衣服,8套实用系搭配让红色不止是春节限定头条创作挑战赛过年穿点红的好心情和好运感,必须要延续到生活日常,这样才真的有新年新气象嘛。但工作生活中没法很夸张穿红色,就用一件红色系单品,搭配咱衣橱里的基础款,穿出实用还好看的红