操作系统
文章平均质量分 75
DeadPool loves Star
存储系统方向,热爱操作系统,乐于尝试不同的设计框架
展开
-
论文悦读(8)——Disk文件系统之OptFS(SOSP‘13)文件系统
由于任何上述Disk的顺序性方案都需要等待数据刷回完毕,因此现有的journaling file system,如:EXT3,为了保证崩溃一致性,需要付出极大的性能代价。这种Journaling机制是Pessimistic(悲观的),因为这种机制认为FS假设文件系统会在任何时刻崩溃,保证崩溃一致性除了保证顺序,还需要保证持久化。Overwrite可以通过类似CoW的方式解决,但是CoW破坏了文件数据的局部性(对Disk来说可能极不友好),因此可以采用把数据块Journal的方式,然后做原地更新。原创 2024-05-22 23:17:37 · 759 阅读 · 0 评论 -
DEBUG大典
这里受小星星的邀请,更一下目前遇到的所有极为Hard的BUG(Debug 1-2天,最后改一两行代码)以及解决方案,日后遇到类似的可以有所参考。原创 2024-05-22 18:53:24 · 146 阅读 · 0 评论 -
记一次GRUB未显示解决方案
博主使用的Dell R750服务器,BMC相关信息在机箱的一个可拔出卡片上。BMC的IP可以通过重启服务器在BIOS加载界面获取。介绍了一种讲GRUB重定向到串口的方法,但是这使得在服务器显示器上无法看到GRUB菜单,导致我们无法切换一个损坏的内核。查看服务器串口输出。需要服务器有BMC环境,远程使用。工具进行GRUB操作。原创 2024-02-25 17:57:57 · 280 阅读 · 0 评论 -
远程服务器QEMU+Ubuntu+GRUB+VNC最佳实践
在远程环境上配置QEMU+Ubuntu+GRUB+VNC原创 2023-12-05 10:14:24 · 1072 阅读 · 0 评论 -
论文悦读(6)——PM操作系统之TreeSLS单级存储
相比传统的面向二级存储架构的持久化方法,例如:应用自行实现持久化(App-implemented Persistence)、基于库/编译器实现持久化,SLS方案通过实现单级持久化内存架构能够使应用天然持久化而无需额外的工作(如实现Journaling等)TreeSLS主要针对现有(以往)SLS Checkpoint效率低的问题,结合PM设备大大提升了SLS Checkpoint的性能。原创 2023-10-06 14:36:26 · 867 阅读 · 2 评论 -
编译安装Linux内核实践与踩坑
编译安装Linux内核方法原创 2023-08-04 21:15:53 · 296 阅读 · 0 评论 -
CentOS 8 GLIBC升级失败系统崩溃抢修实战
服务器为CentOS 8,支持glibc版本为2.28,但编译一个工具的glibc需求版本为2.34,于是非常脑残地参考这篇Tutorial开始升级之旅:下载glibc-2.34,并configure到了系统目录,然后将源码make && make install,然后……原创 2023-07-19 21:19:27 · 4272 阅读 · 3 评论 -
论文悦读(5)——NVM文件系统之CtFS(FAST‘22)文件系统
本文聚焦于索引开销问题,利用连续虚拟地址空间将索引开销offload至硬件MMU,从而大大减少索引开销。然而,如何分配虚拟地址空间以管理文件仍是一个待解决的挑战(虽然好像已经解决了,而且看起来更高效),本文通过类似伙伴分配器的方法高效管理虚拟地址空间,并使用PPT完成页表映射。基于PPT,提出pswap()方法实现一致性操作以及文件大小增减操作。文章从问题、动机到解决方案、挑战到评估测试整套流程工整完整,值得学习。需要说明的是虽然本文思路简单,然而实现起来并不简单。原创 2023-06-24 11:49:50 · 607 阅读 · 0 评论 -
HITSZ嵌入式计算(研)23年Keil模拟器项目解决方案
2023年HITSZ嵌入式计算研究生课程项目(张春恺副教授授课)。项目主要使用Keil模拟器实现几个嵌入式系统中的基本功能,但由于缺少文档、参考以及踩坑记录,实验起来非常折磨。本文的主要目的是尽可能帮后人摸排Keil模拟器使用的坑,希望对工程师、学生、教师都有所帮助原创 2023-06-21 12:10:55 · 811 阅读 · 0 评论 -
内核调试:一次多线程调试与KASAN检测实例
博主最近遇到一个非常顽固的多线程BUG,复现起来具有很大的随机性,本文介绍博主一步步定位问题并解决BUG的思路和方案,希望对大家有启发(注:本思路同样适用于用户态调试)原创 2023-02-25 20:41:28 · 895 阅读 · 0 评论 -
解决inlining failed in call to always_inline ‘mm_crc32_u32’: target specific option mismatch
快速解决C语言调用硬件CRC32能力的inlining failed in call to always_inline 'mm_crc32_u32'错误原创 2022-12-09 12:54:12 · 2487 阅读 · 0 评论 -
论文悦读(4)——NVM文件系统之SplitFS(SOSP‘19)文件系统
这是一篇挺有意思的NVM文件系统论文。其本质是利用mmap()实现对已有的文件系统套壳,然后通过避免陷入内核来减少NVM文件系统的软件开销。这是一种新颖且具启发性的研究思路,让人看完不禁赞叹:原来NVM文件系统还能这么设计,原来顶会论文还能这么发……原创 2022-10-06 17:53:50 · 906 阅读 · 0 评论 -
内核调试:crash工具与vmcore实践
本文承接自上一篇文章[Linux服务器远程崩溃查看dmesg实践及踩坑](https://blog.csdn.net/weixin_44465434/article/details/123397795),在上一篇文章中介绍了如何通过配置kdump获取dmesg,此外,kdump还会为我们拍下崩溃时OS的快照:vmcore。博主发现国内的内核调试相关文档杂糅散乱,因此本文对现有的介绍vmcore的文章进行汇总,并介绍一些现有博客之外的个人实践体会。原创 2022-09-01 22:20:39 · 923 阅读 · 0 评论 -
Windows 10外接屏性能挖掘
Windows 10外接屏拓展模式下拖动卡顿,开启GPU加速计划后该现象消失,本文首先提出方法,接着进行猜测解释。原创 2022-07-21 13:25:09 · 428 阅读 · 3 评论 -
论文悦读(3)——NVM文件系统之ZoFS(SOSP‘19)文件系统
ZoFS(SOSP’19)是一款NVM用户态文件系统,其最主要的贡献在于提出了一种能让用户态NVM文件系统在用户态进行元数据修改的方法。原创 2022-04-20 18:25:44 · 1515 阅读 · 4 评论 -
Linux下Optane DCPMM Interleaved和Non-interleaved模式配置
Linux下Optane DCPMM Interleaved和Non-interleaved模式配置近几个月一直在做Optane DCPMM(商用NVM)相关的工作。说来惭愧,最近几天才知道如何进行Interleaved和Non-interleaved模式配置。废话不多说,直接上命令1. 准备下载ndctl和ipmctl,网上方法众多,在此不做赘述2. Interleaved模式Optane DCPMM默认配置就是Interleaved模式,配置脚本如下:sudo ndctl destroy原创 2022-04-04 13:52:54 · 1733 阅读 · 2 评论 -
Linux服务器远程崩溃查看dmesg实践及踩坑
Linux服务器远程崩溃查看dmesg实践及踩坑1. 基本方法2. Cent OS 8 Kdump配置实践与踩坑2.1 错误定位2.2 解决方案在进行内核开发的时候,性能测试必须将内核模块部署到远程服务器上,一旦崩溃,难以定位错误。本文介绍配置kdump工具进行崩溃记录的方法。话不多说,直接开始1. 基本方法一般来说我们利用kdump工具进行崩溃后记录,kdump的主要原理就是在内核崩溃后,启动一个小内核来转储内存dmesg的信息。其基本配置方法已经有多篇文章进行介绍,我们这里不再赘述,仅给出链接原创 2022-03-10 12:21:48 · 3288 阅读 · 0 评论 -
编译静态文件系统测试工具【Filebench】并在QEMU中运行
编译静态文件系统测试工具【Filebench】并在QEMU中运行1. 手动处理2. 自动处理承接自上一篇文章编译静态文件系统测试工具【FIO】并在QEMU中运行,光有个FIO可能还不够,我们继续将Filebench这个文件系统测试工具也移植到我们的QEMU中1. 手动处理Filebench不像FIO那样有--build-static选项可以配置为静态二进制文件,需要一些额外的操作。首先,下载相应源码:git cloen https://github.com/filebench/filebenc原创 2022-02-21 19:47:00 · 528 阅读 · 2 评论 -
编译静态文件系统测试工具【FIO】并在QEMU中运行
编译静态文件系统测试工具【FIO】并在QEMU中运行1. FIO静态编译2. 在QEMU中运行可能存在的问题3*. 问题的排查编译静态的文件系统测试工具就可以在QEMU环境中测试自己的文件系统而不必担心机器崩溃啦????,关于如何搭建内核开发环境可参考博主的前置文章:用VSCode + QEMU跑起来能够可视化Debug的NOVA文件系统。今天介绍的是FIO文件系统测试法宝的静态编译1. FIO静态编译将下面命令中的path替换为你想要的安装路径,用于找寻编译出来的二进制文件。例如,我将其设为我原创 2022-02-21 14:37:50 · 8744 阅读 · 3 评论 -
内核开发崩溃定位方法实践
内核崩溃定位方法1. 参考文章2. 实践2.1 内核配置2.2 内核崩溃定位这些天遇到一个非常离谱的内核错误,用眼睛看根本无法定位……因为看不懂内核DUMP日志,这里简单记录一下1. 参考文章定位内核模块crash的方法2. 实践2.1 内核配置首先内核需要可DEBUG,相关配置可参考博主之前的文章用VSCode + QEMU跑起来能够可视化Debug的NOVA文件系统,这里重点关注下面内核DEBUG选项配置部分:# 接下来配置内核Debug选项,直接用命令即可# 下述代码-e表示ena原创 2022-02-04 11:01:19 · 1539 阅读 · 0 评论 -
解决Failed to find an available port: Address already in use
解决Failed to find an available port: Address already in use很多时候运行QEMU我们会加入-s选项,在某些情况下没有正常关闭QEMU会使得端口未被释放,这时就会出现Failed to find an available port: Address already in use错误,不多BB,解决方法如下:利用sudo lsof -i tcp:端口号查找相关进程,这里QEMU的-s选项默认GDB端口号是1234,所以我们输入下述命令[deadp原创 2022-02-02 21:39:35 · 6060 阅读 · 4 评论 -
制作根文件系统:一站式配置脚本
制作根文件系统:一站式配置脚本1. 利用BusyBox构建根目录文件系统1.1 BusyBox安装与编译1.2 制作文件系统2. 一站式配置脚本本文承接自用VSCode + QEMU跑起来能够可视化Debug的NOVA文件系统,在上篇文章中我们使用CentOS8自带的initramfs来作为qemu的initramfs,这样实在不方便:不可定制化,启动时间太长等,在这篇文章中博主将介绍利用busybox制作initramfs的方法,并会提供一套全自动化构建rootfs脚本,不多BB,直接起飞。如果不想看原创 2022-01-26 22:27:31 · 770 阅读 · 4 评论 -
解决Windows 10不显示打字框
解决Windows 10不显示打字框昨晚更新了Win 10系统,今早莫名其妙打字没了框……可太尴尬了。1. 已有的解决方案目前能百度到的方案基本都是调整输入法兼容性,这种方式的输入框是远古Win 10的模样,让人十分不习惯:如何回到现在的输入框呢2. 另一种解决方案其实很简单,输入框不见了是系统更新所致,赶快打开设置看看是不是系统没更新完成:一般来说都是有版本没有更新,更新系统即可。...原创 2022-01-24 11:20:34 · 2751 阅读 · 1 评论 -
解决在CentOS 8编译glibc-static
解决在CentOS 8编译glibc-static最近想要学习制作rootfs的方法,需要编译静态busybox,但是在我的CentOS 8服务器的yum源中死活找不到libm.a静态链接库,本文介绍博主的解决方案。参考这篇文章,当你找不到想要的包的时候,直接上这个网站https://centos.pkgs.org去搜你想要的包,并使用:wget xxx命令将binary文件下载下来。本次我们下载glibc-static,因为libm.a是位于glibc-static包里的我们在创建一个文原创 2022-01-21 14:28:58 · 2099 阅读 · 0 评论 -
论文悦读(2)——NVM文件系统之PMFS文件系统
PMFS文件系统1. 背景(Background)2. 动机(Motivation)2.1 为什么设计NVM文件系统2.2 NVM设备为文件系统设计带来的挑战2.3 贡献3. PMFS设计与实现(Design & Implementation)3.1 系统概貌3.2 Mmap I/O优化3.3 一致性设计3.3.1 In-Place更新3.3.2 元数据一致性3.3.3 页面分配器一致性3.3.4 崩溃一致性(PMFS恢复)3.3.5 数据一致性3.4 写入保护3.5 测试和验证4. 评估(Eval原创 2022-01-15 13:15:43 · 1561 阅读 · 5 评论 -
解决文件损坏导致的fatal: not a git repository (or any of the parent directories): .git
解决文件损坏导致的fatal: not a git repository (or any of the parent directories): .git与平日碰到的情况不同,我的目录下有.git文件,但还是报这个错1. 问题描述离离原上谱。2. 解决方案参考地址发现.git/HEAD文件空了,这里本应该记录了所有Branches的信息,这意味着git的HEAD文件被损坏了。恢复步骤如下:# 发现没有输出 cat .git/HEAD# 临时修补echo 'ref: refs/h原创 2021-11-17 10:43:26 · 2998 阅读 · 1 评论 -
用VSCode + QEMU跑起来能够可视化Debug的NOVA文件系统
用VSCode + QEMU跑起来能够可视化Debug的NOVA文件系统1. 环境配置2. QEMU安装3. NOVA内核编译4. Initrd选择与QEMU启动内核5. NVM设备模拟5.1 官方方案5.2 个人方案6. 利用VSCode可视化调试上次介绍了NOVA文件系统,接下来的任务就是怎么开始代码上手NOVA文件系统了。博主具有一定强迫症,开发内核前一定要想配置好可视化Debug方法,不想用printk,或是其他方法。另外,现有的配置NOVA的方案都是直接改虚拟机的grub来模拟NVM,然后原创 2021-11-07 20:49:02 · 1452 阅读 · 0 评论 -
关于container_of的理解
关于container_of的理解Linux内核开发中经常看到container_of函数,始终会忘记它的意思,今天简单记一下函数原型container_of函数的注释如下,翻译过来是通过结构体type的member的成员对应的指针ptr获得机构体type。/** * container_of - cast a member of a structure out to the containing structure * @ptr: the pointer to the member. *原创 2021-10-25 22:02:47 · 332 阅读 · 0 评论 -
论文悦读(1)——NVM文件系统之NOVA文件系统
NOVA文件系统文章目录NOVA文件系统1. 背景(Background)1.1 NVM技术1.2 NVM带来的挑战1.3 常用的保证原子性/强一致性操作1.4 当前基于NVM的文件系统2. 动机(Motivation)3. NOVA设计与实现(Design & Implementation)3.1 观察(Observation)3.2 设计原则(Overview)3.3 NOVA实现(NOVA Implementation)3.3.1 NOVA总体架构布局3.3.2 NOVA原子性及写入顺序保证原创 2021-10-21 14:14:36 · 2356 阅读 · 2 评论 -
Linux根目录文件系统变为Read Only解决方案
Linux根目录文件系统变为Read Only解决方案树莓派在shutdown过程中一不小心关闭了电源,导致根目录文件系统被毁(ext 4),变成了Read Only。上面的问题急死我了。国内的博客找半天啥都没有,都说只需要mount -o remount,rw /就行了,但是一直报错:在这里终于找到了解决方法,cannot-modify-files-in-my-home-directory我们只需要remount设备就行了:mount -o remount,rw /dev/mmcblk0原创 2021-09-01 20:05:19 · 3044 阅读 · 0 评论 -
F2FS文件系统论文解读
F2FS文件系统论文解读F2FSF2FS 轮廓Design and Implementation of F2FSBlock、Segment、Section and Zone整体布局文件结构(file inode structure)目录结构(Directory Structure)多级头部日志(Multi-Head Logging)CleaningAdaptive LoggingCheckpoint And Recovery最近在做文件系统方面的工作,就把这几天的工作贴上来吧。参考文献:1. F2F原创 2021-01-29 11:32:45 · 2718 阅读 · 0 评论 -
xv6 6.S081 Lab9: mmap
xv6 6.S081 Lab9: mmap写在前面实验介绍开始!mmap代码在这里。这是完成的最后一个实验了,因为网络部分在计算机网络实验中有所涉及,就没再做了。只能说,完结撒花吧!感谢xv6陪伴的这一个学期。写在前面都最后一个实验了,相关参考资料就不多提了吧~还是提一下:我的博客OS实验xv6 6.S081 开坑中给出了一些有用的参考资料,大家可以参考。实验介绍老样子,先给实验指导书。本次实验主要完成两个任务:简单的mmap简单的munmap开始!什么是mmap呢?在Li原创 2020-12-23 15:50:40 · 3571 阅读 · 2 评论 -
xv6 6.S081 Lab8: fs
xv6 6.S081 Lab8: fs写在前面实验介绍开始!Large FileSymbolic linksfs代码在这里。我的妈呀,终于要写完了,xv6的file system考察难度并不大,这里强烈推荐我工Ext2 Based File System,这里可以给一下参考代码与参考结果,后面找机会写写博客。写在前面xv6中的file system结构与Ext 2的结构类似,如下图所示:在完成本实验前,推荐阅读xv6 book Chapter 7.9,搞清楚inode的索引结构。与往常一样,原创 2020-12-23 14:04:27 · 2962 阅读 · 0 评论 -
xv6 6.S081 Lab7: Lock
xv6 6.S081 Lab7: Lock写在前面实验介绍开始!Memory AllocatorBuffer Cachelock代码在这里。本次实验理解起来简单,做起来也容易写在前面老样子,在我的博客OS实验xv6 6.S081 开坑中给出了一些有用的参考资料,大家也可以一并参考。实验介绍这里是实验指导书。本次实验主要还是学习内存分配,不过需要注意的是,本实验会和多CPU打交道,因此在内存分配的时候,锁的存在就十分必要了。本实验主要分为两个部分:基于多CPU的内存分配器(Memory原创 2020-12-23 11:46:00 · 4876 阅读 · 5 评论 -
xv6 6.S081 Lab6:Syscall
xv6 6.S081 Lab6: Syscall写在前面实验介绍开始!回答问题Uthread: switching between threadsAlarm完善Alarmsyscall代码在这里。不行了,今天已经快飙到极限了,写了5篇博客了……药不能停,再来一篇!写在前面syscall即system call,系统调用。完成本次实验可以让我们了解诸如:fork()、write()、exec()之类的函数究竟是如何调用的——这些函数在user文件夹中真的找不到原型……和往常一样,我的博客OS实验x原创 2020-12-22 23:36:21 · 1310 阅读 · 0 评论 -
xv6 6.S081 Lab5: cow
xv6 6.S081 Lab4: cow写在前面实验介绍开始!cow代码在这里。完成了lazy后,cow的实现就非常明了了……写在前面经典写在前面????。cow是copy-on-write的缩写(不是母牛┗|`O′|┛ 嗷~~),从字面上来看就是只在要写的时候复制内存。考虑这样一个情况:调用fork()后,子进程是需要复制所有的父进程内存还是说当且仅当子进程或者父进程要写的时候才复制呢?答案显而易见了。这就是cow的核心思想。按照惯例,这篇博客OS实验xv6 6.S081 开坑中给出了另一些有原创 2020-12-22 21:37:52 · 2059 阅读 · 3 评论 -
xv6 6.S081 Lab4: lazy
xv6 6.S081 Lab4: lazy写在前面实验介绍开始!打印页表实现Lazy Allocation修改sbrk()实现Lazy Allocation完善Lazy Allocationlazy代码在这里。我去,lazy改好多文件啊。不过相比于buddy allocator,自认为lazy还是好多了????。写在前面哈哈,老·写在前面了。在完成lazy的时候,一定要有Page的概念,说白了就是一个内存页,emmm,其实就是一片连续内存吧。另外,一定要理解lazy的思想:该分配Page时才分配,原创 2020-12-22 17:53:47 · 1992 阅读 · 0 评论 -
xv6 6.S081 Lab3: alloc
xv6 6.S081 Lab3: alloc写在前面实验介绍开始!任务再描述任务一实现任务二实现Buddy AllocatorCode Thru任务二的实现alloc代码在这里。另外,本文主要是将我的实验报告搬了下来,因此内容难免偏多,可以一边结合代码、一边结合实验指导书食用。写在前面Buddy Allocator是Linux中著名的内存分配器,详情可以参考这里的实验指导书(PS:写得真的非常棒)实验介绍本次实验由两个任务构成:利用bd_malloc 实现文件动态分配优化Buddy Al原创 2020-12-22 16:33:51 · 1150 阅读 · 2 评论 -
xv6 6.S081 Lab2: shell
xv6 6.S081 Lab2: shell写在前面实验介绍开始!Shell代码在这里。写在前面echo a > filegrep deadpool < deadpoolStory.txt | echo > file上述命令展示了Linux中的重定向与管道机制。其中,重定向是将标准输入或输出重定向至一个文件描述符内,例如:echo a > file,echo命令本来是将内容写入标准输出,然后展示到Shell上,但是这里有一个重定向符">",它将echo的标准原创 2020-12-22 14:19:40 · 966 阅读 · 2 评论 -
xv6 6.S081 Lab1: util
xv6 6.S081 Lab1: util写在前面实验介绍开始!sleeppingpongPrimesFindXargs拖了这么久,终于稍微有时间填坑了。今天介绍xv6的第一个实验util。代码在这里。废话不多说,我们开始吧。写在前面参考我的上一篇博客OS实验xv6 6.S081 开坑,这里给出了一些有用的参考资料。实验介绍这是MIT Lab1的官方指导书Lab1 UtilitiesLab1要求我们实现几个Unix中常用的工具函数:sleeppingpongprimesfindx原创 2020-12-22 12:44:14 · 4083 阅读 · 1 评论