- 博客(1275)
- 资源 (16)
- 收藏
- 关注

原创 linux存储技术学习资料
是一个用于调试文件系统的工具,可以用于查看和修改文件系统的内部状态。是一个用于显示 ext2、ext3、ext4 文件系统信息的命令行工具。可能会对文件系统造成不可逆的损坏,因此在使用之前请务必备份数据。是要显示信息的文件系统所在的设备文件名,例如。用法(来自chatgpt)是要调试的文件系统)bmap imap
2023-05-22 19:38:19
2473
1
原创 使用HugeTLB验证基于Contiguous Bit的大页
其中bit52就是Contiguous Bit,那么这个bit具体可以达到什么效果呢?当这个bit为1时,表示这个表项与其他几个相邻表项共同映射出一块连续的物理地址范围,并且这些表项在TLB中只需要一个entry,这跟传统的大页类似,一方面节省了TLB的空间,另外一方面减少了TLB miss的概率,可以提高程序执行的性能。
2025-03-31 16:09:53
376
原创 内核折腾 —— 如何分析复杂的宏定义?
Linux内核代码中用到了大量的宏定义,甚至某些函数的声明和定义也是用宏定义实现的,这导致在分析代码时有时难以找到函数的定义
2024-12-10 20:51:34
140
原创 巧用function graph的trace输出格式
使用Linux内核的function graph tracer可以跟踪函数耗时,分析内核代码的执行流,并且还提供了很多选项开关来对输出的内容进行定制,进一步提高分析效率
2024-12-10 10:15:27
139
原创 为什么通过clear_refs可以使进程触发缺页?
https://www.cnblogs.com/pengdonglin137/p/18375784
2024-08-23 16:20:25
188
原创 使用perf、ftrace抓取指定发生指定事件时的调用栈(内核态+用户态)
有时我们会有这样的需求,我们希望获得发生某个内核事件时的调用栈,从内核态一直到用户态。
2024-08-20 16:07:37
356
原创 统计内存外碎片事件
这个trace_event的路径是:/sys/kernel/tracing/events/kmem/mm_page_alloc_extfrag。上面将借用成功的信息通过trace输出了出来,这样我们就可以在上层利用各种监控机制统计。定义如下:include\trace\events\kmem.h。
2024-08-02 11:31:06
343
原创 使用9p在guest和host共享文件系统时遇到9pnet_virtio: no channels available for device hostshare
【代码】使用9p在guest和host共享文件系统时遇到9pnet_virtio: no channels available for device hostshare。
2024-05-11 12:52:14
646
原创 在ubuntu20上编译bcc时遇到:Could NOT find LibDebuginfod
参考:https://github.com/iovisor/bcc/issues/3601。
2024-04-22 10:07:19
832
原创 Linux系统调用流程、参数传递以及返回值
应用程序运行在用户态,需要通过内核提供的系统调用陷入到内核态来完成一些特权操作,比如创建、打开以及读写文件等。实际开发中,为了可移植性和便捷性,应用一般不会直接调用系统调用,而是使用C库封装的接口,由C库去调用。系统调用的实现机制入参是如何传递的返回值是如何传递的系统调用返回值、errno、perror。
2024-04-21 17:54:52
304
原创 远程管理HP笔记本
我的HP笔记本的型号是AMD的战99,平时放在家里,有时想远程用一下,但是又不想让笔记本一直处于开机状态,下面介绍一下我的做法。
2024-04-20 08:53:23
754
原创 Android系统学习 —— 替换crash_dump文件
可以看到,crash_dump放在了/apex/com.android.runtime下面。但是这个目录下的文件即使remount了也无法修改,而是需要通过/system/apex来修改。
2024-04-17 15:07:40
540
1
原创 T620折腾 —— 给虚拟机配置大页
虚拟机访问物理内存需要经过两级页表翻译,如果使用大页,以方便可以降低缺页发生的频率,同时也可以降低TLB Miss的频率,对于提升虚拟机的运行性能有一定作用
2024-04-14 07:20:49
529
1
原创 搭建Android内核和Framework开发和调试环境
作为一名系统软件工程师,除了工作中用到的公司提供的Android硬件设备外,如果能有一个纯软件模拟的Android系统开发调试环境,对工作和学习都会有极大的便利,为此Android为我们提供了Cuttlefish这个模拟器
2024-04-13 10:27:38
768
原创 ARM64架构 —— 异常返回地址
以EL0为例,正常情况下执行SVC系统调用指令可以陷入EL1,此时ELR_EL1中记录的时SVC指令后面的那条指令的地址。但是如果EL0上直接调用HVC或者SMC,因为EL0上没有权限使用HVC和SMC,那么返回地址就是HVC或者SMC指令的地址。那么这里的异常返回地址ELR的值具体是如何规定的呢?
2024-04-10 15:11:20
426
原创 深入理解Linux系统中的几种栈以及栈的切换
栈在进程运行过程中的起着至关重要的作用,进程可以使用栈来保存函数参数、局部变量以及返回地址等,还可以利用栈回溯技术获取程序的函数调用关系。那么在Linux系统中,一个进程会用到哪些栈呢?进程执行过程中,或者处于用户态或者处于内核态,所以在用户态和内核态分别有各自的栈。在用户态,一个进程中的主线程跟其他线程用的是不同的栈。在内核态,根据是通过系统调用还是中断的原因进入内核,栈又有所区分。另外进程在用户态异步执行信号处理程序时又使用的是哪个栈呢?下面讨论一下,使用的是基于ARM64的Linux平台,Linux内
2024-04-07 13:13:32
386
原创 Linux的信号栈的实现(1)
在前一篇文章中介绍了Linux系统中的几种栈以及它们之间的切换,进程在用户态和内核态会使用不同的栈,在用户态的主线程和其他线程都有各自的栈,此外进程在执行信号处理程序时也需要栈,那么这个栈来自哪呢?
2024-04-01 16:13:32
1219
原创 Linux内存管理 —— 通过实验学习和理解CoW(2)
前一篇通过实验的方法理解了一下CoW,下面大致分析一下Linux内核源码实现。我们知道,CoW是父进程在fork时,将自己的私有可写的页面的映射属性设置为只读,然后映射信息跟子进程共享,后面fork完成后,父子进程先发起写操作的一方会触发CoW,而后发起的也会触发缺页,但是不会CoW,而是复用已有的页面。
2024-04-01 14:23:44
839
原创 Linux内存管理 —— 通过实验学习和理解CoW(1)
我们知道,Linux内核为了提高进程fork的效率,实现了CoW技术,即将进程的私有的可写区域的Page的映射属性改成只读,父子进程的任何一方先发起写操作的将触发CoW:分配一个新的物理页,然后将要写的区域页的内容拷贝到这个物理页,最后将这个物理页映射到要写的用户虚拟地址上。下面我们通过实验和源码分析来理解这个过程。
2024-03-31 19:34:20
1059
原创 使用crash、funcgraph以及kprobe使用案例 —— 跟踪文件写缺页和脏页回写
内核版本linux-6.5需求通过mmap将一个文件以SHARE的方式映射到进程的虚拟地址空间,然后写其中一段数据,此时会发生缺页异常,内核会分配页缓存并根据偏移将文件指定位置的内容读到页缓存,最后再修改进程的页表,将这个页缓存映射给用户,不过第一次映射的时候PTE里面RW位是0,当进程真正写的时候,会再次触发缺页,并将对应的文件页设置为脏页,Linux会定期将脏页回写到磁盘上,在回写操作执行之前清除脏页标记,同时也会清除RW位。下面利用crash、funcgraph以及kprobe结合的方式来学习
2023-11-29 11:29:19
1210
原创 关闭Thunderbird的自动换行
参考https://blog.youkuaiyun.com/cuma2369/article/details/107667731https://support.mozilla.org/en-US/questions/1307935点击设置 -> 配置编辑器:然后搜索mailnews.wraplength,把值修改为0:...
2023-09-13 17:11:00
1979
原创 分析结构体的内存空间布局 —— pahole
pahole这个工具可以用来分析结构体的内部布局信息,参考下面的文章:https://lwn.net/Articles/335942/
2023-09-10 23:25:00
2229
原创 在t620上使用串口重定向
参考DELL R730 iDRAC与IPMI的使用Linux上使用IPMITool常用的命令使用IPMI管理Dell服务器配置iDRACBIOS上面“Serial Port Address”用于设置串口设备的对应关系,上图这种配置ttyS0是COM0,ttyS1是COM2,如果选择的是下面这种:那么ttyS0对应的是COM2.grub参数修改/etc/defa...
2023-09-03 14:11:00
1852
原创 用qemu模拟scsi设备
参考A study of the Linux kernel PCI subsystem with QEMUHow to emulate block devices with QEMU实验建立下面的PCI总线拓扑,然后来模拟scsi磁盘的添加和删除PCI总线拓扑root@ubuntu-vm:~# lspci -tv-[0000:00]-+-00.0 Intel Corpor...
2023-09-01 16:53:00
2054
原创 利用ESXi学习设备vfio设备直通
参考公开 VMware 硬件辅助的虚拟化《KVM实战 原理、进阶与性能优化》场景需要在Guest操作系统中使用硬件虚拟化的能力,此时需要Host向Guest暴露硬件虚拟化能力。配置可以通过下面这个方法:启动Guest后,编辑GRUB参数,使能IOMMU,以Ubuntu为例:编译/etc/default/grub增加了intel_iommu=on更新grubu...
2023-08-20 23:32:00
1750
原创 一台UPS实现NAS、PC和服务器的自动关机
参考如何用一台UPS控制多台主机的断电自动关机?NetworkUPSTools(NUT)的安装与配置家用UPS同时给NAS和PC使用实现自动关机https://networkupstools.org/作者pengdonglin137@163.com概述之前在买NAS时配了一台UPS,有自动关机功能。最近买了台T620服务器,又不想再给它配一台UPS,所以在网上查找如何跟NAS共...
2023-08-19 12:07:00
5215
原创 UEFI学习资料
书籍《UEFI编程实践》技术博客罗冰的UEFI开发专栏https://www.lab-z.com/iof/UEFI入门必读的12本书
2023-08-17 20:24:00
1710
原创 搭建edk2编译环境
参考《UEFI编程实践》https://github.com/tianocore/edk2作者pengdonglin137@163.com概述在Ubuntu中安装ubuntu18.04的容器环境,在其中搭建编译和开发环境,支持运行UEFI模拟器。步骤安装dockerDocker安装及使用下载容器镜像$ sudo docker pull ubuntu:18.04启动...
2023-08-17 16:58:00
2121
原创 在T620上安装系统遇到的问题
由于买的T620主要是自己玩,不需要特别高的配置,不需要组raid,就让卖家把H710阵列卡换成了直通的H310阵列卡(non raid),这样家里富裕的sata固态和机械硬盘就可以直接差到阵列卡上了,因为sas接口兼容sata接口,反之则不行。下面是在折腾时遇到的一些问题。不支持UEFI的方式从硬盘启动开机检测可以探测到下面两块硬盘:1TB的固态盘和一个8TB的机械盘在装系统时,...
2023-08-15 21:05:00
2990
原创 用kvmtool启动一个虚拟机
参考https://www.cnblogs.com/pengdonglin137/p/6431234.htmlhttps://github.com/kvmtool/kvmtoolKVM-api学习--基于kvmtool脚本#!/bin/bash./vm run \ -c 4 \ -m 4G \ -k ../linux-6.2/a...
2023-08-14 17:51:00
1695
原创 在低版本glibc的环境里运行基于高版本glibc编译的可执行程序
背景在工作过程中,我们经常会遇到可执行程序依赖的glibc跟当前运行环境的版本不兼容,导致应用程序无法运行,比如:/lib64/libc.so.6: version `GLIBC_2.14’ not found原因是运行环境的glibc的版本比编译环境的glibc的版本低。几种可行的方法1. 升级当前运行环境的glibchttps://blog.youkuaiyun.com/u01126225...
2023-08-11 16:13:00
3339
2
原创 使用rootfs制作docker容器镜像
参考基于rootfs构建Docker镜像将rootfs.tar.gz制作成docker image基于rootfs制作镜像How to Create Your Own Docker Base Images From 制作rootfs这里为了简化,直接使用dracut生成initramfs。生成initramfs# dracut -H --keep initramfs.im...
2023-08-11 15:25:00
2187
原创 dell T620使用汇总
前些天从淘宝上买了一台不知道几手的dell T620塔式服务器,主要用来瞎折腾,下面记录一些使用经验。T620PowerEdge T620Dell PowerEdge T620 Systems Owner's ManualTechnical Guidedell技术支持https://www.dell.com/support/home/zh-cn版本...
2023-08-10 16:07:00
2080
原创 把电脑显示器当作另一个视频输出设备的显示器
需求有一个笔记本电脑和一个支持HDMI输出的机顶盒,希望机顶盒的内容输出到笔记本的屏幕上。硬件hdmi转usb的视频采集卡。绿联视频采集卡海备思usb采集卡软件配置以Potlayer为例。采集卡怎么用?电脑怎么成为其他设备的显示器?potplayer设置教程/采集卡连接电脑软件操作方法完。...
2023-07-27 11:23:00
1881
原创 通过qemu和docker搭建交叉编译环境
背景在工作中我们经常需要交叉编译一些可执行程序或者动态库,有时要编译的程序过于复杂,如果靠纯的交叉编译,费事又费力,需要解决大量的编译依赖以及报错。解决方案 docker + qemu-user利用qemu-user可以运行不同架构的用户态程序,而docker可以创建一个运行不同架构的用户程序的环境。原理这里用到了linux提供的binfmt_misc,可以根据可执行程序的格式来调用不...
2023-07-27 09:17:00
2426
1
原创 内核文档翻译 —— Building External Modules(编译外部模块)
原文:https://www.kernel.org/doc/html/latest/kbuild/modules.htmlThis document describes how to build an out-of-tree kernel module.1. Introduction"kbuild" is the build system used by the Linux kernel....
2023-06-30 20:18:00
2030
基于容器的bpftrace,版本为0.16.0
2022-09-03
半静态编译的bpftrace:v0.16.0
2022-09-02
静态编译的bpftrace可执行程序v0.12.0
2022-09-02
操作系统导论(英文版)+ 代码
2019-06-30
u-boot-2014_04移植文档(tq2440)以及补丁文件
2014-06-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人