- 博客(55)
- 资源 (25)
- 收藏
- 关注
原创 白话一致性
文章目录一致性算法WAROQuorum机制一致性算法强一致性:写数据时,必须保证所有的副本都写完成后,才能返回给用户。弱一致性:当写入数据时,只需要保证半数以上的数据为最新的,即可返回给用户,写完成。剩余的副本可以通过后台写完成同步,同步完成后所有的数据一致。WAROWARO (Write All Read one)是一种强一致性的协议,当应用程序写数据时,所有的副本都写入后,本次写才视为完成,不然就返回错误。如此,读的时候去任意一个数据块上读取都是最新数据。缺点WARO的写性能下降,因为必须
2021-04-14 14:37:54
237
原创 markdown工具推荐,Windows下设置自己的图库
typora 是一个文本编辑器,可以用来写markdown等配置typora选文件=》偏好设置=》图像设置:插入图片时,选择复制到指定路径选择上传服务使用windows_images.bat脚本windows_images.batwindows 配置完成...
2021-03-29 20:10:24
316
原创 5个Linux命令
linux 命令5个Linux命令findmntssiplscpulspci5个Linux命令findmnt该findmnt命令是基本软件包util-linux的一部分,因此几乎在所有Linux系统上都可用。它可以树状格式打印所有已挂载的文件系统。我发现findmnt命令的输出比更流行的mount命令提供的输出更具可读性。这是文件系统如何在Ceph节点上挂载的示例:$ findmntTARGET SOURCE FSTYPE OPT
2021-01-26 11:07:35
394
原创 内存管理参数zone_reclaim_mode分析
zone_reclaim_mode官方解释调整方法调整的影响官方解释zone_reclaim_mode:Zone_reclaim_mode allows someone to set more or less aggressive approaches toreclaim memory when a zone runs out of memory. If it is set to zero then nozone reclaim occurs. Allocations will be satisf
2021-01-15 16:04:59
2127
原创 rpm-packet说明
最近在编kernel的时候,写spec的时候发现有好多宏不知道什么含义,查了下宏的定义位置。记录下,备用体系结构和操作系统:构建拱:i386兼容构建拱:i686 i586 i486 i386 noarch构建操作系统:Linux兼容构建操作系统的:linux安装拱:i686安装操作系统:Linux兼容拱:i686 i586 i486 i386 noarch兼容操作系统:linuxrpm的宏值:macrofiles: /usr/lib/rpm/macros:/usr/lib/rpm/i3
2020-12-24 10:21:50
136
原创 bcc 安装
最近在学习bpf,记录下安装bcc流程环境Redhat8kernel-5.4.831. 编译llvm编译 LLVM 和 Clang 开发库git clone https://github.91chifun.workers.dev//https://github.com/llvm-mirror/llvm.gitcd llvm/tools; git clone https://github.91chifun.workers.dev//https://github.com/llvm-mirror/c
2020-12-22 17:08:12
1304
1
翻译 BPF设计问答
BPF在网络,跟踪,Linux内核中的安全性以及BPF虚拟机的几种用户空间实现中的可扩展性和适用性导致对BPF实际上是什么存在许多误解。简短的质量检查旨在解决这一# 问题,并概述BPF长期发展的方向。# 问题和解答问:BPF是类似于x64和arm64的通用指令集吗?问:BPF是通用虚拟机吗?问:为什么选择C调用约定?问:将来可以支持多个返回值吗?问:将来可以支持5个以上的函数参数吗?问:BPF程序可以访# 问指令指针或返回地址吗?问:BPF程序可以访# 问堆栈指针吗?问:C调用约定是否会减少可能的用例?问
2020-12-22 11:50:12
559
原创 BPF 文档
BPF Drgn工具drgn脚本是一种方便且易于使用的机制,可以检索任意内核数据结构。 drgn不依赖内核UAPI读取数据。相反,它直接从/ proc / kcore或vmcore中读取,并根据来自vmlinux的DWARF调试信息漂亮地打印数据。本文档介绍了与BPF相关的drgn工具。有关当前可用的所有工具,请参阅drgn / tools;有关drgn本身的更多详细信息,请参阅drgn / doc。bpf_inspect.py描述bpf_inspect.py是用于检查BPF程序和map的工具。
2020-12-21 15:41:13
556
翻译 BPF类型格式BTF
@[TOC](BPF)这是包含BPF(Berkeley Packet Filter)功能的文档,重点放在扩展的BPF版本(eBPF)上。该内核方面的文档仍在开发中。 (出于历史原因)主要文本文档在Linux套接字过滤(又称为Berkeley数据包过滤器(BPF))中进行了描述。该文档描述了经典BPF和扩展BPF指令集。 Cilium项目还维护着一个BPF和XDP参考指南,该指南对BPF体系结构有很深的技术深度。bpf syscall的主要信息可在bpf(2)的手册页中找到。BPF类型格式(BTF)
2020-12-21 15:38:06
2297
原创 编译内核是需要签名
模块签名在编译5.4内核是需要签名文件,查了好久,解决了,记录下:环境是:Redhat8.2kvm 虚拟机make menuconfig配置签名文件是这俩个CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"CONFIG_SYSTEM_TRUSTED_KEYRING=yCONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"make -j出现了make[2]: *** No rule to make target
2020-12-17 08:50:43
3191
原创 container_of()宏
container_of前言表达式中的语句typeof()零指针取消引用offsetof(st, m)放在一起前言看内核源码时经常遇到这个宏,现在解释一下这个,记录备查。第一张图说明了container_of(ptr, type, member)宏的原理#define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mptr = (
2020-12-09 14:13:31
126
翻译 Slab Allocator
SlabCachesunderstand是基于2.6的这本书比较有年代了,学习基本思想后看最新代码,应该会好点,记录下备用。在本章中,将描述通用分配器。它是一个slab分配器,在许多方面与Solaris [MM01]中使用的通用内核分配器非常相似。 Linux的实现很大程度上基于Bonwick [Bon94]的第一份slab分配器文件,其许多改进与他在其后一篇论文[BA01]中所述的非常相似。我们将首先快速了解分配器,然后在深入介绍分配器负责的每个任务之前,先描述所使用的不同结构。slab分配器的基
2020-12-07 16:47:56
278
原创 find-debuginfo说明
find-debuginfo最近在编译linux kernel 但是内核版本yijing/usr/lib/rpm/find-debuginfo.sh
2020-12-02 10:34:58
1664
原创 禁用rsyslog速率限制
io流调试的时候遇到了丢日志问题,找了下解决方案,记录下来方便后面查看rsyslogd[1480]: imjournal: 2666926 messages lost due to rate-limiting (20000 allowed within 600 seconds)禁用rsyslog速率限制Redhat / CentOS 6和其他Linux发行版使用rsyslog代替syslog。在rsyslogv.5中,默认情况下启用日志消息的速率限制。另外,systemd-journald对日志记录
2020-11-26 15:38:36
1967
2
原创 如何在以下位置执行脚本%pre, %post, %preun or %postun 安装/升级rpm时的阶段(规格文件)
rpmbuild的spec文件spec脚本安装rpm升级rpm删除rpm最终规格文件安装rpm升级rpm卸载rpmRPM规范文件有几个部分,这些部分允许软件包在安装和删除时运行代码。这些代码位称为scriptlet,主要用于用软件包中的信息更新正在运行的系统。调用脚本时,将为它们提供一个参数。通过$1(对于shell脚本)访问的此参数是该名称的软件包的数目,该数目将在操作完成时保留在系统上所有脚本必须以0退出状态退出。spec脚本%pre和%post中的scriptlet分别在安装软件包之前和之后
2020-11-23 09:50:34
3119
1
翻译 C程序的编译步骤和内存布局
如果您对嵌入式系统不熟悉,显然已经有人问过这个问题。程序的编译过程和内存布局分别是什么阶段。因此,在本教程中,我们将讨论C程序的编译步骤和内存布局。内存分布C程序的编译步骤和内存布局C的编译步骤预处理或预编译汇编组合链接C程序的内存布局文字或代码段数据段初始化数据段未初始化的数据段栈段堆段未映射或保留的细分ExampleC程序的编译步骤和内存布局C的编译步骤通常,编译C程序是一个多阶段的过程,并使用不同的“工具”。Preprocessing 预处理Compilation 汇编Assembly
2020-11-19 21:28:31
362
翻译 Kernel thread in linux
kthread进程线程线程管理线程类型用户态线程内核态线程内核线程管理函数Create Kernel Thread 创建内核线程kthread_create进程程序的执行实例称为进程。有些操作系统使用术语“任务”来指正在执行的程序。过程是一个重量级的过程。流程之间的上下文切换非常耗时。线程线程是一个独立的控制流,它与进程中的其他独立控制流在同一地址空间内运行。一个进程可以有多个线程,每个线程并发执行不同的代码,同时共享数据和同步比协作进程要容易得多。线程比进程需要更少的系统资源,并且可以更快地启
2020-11-19 20:38:14
446
翻译 Completion in linux
Completion先决条件CompletionCompletion in Linux Device Driver初始化completion静态方法动态方法重新初始化完成等待完成wait_for_completionwait_for_completion_timeoutwait_for_completion_interruptiblewait_for_completion_killablewait_for_completion_killable_timeouttry_wait_for_completion唤
2020-11-18 18:53:42
255
翻译 Waitqueue in Linux
本文是Linux设备驱动程序系列的续篇,并对字符驱动程序及其实现进行了讨论。这是Linux设备驱动程序教程的第10部分。现在,我们将讨论Linux中的Waitqueue。Waitqueue in LinuxLinux中的等待队列介绍初始化等待队列静态方法动态方法排队wait_eventwait_event_timeoutwait_event_cmdwait_event_interruptiblewait_event_interruptible_timeoutwait_event_killable唤醒等待的
2020-11-17 18:51:31
215
翻译 linux kernel 等待队列
Linux内核中的“等待队列”是一种数据结构,用于管理正在等待某种条件变为真的线程。它们是线程在内核空间中阻塞(或“睡眠”)的正常方法。多年来,等待队列机制已经发展成为一个相当复杂和复杂的内核子系统。但是,现在可以使用为实时树开发的等待队列变体来简化该代码。结果可能是内核中大量的代码搅动。看一下<linux/wait.h> from the 2.0 kernel揭示了一个简单的数据结构:等待线程的基本链接列表。等待队列上的wake_up()调用将遍历列表,从而使每个线程进入可运行状态。没有比这
2020-11-17 10:04:32
431
转载 SourceInsight加载Linux内核.config配置,进行内核代码条件编译解析
最近在用Source Insight(以下简称SI)阅读代码的过程中,发现Linux内核的条件编译太多了,很影响阅读效率。探索了一下SI的界面,发现在“Project->Project Settings…->Conditional Parsing->Conditions…”是有条件解析的配置的,且支持以特定的xml格式导入预编译宏。于是写了一个转换脚本,把Linux内核的.config配置文件转换成SI的.conditions.xml配置文件。导入之后就可以让SI不解析实际上没有被编译进去
2020-11-11 19:39:41
1075
翻译 gmock-cookbook.md
@TOC您可以在此处找到使用Google Mock的使用教程。如果还没有请先阅读[ForDummies](ForDummies.md)文档,以确保您了解基础知识。
2020-11-10 18:02:29
1003
翻译 gmock -ForDummies.md
ForDummies.md什么是Google C ++模拟框架?为什么选择Google Mock?入门模拟Turtles 用例#编写模拟类如何定义放在哪里在测试中使用模拟结合使用Google Mock和任何测试框架设定期望一般语法匹配者:我们期望什么参数?基数:将被调用多少次?行动:该怎么办?使用多重期望有序与无序调用所有期望都是粘性的(除非另有说明)##无趣的调用(注意: 如果遇到不了解的编译器错误,请务必咨询 Google Mock Doctor.)什么是Google C ++模拟框架?当您编写原
2020-11-10 17:10:32
324
翻译 Linux Kernel Selftests
内核自测运行自检(热插拔测试以受限模式运行)运行部分自测运行全方位热插拔自测安装自检运行已安装的自测贡献新测试Example帮助操作内核在tools/testing/selftests/目录下包含一组“self tests”。这些旨在作为小型测试,以练习内核中的各个代码路径。测试旨在在构建,安装和引导内核之后运行。在某些系统上,热插拔测试可能永远挂起,以等待CPU和内存准备好脱机。创建一个特殊的热插拔目标以运行所有范围的热插拔测试。在默认模式下,热插拔测试在有限范围内的安全模式下运行。在受限模式下,cp
2020-11-05 17:16:58
2629
原创 Slab分配接口
Slab Allocator Interface创建新的缓存例子Slab Allocator Interface)创建新的缓存/* * kmem_cache_create_usercopy - 创建一个缓存. * @name: 一个用于 /proc/slabinfo识别此缓存. * @size: 要在此缓存中创建的对象的大小。 * @align:对象所需的对齐方式。 * @flags: SLAB标志 * @useroffset: 用户复制区域偏移 * @usersize:用户复制区域大小
2020-11-05 14:38:11
314
翻译 Out Of Memory Management
因为在开发过程中遇到了OOM 所以想要信息理解一下这个OOM 到底是真么回事,然后就找到了这篇文章,为了自己学习,所以翻译一下,以备后面查看:Out Of Memory Management内存不足管理检查可用内存确定OOM状态选择过程杀死选定的进程kernel 2.6.Out Of Memory Management内存不足管理我们要讨论的VM的最后一个方面是内存不足(OOM)管理器。这本章很短,因为它只有一个简单的任务。检查是否有足够的可用内存来满足需求,确认系统确实内存不足,如果是,请选择要终
2020-11-03 11:47:25
217
原创 redhat8设置kdump不生效问题
kdump配置解决oom杀死crash进程开机后设置kdump第二内核如果生成的crash 过大 在/etc/kdump.conf设置然后重启kdumpe服务测试生成 coredump最近开发内核过程中Redhat8 不能生成coredump 所以自己研究了下规避解决了:以下是配置,记录下方便后续查看。解决oom杀死crash进程kernel.panic = 10kernel.panic_on_io_nmi = 0kernel.panic_on_oops = 1kernel.panic_on_r
2020-11-03 08:29:42
939
翻译 内存映射
Memory mapping目标关键字:总览用于内存映射的结构struct pagestruct vm_area_structstruct mm_struct设备驱动程序内存映射Exercises1.将连续的物理内存映射到用户空间2.将不连续的物理内存映射到用户空间3.映射内存中的读/写操作4.显示在procfs中映射的内存目标了解地址空间映射机制了解与内存管理相关的最重要的结构关键字:address spacemmap()struct pagestruct vm_area_struc
2020-10-31 15:58:18
647
原创 非阻塞io之 epoll内核实现
epoll创建epollFdepollFD文件描述符的回调实现epoll_ctl 系统调用epoll_ctl的系统调用实现epoll_wait系统调用由于需要实现一个驱动想封装出epoll的设备,在网上找关于epoll的信息,好少所以自己看了内核的代码了解以下epoll机制,做个总结以便自己后面查看。/* * 这个结构存储在`struct file`结构的 "private_data"成员中,也是eventpoll接口的主要数据结构。 * 访问它受到 wq 内部锁的保护。 */struct ev
2020-10-21 17:49:46
504
原创 windows下git提交避免提交dos文件
git config --global core.eol lf<!--将自动转换关闭,避免转换失败不能不同进行提交-->git config --global core.autocrlf false<!--禁止混用 lf 和 crlf 两种换行符-->git config --global core.safecrlf true
2020-10-15 14:58:02
302
原创 linux之eventfd机制-epoll
eventfd机制机制结构体创建eventfdeventfd的操作集show_fdinfoeventfd_releaseeventfd_pollreadwritenoop_llseek最近在看linux内核驱动,想实现一个支持epoll的机制,看到了eventfd机制,所以就自己记录下eventfd的机制和心得。机制eventfd是一个将内存作为虚拟文件来操作的文件描述符。在创建eventfd的时候会通过fd = anon_inode_getfd("[eventfd]", &eventfd_
2020-10-12 14:47:51
2078
翻译 strace
strace是 Linux 的诊断、调试和教学用户空间实用程序。它用于监视和篡改进程和 Linux 内核之间的交互,包括系统调用、信号传递和进程状态的更改。系统管理员、诊断员和故障处理者会发现,解决源不易可用的程序的问题非常宝贵,因为它们不需要重新编译以跟踪它们。层的操作是由被称为ptrace的内核功能使。一些功能附加到已正在运行的进程。$ strace -p 26380strace: Process 26380 attached...按系统调用类型进行筛选。-e trace=%desc
2020-10-09 09:41:38
465
翻译 qemu-system-x86_64(1)-Linux手册页
qemu-system-x86_64名称概要描述选项printf ``letmein'' > mypasswd.txt # qemu-system-x86_64 -object secret,id=sec0,file=mypasswd.txt,format=rawqemu-system-x86_64:QEMU版本4.2.0用户文档qemu-system-x86_64在Linux中 显示手册的命令:$ man 1 qemu-system-x86_64名称qemu-doc-QEMU版本4.
2020-10-08 18:27:11
10422
2
原创 设计模式之组件协作--策略模式c++
策略模式组件协作模式动机定义总结:组件协作模式现代软件专业分工之后的第一个结果是“框架与应用程序的划分”,“组件协作”模式通过晚绑定(就是多态),来实现框架与应用程序之间的松耦合,是二者之间协作时常用的模式经典模式Template Method 模板方法模式strategy 策略模式observer/event 事件模式动机在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。如
2020-10-08 17:04:42
235
2
原创 hexedit详解
最近在看内核地址转换相关的内容 用到了 hexedit 发现 没有相关的说明,所以自己学习后简单写一下hexedit(1) - Linux man pagehexedit 是查看和编辑十六进制或 ASCII 文件的工具hexedit [-s | --sector] [-m | --maximize] [-h | --help] [filename]Hexedit 同时以 ASCII 和十六进制显示文件。文件可以是一个设备,因为文件是一次读取一个片段。您可以修改文件并在其中搜索。可选操作:-s,
2020-09-29 18:25:56
26931
原创 C语言的按位运算详解
按位与运算符(&)参加运算的两个数据,按二进制位进行“与”运算。运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;即:两位同时为“1”,结果才为“1”,否则为0例如:3&5 即 0000 0011& 0000 0101 = 00000001 因此,3&5的值得1。就是求俩个数的交集交集: 以属于A且属于B的元素为元素的集合称为A与B的交(集),记作A∩B(或B∩A),读作“A交B”(或“B交A”
2020-09-29 12:01:45
8267
原创 用户态进程的虚拟地址如何转换成物理地址
用户态进程的虚拟地址如何转换成物理地址用户态进程的虚拟地址如何转换成物理地址?mmapmmap基础概念mmap内存映射原理mmap详解UMA和NUMA:mmap优点总结mmap相关函数用户态进程的虚拟地址如何转换成物理地址?区分一个进程,我们都知道最简单就是进程的pid。我们就从(pid,virtualaddress)来看看如何将一个进程的虚拟地址转换为物理地址phyaddress。首先根据pid我们可以得到这个进程的task_struct,进而通过task_struct得到mm,通过mm得到pg
2020-09-29 09:13:16
3274
1
原创 内存管理之remap_pfn_range
定义在v4.19.133 /mm/memory.cint remap_pfn_range(struct vm_area_struct *, unsigned long addr, unsigned long pfn, unsigned long size, pgprot_t);/** * remap_pfn_range - 映射内核内存到用户空间 * @vma: user vma to map to * @addr: target user address to start at * @
2020-09-27 15:38:33
2269
原创 内存管理之页转换 virt_to_page
3项技术:mmap系统调用可以实现将设备内存映射到用户进程的地址空间。使用get_user_pages,可以把用户空间内存映射到内核中。DMA的I/O操作,使得外设具有直接访问系统内存的能力。kernel 5.8.11/arch/x86/include/asm/page.h#ifndef __va#define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET))#endif#define __boot_va(x) __va(.
2020-09-25 14:42:55
3448
kdump_usage_and_internals.pdf
2020-11-02
ch15-memory-mapping-and-dma.rar
2020-10-31
linux kernel map
2020-09-24
Efficient IO with io_uring
2020-09-23
2工业园区5G专网部署白皮书.pdf
2020-08-31
5G小基站的发展现状和四大关键技术介绍.pdf
2020-08-31
draw.io-13.6.2.exe
2020-08-26
drawio-desktop-13.6.2.tar.gz
2020-08-25
全球未来网络发展白皮书(2020版)-V8.9.pdf
2020-08-21
中国电信5G项目工程安装一页纸(A9611).pdf
2020-08-12
5GNSA无线网络优化研讨.pptx
2020-08-07
5g:2020-2030 十大趋势.pdf
2020-03-31
5g八大关键技术.pdf
2020-03-31
Multi-Rail+Scope+and+Requirements+Document.pdf
2020-03-31
Multi-Rail_High-Level_Design_20150119.pdf
2020-03-31
Linux.Virtual.Filesystem.pdf
2020-01-22
BeeGFS介绍高可用框架读写流程文件分布系统管理说明
2019-02-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人