- 博客(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 1538
原创 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 252
原创 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 1018
原创 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 644
原创 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 1707
原创 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 1163 1
翻译 The design of preemptible read-copy-update【待翻译】
https://lwn.net/Articles/253651/待翻译
2019-01-05 12:27:49 307
原创 基于kernel2.5.43对第一版经典RCU实现的思考
最近在研究RCU机制,想从RCU的历史源头开始深入理解(追溯根源会有意想不到的收获,至少可以从代码演进过程中领略大牛们的思想)。想到这里,网上也有很多和我一样想法的人士,特别感谢这篇文章:http://www.wowotech.net/kernel_synchronization/Linux-2-5-43-RCU.html上述文章讲解很详细,内容都覆盖全面。有兴趣的朋友可以直接阅读。...
2019-01-05 10:57:14 362 1
原创 printk一些优化想法——增加核号打印(有缺陷)
故障定位过程中发现多个核调用printk时,很难直观的看到每一行是哪个核打印的。因此想能不能在每行前增加核号打印"[x]",试了半天,在vprintk_emit里尝试增加this_cpu的字符串转换。效果是有的,但是有些缺陷。因为text的前两个字符时是给printk等级填充,所以有些缺陷。思考了一下,看来内核对printk可配置项不多,当前只有一个时间戳可配置。虽然可以通过pri...
2018-12-05 21:25:45 982
原创 内核小技巧——强制设置进程运行核 select_task_rq
故障定位过程中,业务进程没有做核绑定,导致每次都是通过负载均衡动态选择运行核,导致很多时候业务进程出现在核0上死循环(系统态),串口都没反应。由于是第三方负责启动,无法通过taskset命令指定核号启动。不过我们知道执行进程的ELF名字,因此想到是否可以通过内核强制设置进程运行核号。关键函数select_task_rq(),通过对比进程名字强制设置核号。/* * The cal...
2018-12-05 21:06:29 1225
原创 基于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 3107
原创 DPDK17.05 第一次试用心得与问题记录
最近由于优化性能需求,特意了解dpdk-17.05。在虚拟机上第一次安装试用,发现还是有很多坑哈。下载地址不说了,度娘一下吧。记录一下问题吧:1. 首先虚拟机要配置两个网卡以上,而且必须都是host-only模式。我配置了三个网卡,一个NAT模式,另外两个host-only。结果悲剧了,运行testpmd时发现有时候stop有数据包,很多时候都是0,重启后再试都是0。怀疑虚拟机网卡
2017-06-15 21:36:03 2297 4
原创 关闭L2 cache的方法
最近在powerpc b4860上测试,需要关闭L2 cache,发现系统启动过程怎么设置都不行,一旦设置系统就会启动异常。突然想起,有没有可能是U-Boot阶段L2 cache已经在使用,这时候再关闭已经来不及啦。因此,在UBoot阶段,先flush+无效L2 cache,再关闭L2 cahce。然后再启动系统,系统比正常时,多了两倍启动时间。呵呵,就到这吧
2017-04-23 16:34:46 3110
原创 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 1977
原创 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 5249
原创 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 5018 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 2232 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 2993
转载 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 2474
原创 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 1325
原创 ARM 全局页表与二级页表转换调试
最近在看ARM的内存管理,刚好看到全局页表swapper_pg_dir,看了很久细想能否直接通过查看内存方式查看swapper_pg_dir的内存:幸好之前弄过/dev/mem,知道可以把物理内存映射出来。先贴工具代码:#include #include #include #include #include #include #include #includ
2016-08-19 20:33:03 2317
原创 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 1296
原创 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 5236
原创 通过/dev/mem实现用户层访问GPIO寄存器
由于工作需要用到GPIO设置成中断模式,但是不知道连线是否已经连接到指定的GPIO引脚,而且配置是否成功,因此通过/dev/mem来查看GPIO的配置是否成功是必须的。记录一下:#include #include #include #include #include #include #include #include #define DEVMEM
2015-08-30 17:04:21 2205
原创 使用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 951
原创 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 4544
原创 盲人摸象、指鹿为马——命名空间
命名空间,其实很多时候就是指同一样东西,在不同的拥有者眼里属于不一样的定义。这里想古代的几个成语:盲人摸象、指鹿为马等,大家感觉是不是这种意思?
2015-03-08 09:04:03 574
原创 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 1234
转载 内核栈大小
LDD3曾说过:内核具有非常小的栈,它可能只和一个4096字节大小的页那样小。我知道之前文章:Linux红黑树编程实例,图形化显示红黑树最后提到的问题,说递归出现问题,就是因为内核栈大小太小,导致异常。Linux内核栈溢出(stack overflow)问题最近一段时间在设计和开发一个Linux内核模块,进入到最后的正确性测试与稳定性测试阶段。在这个阶段发现了一个非常有意思的问题,
2014-12-08 22:57:54 4344
原创 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 712
原创 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 625
原创 Linux内核中硬链接和软连接的深入分析
1.Linux链接概念:Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。【硬连接】硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在
2014-11-24 21:07:08 1080 1
原创 一个Linux内核利用init_task进行进程管理的简单例子
例子来自:http://www.ibm.com/developerworks/cn/linux/l-linux-process-management/
2014-11-15 12:37:18 1740
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人