Albert's Blog

宁静致远

使用linux page owner看黑洞内存

使用linux page owner看黑洞内存

使用linux page owner看黑洞内存 前言 ​ 在前面的文章中《linux内存管理浅析》中,我们提到了“黑洞内存”,也就是这些内存在内核中是以页为单位被申请走的,并且在内核中无法通过/proc或者/sys文件系统查看这部分内存被谁申请走了。通常情况下是设备驱动或者内核模块调用kmalloc申请了大于8K(slab是4M,这里是以slub为例子)的连续物理内存,或者调用alloc...

一次硬件故障导致的kernel-panic排查

一次硬件故障导致的kernel-panic排查

一次硬件故障导致的kernel-panic排查 前言 ​ 最近遇到一个由于硬件故障导致的kernel panic, 把过程记录下来,方便后续整理思路,逐渐完成自己的知识库。之前记录这些太少了,导致很多之前的经验后面又需要重头分析一遍,很花费时间。 分析过程 ​ 第一步收集内核的coredump以及带符号表的vmlinux二进制文件,关于如何打开内核coredump以及获取对应的vml...

Linux kprobe工具深度使用

Linux kprobe工具深度使用

Linux kprobe工具深度使用 一、前言 ​ 在Linux上调试进程还是IO问题、网络问题,很多时候我们想要知道内核里面到底在做什么事情,如何将问题现象和内核行为匹配上来,从而进一步分析问题。 很多时候一些老的linux系统上面并没有systemtap、更不用说是ebpf这类工具了。之前也时常用kprobe做一些简单工作,由于最近遇到没有前面讲的那些高级工具的系统比较多,所以我准备...

Tcp核心概念以及拥塞控制

tcp 拥塞控制窗口通过wireshark中进行分析: https://blog.csdn.net/dog250/article/details/53227203?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-9&spm=1001.2101.3001.4242 从CUBIC到B...

tcp调试之ss工具介绍

tcp调试之ss工具介绍

tcp调试之ss工具介绍 前言 ​ 这篇文章的内容没有太多的新意,只是我首次使用他的时候,被他的功能给惊艳到了,他可以查看tcp套接字的定时器,套接字状态,发送接收窗口, MSS等即使我们在没有抓到包的情况下,也能快速的去依靠他分析一些线上问题。所以把他的man page搬到我的博客,自己翻文章的时候看一下。如下图,它提供的东西太多了,具体使用方式,以及参数含义,请查看man page...

Linux如何定位函数热点函数调用栈

Linux如何定位函数热点函数调用栈

Linux如何定位函数热点函数调用栈 一、前言 ​ 最近再看一个问题,发现系统中的某一个进程CPU占用很高,达到百分之100的CPU占用,这个时候需要找到该进程的热点函数以及调用栈(由于涉及到公司的保密以及安全问题,所以我自己构造了一个程序来实战调试,以便于理解),从而去排查代码。我使用如下代码进行调试。这个程序是一个死循环程序,运行起来后,你会发现CPU的占用会达到百分之100。 #...

Linux可执行文件elf分析

Linux可执行文件elf分析

Linux可执行文件elf分析 ​ 在嵌入式项目中,我们经常遇到应用程序的空指针异常、野指针、以及各种各样的段错误,在嵌入式系统中往往需要收集到coredump信息,然后再用交叉编译工具gdb等工具一步一步debug。 这种方式有时候是十分低效的,并不是每个工程师都能够十分熟练的使用gdb工具,排查问题往往需要数小时乃至数天。而且BUG并不一定可以很好的复现,我们当然想第一时间能够拿到出...

使用QEMU搭建OpenWrt开发环境

使用QEMU搭建OpenWrt开发环境

使用QEMU搭建OpenWrt开发环境 前言 ​ 作为一名玩OpenWrt系统多年的老菜鸟,如果想要在OpenWrt上实现某些功能,或者验证一些想法,以及学习OpenWrt一些原理,可以在网上去购买二手硬件,拆机、焊串口以及刷机来达到这一目的。但是这种方式比较繁琐,我一直在想有没有一种方法,可以快速的达到这一目的呢。近年来虚拟技术发展很快,是否可以通过虚拟化技术来简化这一过程呢,答案...

几种网络丢包定位方法

几种网络丢包定位方法

几种网络丢包定位方法 前言 ​ 在日常的网络开发,或者是研发中,我们总是会遇到网络丢包这一类问题。丢包问题发生的地方很多,掌握一些必要的丢包检查工具十分重要,这样可以协助我们排查网络问题,进而尽快的恢复业务。 PERF和DROPWATCH定位 ​ 请参考陈莉君老师的linux内核之旅的相关博客,我这里就不自己再搬运了。直接贴上链接:LINUX内核网络丢包监控,linux内核之旅里面还...

ARM 32位栈帧浅析

ARM栈帧浅析

ARM 32位栈帧浅析 前言 ​ 为了在实际的开发项目过程中,在应用层发生段错误的时候,能够像内核kernel panic一样打印出错时候的栈回溯信息,我们首先应该对各类体系架构的栈帧相关知识进行研究。这样为后续实现在内核中打印应用层栈回溯功能打下一个基础。关于什么是堆栈,请参考堆栈原理揭秘。关于ARM 过程调用标准,请参考Procedure Call Standard for the...

linux虚拟文件系统浅析

linux虚拟文件系统浅析

Linux虚拟文件系统浅析 ​ 本文为原创作品,如需转发,请注明原文出处。既然是虚拟文件系统浅析,那么对于十分细节的内容,本文就不再阐述。实际上整个虚拟文件系统,就算是用一本书来讲也不够。本文的目的是和大家一起探讨Linux整个虚拟文件系统的框架,后续可以根据兴趣深入内核源码阅读。本文大量原理基于linux内核版本2.6.11.最后一部分,我会逐步研究最新内核的改动与实现,同样是以pat...

Linux内存模型

Linux内存模型

Linux内存模型 一、前言 ​ 在阅读linux内核内存源代码的时候,常常有些代码看起来很费解,在阅读代码之前有必要先了解下linux中的内存模型,这有助于我们理解linux内核的内存管理。本文转载自www.wowotech.net, 作者郭建,是国内linux方面的专家以及爱好者,可以说他的很多文章对我影响颇深。废话不多说,一起开始阅读这篇文章吧。 ​ 在linux内核中支持3中内...

Linux内存回收之(二)--逆向映射

Linux内存回收之(二)--逆向映射

Linux内存回收之(二)–逆向映射 ​ 内存回收流程中,在回收页框的时候,时常会通过逆向映射技术来解除与页框关联的页表项之间的关系,这里就会用到逆向映射技术。本来想自己写的,但是在Linux阅码场中看到郭大侠的文章后,决定收藏过来。原文地址 ​ 本文中部分图片在原文的基础上添加,并对原文的格式进行了进一步处理,主要是为了让自己更好的理解 ​ 另外这篇文章...

Linux内存回收之(一)---交换分区

Linux内存回收之(一)---交换分区

Linux内存回收之(一)—交换分区 一、前言 ​ 研究Linux swap机制,对于研究内存回收机制十分重要。我们首先研究Linux 2.6.11版本的实现,之所以选择2.6.11版本,是因为大名鼎鼎的《深入理解Linux内核》就是以该内核版本为基础讲解的(本文针对2.6.11版本的大部分说明都是参考该书的17章-回收页框),然后通过Linux后续的针对swap 的patch来研究整...

Linux丢包故障的解决与思路

Linux丢包故障的解决与思路

Linux丢包故障的解决与思路 前言 ​ 本文为大部分内容是转载:原文地址,和之前一样,在原文的基础上进行了一些格式的调整,包括一些错别字的修正,以及进行了一些博文链接的插入,以便于读者或者我自己更好的理解。 ​ 我们使用Linux作为服务器操作系统时,为了达到高并发处理能力,充分利用机器性能,经常会进行一些内核参数的调整优化,但不合理的调整常常也会引起意想不到的其他问题,本文就一...

ebpf知识大纲

ebpf知识大纲

ebpf知识大纲 无意中在网络上看到这篇ebpf的学习大纲,正好最近有了解到这项技术,目前linux内核中比较火的技术,这里先收藏下来,后续慢慢研究 ebpf知识大纲

Linux踩内存检测思路与方法

Linux踩内存检测思路与方法

Linux踩内存检测思路与方法 前言 ​ 踩内存是一个非常麻烦的问题,不管是在应用层或是内核层,关于踩内存的检测也有各种各样的工具,比如应用层的优秀开源valgrind,内核内置的kmemcheck等。关于这些工具的具体信息就不在这里做进一步描述了,本文主要简单介绍一下两种踩内存工具的工作原理。 一、通用做法 ​ 一种最为简单的踩内存工具为通过给分配的内存前后多加上一小块内...

Multipath TCP

Multipath TCP

Multi path TCP Decoupled from IP, TCP is at last able to support multihomed hosts. 原文地址 Christoph Paasch and Olivier Bonaventure, UCL The Internet relies heavily on two protocols. In the networ...