自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(96)
  • 收藏
  • 关注

原创 Zram/Zswap/Zcache杂记

目的是用闲置的cpu周期来做ram中的压缩和解压缩。Zram主要是通过Swap框架,把zram压缩池模拟成swap分区。Key:交换分区的swp_entry_t,mkswapon时会每个swap分区都分配一个index,page_io时会申请空闲的swp_entry_t,同时存储在page结构体private中,方便后续缺页异常找到。Zswap主要是通过frontswap框架,把匿名页在进入swap分区之前hook了,转移到自定义的压缩池。和Zram最大的区别是一定要有额外的真实的物理swa

2021-08-15 10:27:15 1291

原创 堆管理器发展

ptmallocdlmalloctcmallocjemallocscudo

2021-05-26 20:42:15 212

原创 gdb命令杂记

AOSP/prebuilts/gdb/linux-x86/bin/gdbfile symbols/system/bin/netdcore-file core.Dns_101_10066.538set solib-absolute-prefix symbols/set directories AOSP/aarch64-linux-android-addr2line -iCf -e libnetd_resolv.so 000000000003f728https://vi...

2021-05-14 23:44:39 203

原创 scudo内存分配器杂记

Scudo Hardened Allocator — LLVM 12 documentationJeMalloc - 知乎 (zhihu.com)GitHub - llvm-mirror/compiler-rt: Project moved to: https://github.com/llvm/llvm-projectGitHub - AOSP-Common/android_external_scudoAndroid scudo功能介绍 - 简书 (jianshu.com)Androi

2021-05-12 23:30:15 851

原创 qemu调试命令备份

1. 普通执行:run_qemu_aarch64.shqemu-system-aarch64 -machine virt -cpu cortex-a53 -machine type=virt -nographic -m 8192 -smp 8 -kernel ~/linux-4.19.81/arch/arm64/boot/Image -initrd ./rootfs.cpio.gz --app...

2020-05-04 16:36:57 565

原创 vm_normal_page深入理解

其实这个函数的注释已经非常详细,细细品味分享自己的理解。对应的内核版本是4.14.129 ARM64./** vm_normal_page -- This function gets the "struct page" associated with a pte.** "Special" mappings do not wish to be associated with a "s...

2020-01-04 23:42:33 1605

原创 MPSOC ZCU102 petalinux环境搭建问题记录

最近在研究MPSOC,搭建参考:ug1144-petalinux-tools-reference-guide.pdf,个人用的Ubuntu18.10,虚拟机。1. Ubuntu下/bin/sh用的是dash,记得把使用sudo dpkg-reconfigure dash切换为bash.2. 第一次进入shell终端都要执行source ./settings.sh,设置petalinux的环...

2019-03-23 08:42:47 1093

原创 TREE RCU个人理解【待补充】

有待补充

2019-01-05 12:30:19 299 3

翻译 The design of preemptible read-copy-update【待翻译】

https://lwn.net/Articles/253651/待翻译 

2019-01-05 12:27:49 266

原创 基于kernel2.5.43对第一版经典RCU实现的思考

最近在研究RCU机制,想从RCU的历史源头开始深入理解(追溯根源会有意想不到的收获,至少可以从代码演进过程中领略大牛们的思想)。想到这里,网上也有很多和我一样想法的人士,特别感谢这篇文章:http://www.wowotech.net/kernel_synchronization/Linux-2-5-43-RCU.html上述文章讲解很详细,内容都覆盖全面。有兴趣的朋友可以直接阅读。...

2019-01-05 10:57:14 302 1

原创 printk一些优化想法——增加核号打印(有缺陷)

故障定位过程中发现多个核调用printk时,很难直观的看到每一行是哪个核打印的。因此想能不能在每行前增加核号打印"[x]",试了半天,在vprintk_emit里尝试增加this_cpu的字符串转换。效果是有的,但是有些缺陷。因为text的前两个字符时是给printk等级填充,所以有些缺陷。思考了一下,看来内核对printk可配置项不多,当前只有一个时间戳可配置。虽然可以通过pri...

2018-12-05 21:25:45 800

原创 内核小技巧——强制设置进程运行核 select_task_rq

故障定位过程中,业务进程没有做核绑定,导致每次都是通过负载均衡动态选择运行核,导致很多时候业务进程出现在核0上死循环(系统态),串口都没反应。由于是第三方负责启动,无法通过taskset命令指定核号启动。不过我们知道执行进程的ELF名字,因此想到是否可以通过内核强制设置进程运行核号。关键函数select_task_rq(),通过对比进程名字强制设置核号。/* * The cal...

2018-12-05 21:06:29 1050

原创 基于PPC64架构 Linux 内核信号处理过程栈处理分析

handle_rt_signal64主要负责信号处理栈处理分析,如下图所示int handle_rt_signal64(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs){ struct rt_sigframe __user *frame; unsigned long newsp = 0; unsigned lo...

2018-12-04 23:34:55 3040

原创 DPDK17.05 第一次试用心得与问题记录

最近由于优化性能需求,特意了解dpdk-17.05。在虚拟机上第一次安装试用,发现还是有很多坑哈。下载地址不说了,度娘一下吧。记录一下问题吧:1. 首先虚拟机要配置两个网卡以上,而且必须都是host-only模式。我配置了三个网卡,一个NAT模式,另外两个host-only。结果悲剧了,运行testpmd时发现有时候stop有数据包,很多时候都是0,重启后再试都是0。怀疑虚拟机网卡

2017-06-15 21:36:03 2232 4

原创 关闭L2 cache的方法

最近在powerpc b4860上测试,需要关闭L2 cache,发现系统启动过程怎么设置都不行,一旦设置系统就会启动异常。突然想起,有没有可能是U-Boot阶段L2 cache已经在使用,这时候再关闭已经来不及啦。因此,在UBoot阶段,先flush+无效L2 cache,再关闭L2 cahce。然后再启动系统,系统比正常时,多了两倍启动时间。呵呵,就到这吧

2017-04-23 16:34:46 2944

原创 make menuconfig关闭imx6q开发板的L1 cache/L2 cache

最近在做一些cache测试,需要关闭L1/L2 cache。ARM的内核关于cache的配置做得比较完善,可以通过menuconfig配置。System Type-》Disable I-Cache  //L1 I-cacheSystem Type-》Disable D-Cache //L1 D-cacheSystem Type-》Enable the L2x0 outer ca

2017-04-19 21:25:09 1937

原创 imx6q ARM cotex-A9 参考手册

最近在研究imx6q这款ARM的PMU,cache等,遇到了一些问题。也找到很多参考手册,特别是DDI0406C_C_arm_architecture_reference_manual.pdf这个详细介绍cotex-A9的体系架构。64位ARM芯片使用v8体系架构,参考文档:DEN0024A_v8_architecture_PG.pdf这些文档都可以在官网上注册下载。

2017-04-19 21:16:23 5158

原创 lmbench3 lat_mem_rd的测试结果记录

默认情况下,L1 cache/L2cache都打开:/ # lat_mem_rd 128M"stride=1280.00049 4.0190.00098 4.0190.00195 4.0190.00293 4.0190.00391 4.0190.00586 4.0190.00781 4.0190.00977 4.0190.01172 4.0190

2017-04-19 21:11:14 4774 2

原创 解决perf在imx6q上读写PMU event counter都是零

最近在用perf分析性能,在imx6q上验证PMU event采样,发现cache-misses等硬件事件计数都是0,瞬间崩溃。傻乎乎分析啦perf代码,感觉应该不是perf代码原因,到freescale官网上找到一片类似的问题:https://community.nxp.com/thread/302685http://stackoverflow.com/questions/22567

2017-04-19 21:00:37 2154 2

原创 lmbench3 完整移植

首先,下载一份源代码:http://www.bitmover.com/lmbench/get_lmbench.html然后解压。export PATH=$PATH:/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/修改scripts/os,sc

2017-04-19 20:44:58 2901

转载 perf 移植心得

从以下地址成功移植了perf,谢谢tony-liu。转载地址:http://www.cnblogs.com/helloworldtoyou/p/5585152.html更正了一些内容,主要是zlib编译交叉工具链zlib编译与安装./configure --prefix=$CROSS_COMPILE_DIR/libc/usr/vim Makefile 修改所有gcc/a

2017-04-09 18:57:12 2348

原创 iperf-2.0.5移植到IMX6DQRM的linux-3.0.35

首先导出交叉编译链的路径:export PATH=$PATH:/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/切换到iperf-2.0.5的主目录,执行:./configure --host=arm-none-linux-gnueabi  

2017-03-16 22:03:17 1298

原创 ARM 全局页表与二级页表转换调试

最近在看ARM的内存管理,刚好看到全局页表swapper_pg_dir,看了很久细想能否直接通过查看内存方式查看swapper_pg_dir的内存:幸好之前弄过/dev/mem,知道可以把物理内存映射出来。先贴工具代码:#include #include #include #include #include #include #include #includ

2016-08-19 20:33:03 2193

原创 alloc_node_mem_map的offset作用

看这个函数过程中看到pgdat->node_mem_map = map + offset;这个为什么加offset呢?原来是计算本节点的mem_map数组的size的时候,start对齐到~(MAX_ORDER_NR_PAGES - 1),无形中在开头和结尾增加了mem_map的大小,而且pgdat->node_mem_map指向的mem_map属于本节点的第一个页面的描述符。因此需要加上

2016-08-07 15:42:32 1235

原创 ramdisk制作过程记录

一. ramdisk.gz.uboot自作过程:1. 创建一个loop目录,作为挂载点:mkdir loop2. 获取一个10M的镜像,count会在kernel配置中使用:dd if=/dev/zero of=ramdisk bs=1k count=102403. 格式化为ext2:mke2fs -F -v -m 0 ramdisk4. 切换root:su r

2016-06-19 17:42:47 5139

原创 通过/dev/mem实现用户层访问GPIO寄存器

由于工作需要用到GPIO设置成中断模式,但是不知道连线是否已经连接到指定的GPIO引脚,而且配置是否成功,因此通过/dev/mem来查看GPIO的配置是否成功是必须的。记录一下:#include #include #include #include #include #include #include #include  #define DEVMEM

2015-08-30 17:04:21 2128

原创 使用SOCK_RAW构建全网广播包

使用SOCK_DGRAM在Linux上发送全网广播包:#include#include#include#include#include#include#include#include#include#include#include#include#include#define PORT 7773#define MAXDATASIZ

2015-08-29 23:01:20 918

原创 pid、tpid的区别

Linux系统函数getpid获取的是进程描述符task_struct的tgid(thread group identifier),而pid(process identifier)是系统管理所有进程的id。测试代码:#include #include int *thread(void *arg){printf("thread pid = %d\n",(int)getpi

2015-03-08 11:03:32 4412

原创 盲人摸象、指鹿为马——命名空间

命名空间,其实很多时候就是指同一样东西,在不同的拥有者眼里属于不一样的定义。这里想古代的几个成语:盲人摸象、指鹿为马等,大家感觉是不是这种意思?

2015-03-08 09:04:03 549

原创 换工作咯

最近在换工作,好累,好心酸,知识面广,可惜没有实战经验。怪就怪自己过得太轻松吧,今年开始加油吧。

2015-03-05 21:56:42 502

原创 NET_SKBUFF_DATA_USES_OFFSET分析

在分析3.0.4内核的网络包sk_buff时,发现:sk_buff_data_t transport_header;sk_buff_data_tnetwork_header;sk_buff_data_tmac_header;/* These elements must be at the end, see alloc_skb() for details.  */sk_b

2014-12-23 21:01:16 1199

转载 内核栈大小

LDD3曾说过:内核具有非常小的栈,它可能只和一个4096字节大小的页那样小。我知道之前文章:Linux红黑树编程实例,图形化显示红黑树最后提到的问题,说递归出现问题,就是因为内核栈大小太小,导致异常。Linux内核栈溢出(stack overflow)问题最近一段时间在设计和开发一个Linux内核模块,进入到最后的正确性测试与稳定性测试阶段。在这个阶段发现了一个非常有意思的问题,

2014-12-08 22:57:54 4246

原创 Linux 位图记录

最近在看Linux内核中断描述符,看到struct irq_desc *irq_to_desc(unsigned int irq){return radix_tree_lookup(&irq_desc_tree, irq);}记录一下static RADIX_TREE(irq_desc_tree, GFP_KERNEL);以后有机会分析。

2014-11-26 21:48:25 683

原创 Linux内核调试理清函数调用

最近在调试内核中断代码时发现一个很好用的宏,在linu/kernel.h:#define _RET_IP_ (unsigned long)__builtin_return_address(0)#define _THIS_IP_  ({ __label__ __here; __here: (unsigned long)&&__here; })调用过程:printk("memblo

2014-11-26 21:37:38 599

原创 针对ARM Linux内核swapper_pg_dir简单分析

针对swapper_pg_dir在ARM上的简单分析

2014-11-24 22:35:16 3359

原创 Linux内核中硬链接和软连接的深入分析

1.Linux链接概念:Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。【硬连接】硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在

2014-11-24 21:07:08 1024 1

原创 从proc目录下的zoneinfo认识Linux内存管理

最近在看Linux内存管理,从head.S到main.c

2014-11-23 09:28:45 11263 1

原创 Linux红黑树编程实例,图形化显示红黑树

Linux上直观显示红黑树结构,方便大家测试验证

2014-11-23 09:05:32 1641

原创 一个Linux内核利用init_task进行进程管理的简单例子

例子来自:http://www.ibm.com/developerworks/cn/linux/l-linux-process-management/

2014-11-15 12:37:18 1712

原创 marsboard Android 4.4 添加开机自动设置静态IP地址

最近在帮忙调试Android设备,需求就是开机设置静态IP地址

2014-11-12 22:14:56 5841

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除