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

内存如何诊断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   一个实例分析

查尔斯三世和查理一世二世有关系吗?查理就是查尔斯,查尔斯就是查理,都是英语Charles,这有什么不同吗?首先讲一下英国国王的称号问题,一世二世乃至万世,这是中国皇帝的想法,希望自己的直系后代继承帝位(少数几次是皇国家航天局探月工程四期已立项未来还将建立国际月球科研站基本型据国家航天局的消息,我国探月工程有了新的进展。探月与航天工程中心主任刘继忠在接受总台记者采访时表示探月工程四期任务已获国家批复,目前进展顺利。探月工程四期包括嫦娥六号嫦娥七号和嫦娥中国的可重复使用航天器会是啥样中国设计建造空间站时,关于载人工具,当时据说共有五种方案大型空中平台起飞的中型空天飞机侧挂式火箭动力航天飞机顶托式中型与小型航天飞机,载人飞船。在初筛后,只留下载人与顶托式小型航天92年总决公牛遇上开拓者,乔丹场均3656卫冕,滑翔机什么数据?乔丹在新秀赛季就展现了自己无与伦比的天赋,场均得到28。2分6。3篮板5。9助攻2。4抢断,进入了NBA的最佳二阵,在个人职业生涯第3个赛季,其实乔丹就已经开始成为联盟的门面了。不2010年豪掷4。5亿买下勇士,12年时间过去,勇士老板赚了多少钱?连续两个赛季无缘季后赛之后,勇士在上个赛季强势反弹,不仅重新杀回季后赛,还一口气拿到了总冠军。勇士之所以能够如此快速的完成反弹,除去核心球员伤病恢复之外,也与球队管理层出色的运营能平筐暴扣单挑库里!湖人650万新援抢戏两大球星,快攻真犀利8月30日,湖人新援朗尼沃克在猛龙助教RicoHines的训练营大放异彩。沃克和库里特雷杨等球员一起打比赛,身高1米96的沃克展现了自己的速度和力量。他的进攻非常犀利,抢走了库里和游三孔,知天下解锁历史典故之孔庙篇孔庙,又被称为至圣庙,是我国历代王朝祭祀思想家政治家教育家孔子的庙宇,规模宏大气势雄伟壮丽金碧辉煌,极具东方特色,被誉为天下第一庙。1994年,孔庙孔府孔林一起被列入世界文化遗产名饭店的凉拌豆腐皮为啥好吃,告诉你不外传的秘密,学会你也是大厨生活没有彩排,美食没有美颜。大家好,今天用豆腐皮给大家分享一道美食。豆腐皮,我们生活里面非常常见的一种食材,很多时候我们用来凉拌,涮锅,做成好吃的冒菜,吃起来都是非常好吃的。今天我刺客信条幻景CG预告公布街头小贼蜕变刺客在最近经历一系列泄露与情报公布之后,育碧终于正式公布了刺客信条幻景的预告片。这段预告片展示的是CG画面,并没有任何实机内容。本作将回归系列初心,不再延续近年来RPG风格的设计方向,汉惠帝刘盈汉惠帝名叫刘盈,是汉朝开国皇帝刘邦与吕后之子,西汉王朝的第二位皇帝。他继续推行了黄老哲学,促进了汉代思想文化的发展。不过他生性善良却又懦弱,一生都活在母亲吕太后的淫威之下,没有做出什么都想要的一加AcePro,最后究竟要到了什么?拿到一加AcePro也有段时间了,眼看就要到了分开的日子,是时候好好聊聊了!其实在拿到产品前,通过一加AcePro的邀请函,就已经大致了解了这是一款怎样的产品。简单来说,一加Ace
最新!西安邮电大学取得重要科研突破,成果已在线发表近日,复旦大学余建军教授团队与北京邮电大学余建国教授及西安邮电大学自动化学院赵峰教授合作,首次成功在光载无线通信系统中实现4。6km无线距离的亚太赫兹W波段毫米波信号高速传输实验演埃里克戈登想赢球ampampamp想延续胜势防守都必须是第一位的直播吧12月9日讯火箭今日客场109118不敌马刺,未能延续胜利势头。赛后,火箭后卫埃里克戈登接受采访时强调,想要赢得比赛,就必须从防守端做起。一旦我们明白,如果你想赢得比赛或者保四强首战打响!克罗地亚能否再现黑马奇迹?今天,先行开打两场四分之一决赛,分别是北京时间晚上23点,克罗地亚VS巴西,明天凌晨3点,荷兰VS阿根廷。北京时间12月9日2300,卡塔尔世界杯第一场14决赛克罗地亚VS巴西战鼓艺人也追世界杯,有人眼瞎有人神算有人撞脸卡达尔世界杯足球赛踢完16强赛,产生的八强将从新加坡时间9日晚上11时起再决高低,把赛事带上高潮。过去一周,不少亚洲艺人也追看世界杯,而且和足球赛擦撞出不少娱乐的火花。小编带你去看NBA篮球巨星詹姆斯哈登只是好色之徒?成功没有偶然北京时间3月11日,费城76人球星丹尼格林在节目中透露了一些关于76人更衣室的故事,并且谈到了哈登。丹尼格林格林说哈登非常具有职业素养,他和一些超级巨星不同,你甚至曾经可能一直听到本次克罗地亚VS巴西,内少能否再次领导桑巴军团起舞?主队克罗地亚作为上届世界杯的亚军,其坚毅品质被大家所熟知,虽然随着球队人员的老化,球队整体实力有所下滑,但顽强的精神仍在,上一轮面对日本又是在点球大战中才结束战斗。从本届世界杯的表阿根廷战术演练遭泄露巴西队只要能进球,跳舞不会停澎湃新闻记者蒲垚磊北京时间12月9日晚,世界杯四分之一决赛就要拉开大幕,率先上演的是巴西VS克罗地亚阿根廷VS荷兰两场交锋。对于阿根廷来说,赛前遭遇了一定的困扰德保罗和迪马利亚两名点评八场18决赛还有8场比赛,这届世界杯就结束喽。世界杯进入淘汰赛后,赛程进一步加快,比赛是看一场少一场。随着8场八分之一决赛的结束,本届世界杯的八强已全部产生,分别是A组荷兰队,B组英格兰队,C8年后再战荷兰,阿根廷队不希望踢点球休战两天的世界杯今夜回归。北京时间今夜23时,巴西与克罗地亚的世界杯14决赛率先开战,两队将为一个四强席位展开争夺。北京时间12月10日凌晨3时,阿根廷将在卢赛尔体育场迎来与荷兰的世界足球日球星为何青睐于干细胞治疗?近日在卡塔尔举办的世界杯赛事正如火如荼,而12月9日也我们也迎来了第44个世界足球日(WorldFootballDay)。实际上足球的前身蹴鞠已经在神州大地上流传了两千余年,在战国风口上的TCL20多年前,TCL王牌彩电的广告风靡大江南北。以此为开端,TCL的家电巨头养成之路正式开启。时至今日,TCL早已不仅仅是家电巨头,它还是面板巨头半导体巨头。于是,在双碳背景下催生的