- 博客(96)
- 资源 (126)
- 论坛 (2)
- 问答 (2)
- 收藏
- 关注
转载 Linux内存管理:Swap介绍以及如何使交换具有可扩展性
目录一、swap分区1. swap分区的创建2. swap的数据结构二、swap out1. 回收流程2. swap slot cache3. ssd查找算法三、swap in1. 换入流程2. swapin_readahead四、总结五、使交换具有可扩展性参考材料由于内存和磁盘的读写性能差异较大,Linux会在内存充裕时将空闲内存用于缓存磁盘数据,以提高I/O性能。相对的在内存紧张时Linux会将这些缓存回收,将脏页回写到磁盘中。而在进程的地址.
2020-11-29 21:04:02
102
4
转载 Linux内存管理:一个故事看懂CPU内存管理技术
目录808632位时代虚拟内存分页交换现在往期热门回顾推荐阅读还记得我吗,我是阿Q,CPU一号车间的那个阿Q。今天忙里偷闲,来到厂里地址翻译部门转转,负责这项工作的小黑正忙得满头大汗。看到我的到来,小黑指着旁边的座椅示意让我坐下。坐了好一会儿,小黑才从工位上忙完转过身来,“实在不好意思阿Q,今天活太多,没来得及招待你”“刚忙什么呢,看你满头大汗的”,我问道。“嗨,别提了,老是发现内存页面错误,不停地要通知操作系统那边去处理,真是怀念以前啊,没有这么多.
2020-11-29 20:49:04
52
转载 Linux内存管理:内存寻址之分段机制与分页机制
目录Linux 内存寻址之分段机制前言分段到底是怎么回事?实模式的诞生(16位处理器及寻址)保护模式的诞生(32位处理器及寻址)IA32的内存寻址机制寻址硬件IA32的三种地址MMU地址转化过程IA32的段寄存器分段机制的实现段描述符段描述符表总结Linux中分段的实现总结Linux 内存寻址之分页机制硬件中的分页为什么使用两级页表两级页表结构页目录项页面项线性地址到物理地址的转换扩展分页页面高速缓存Li
2020-11-29 20:42:24
75
转载 什么是MPLS?多协议标签交换(MPLS)基础知识和工作原理
《什么是MPLS?多协议标签交换》简介MPLS的起源90年代中期,IP技术凭借技术简单和成本低廉实现快速发展,Internet数据海量增长。但由于硬件技术存在限制,基于最长匹配算法的IP技术必须使用软件查找路由,转发性能低下,因此IP技术的转发性能成为当时限制网络发展的瓶颈。为了适应网络的发展,ATM(Asynchronous Transfer Mode)技术应运而生。ATM采用定长标签(即信元),并且只需要维护比路由表规模小得多的标签表,能够提供比IP路由方式高得多的转发性能。..
2020-11-29 20:04:57
288
转载 Linux网络协议栈:一个TCP链接的耗时
《一次系统调用开销到底有多大?strace、time、perf命令》目录一 正常TCP连接建立过程二 TCP连接建立时的异常情况1)客户端connect系统调用耗时失控2)半/全连接队列满 -backlog三TCP连接耗时实测1)正常情况2)连接队列溢出四 结论在互联网后端日常开发接口的时候中,不管你使用的是C、Java、PHP还是Golang,都避免不了需要调用mysql、redis等组件来获取数据,可能还需要执行一些rpc远程调用,或者再调用一些其它restf..
2020-11-29 19:50:12
87
转载 一次系统调用开销到底有多大?strace、time、perf命令
《Linux系统调用表》《linux系统调用表(system call table)》《线上环境 Linux 系统调用追踪》《Linux系统调用权威指南》《为什么系统调用会消耗较多资源?系统调用的三种方法:软件中断(分析过程)、SYSCALL指令、vDSO(虚拟动态链接对象linux-vdso.so.1)》《Linux系统调用表:x86和x86_64》目录1 系统调用拾遗2 使用strace命令进行实验3 使用time命令进行实验4 Perf命令查看系统调用消耗的CP
2020-11-29 19:27:55
46
转载 Linux网络协议栈:网络包接收过程
《Linux网络 - 数据包的接收过程》《监视和调整Linux网络协议栈:接收数据》《监控和调整Linux网络协议栈的图解指南:接收数据》《监视和调整Linux网络协议栈:发送数据》《深入理解 Cilium 的 eBPF(XDP)收发包路径:数据包在Linux网络协议栈中的路径》《FD.io VPP:探究分段场景下vlib_buf在收发包的处理(dpdk_plugin.so)、rte_mbuf与vlib_buf 关系》《DPDK 网卡收包流程》《Linux网络协议栈:网卡收包分析
2020-11-29 18:49:28
91
转载 TLB的作用及工作原理,如何查看TLB miss?
目录TLB的作用及工作过程TLB工作原理TLB原理TLB表项全相连 - full associative组相连 - set-associativeTLB表项更新MMU和cache详解(TLB机制)1.MMU2.VA和PA3.VA到PA的映射过程4.CPU访问内存时的硬件操作顺序5.ARM920T支持多种尺寸规格的页表硬件高速缓存和TLB原理基本概念原理如何查看TLB miss?虚拟内存32位系统的虚拟内存实现:二级页表64位系统
2020-11-29 16:27:48
442
转载 Linux内核进程管理:进程的“内核栈”、current宏、进程描述符
目录linux 进程内核栈概念thread_info 有什么用?thread_info 、内核栈、task_struct 关联current 宏1、arm2、ARM643、x86SYSCALL过程调用规范x86_64进程栈切换参考Linux调度——神奇的currentcurrent的作用current的通用实现方法current在x86架构上的实现实验示例Linux调度——进程描述符进程描述符:task_struct推荐阅读.
2020-11-29 15:56:17
74
转载 Linux系统调用表:x86和x86_64
《Linux系统调用表》《linux系统调用表(system call table)》《线上环境 Linux 系统调用追踪》《Linux系统调用权威指南》《为什么系统调用会消耗较多资源?系统调用的三种方法:软件中断(分析过程)、SYSCALL指令、vDSO(虚拟动态链接对象linux-vdso.so.1)》《Linux系统调用表:x86和x86_64》There are some tables like this around, but they are usually cool a
2020-11-29 15:36:10
35
转载 volatile与多线程
目录C/C++中volatile的传统用途保证变量的读写操作直接作用于内存阻止编译器打乱变量之间的读写顺序。阻止编译器对变量做激进的优化。比如直接去掉某变量相关的指令。volatile在多线程中的误用非标准的volatile总结C/C++中volatile的传统用途保证变量的读写操作直接作用于内存即每次读的时候都直接去该变量的内存地址中读,每次写的时候都直接写到该变量的内存地址中去。 看下面的例子,如果没加volatile的话,下面这段代码中变量flag的读操作.
2020-11-28 19:08:52
32
转载 tcmalloc内存分配器分析笔记:基于gperftools-2.4
目录一. SizeMap二. 线程缓存ThreadCacheThreadCache的实现1. 内存分配2. 内存释放三. 中央缓存Central CacheCentralFreeList的实现1.TCEntry tc_slots_[kMaxNumTransferEntries]2.Span nonempty_3. Span empty_4. Span5. CentralFreeList内存分配6. CentralFreeList内存释放...
2020-11-28 16:24:37
43
转载 Understanding glibc malloc - ptmalloc
https://sploitfun.wordpress.com/2015/02/10/understanding-glibc-malloc/comment-page-1/?blogsub=confirming#subscribe-blog%E3%80%82I always got fascinated by heap memory. Questions such asHow heap memory isobtained from kernel?How efficiently memory is.
2020-11-28 16:11:14
28
翻译 内存管理器剖析:ptmalloc,windows,macOS
核心分析器的优势在于它能够将堆内存解析为数百万个单独的内存块,这些内存块由堆内存管理器分配给应用程序。只有掌握了这些知识,Core Analyzer才能检查内存损坏并搜索对象引用。鼓励用户了解基本堆数据结构,以最大程度地利用该工具的好处,并在必要时开发自己的自定义内存管理器支持。我将简要说明Linux / Windows / Mac OS系统运行时内存管理器使用的数据结构。它们是开源的或反向工程的。您可以在项目的源文件,Linux内核源代码或许多在线网站中找到更多详细信息。由于操作系统供应商...
2020-11-28 16:07:42
42
转载 TCMalloc内存分配器如何减少内存碎片?
目录前言什么是内存碎片?内存碎片-Freelist内存碎片-Segregated-Freelist内存碎片-Buddy-System内存分配算法的比较TCMalloc的内存碎片TCMalloc的外部碎片size-class的合并size到size-class总结参考推荐阅读前言前文说到 TCMalloc 的基本原理,ThreadCache、PageHeap、PageMap之类的,有了这些组件,基本算的上一个现代化的内存分配器了。但对于 TCM.
2020-11-24 22:45:53
47
2
转载 ptmalloc、tcmalloc与jemalloc内存分配器对比分析
目录背景介绍ptmalloc系统向看ptmalloc内存管理用户向看ptmalloc内存管理线程中内存管理Chunk说明tcmalloc系统向看tcmalloc内存管理用户向看tcmalloc内存管理tcmalloc的优势jemalloc系统向看jemalloc内存管理用户向看jemalloc内存管理jemalloc的优势总结文献资料推荐阅读参考链接背景介绍在开发微信看一看期间,为了进行耗时优化,基础库这层按照惯例使用tc.
2020-11-24 22:22:28
173
6
翻译 TCMalloc:线程缓存Malloc以及tcmalloc与ptmalloc性能对比
目录动机用法总览小对象分配大对象分配跨度解除分配小型物品中央free清单线程缓存的垃圾收集性能说明PTMalloc2单元测试注意事项Paul Menage的Sanjay Ghemawat <opensource@google.com>动机TCMalloc比我测试过的glibc 2.3 malloc(可称为ptmalloc2的独立库)和其他malloc更快。ptmalloc2在2.8 GHz P4上(用于小型对象)执行malloc .
2020-11-24 22:08:21
60
1
转载 jemalloc内存分配器简介
目录JeMalloc基础知识size_class - jemalloc 分配的内存大小base - jemalloc 元数据内存的结构bin -使用中的slab集合extent -管理 jemalloc 内存块的结构slab -用于分配small_class内存extents -管理extent的集合arena -用于分配&回收extent的结构rtree -存放每个extent信息的Radix Treecache_bin...
2020-11-24 21:54:28
89
转载 图解tcmalloc内存分配器
目录前言如何分配定长记录?如何分配变长记录?大的对象如何分配?Span如何分配?从Page到SpanPageHeap全局对象分配ThreadCache总结参考推荐阅读前言TCMalloc是 Google 开发的内存分配器,在不少项目中都有使用,例如在 Golang 中就使用了类似的算法进行内存分配。它具有现代化内存分配器的基本特征:对抗内存碎片、在多核处理器能够 scale。据称,它的内存分配速度是 glibc2.3 中实现的 malloc的数..
2020-11-24 21:43:34
37
1
翻译 使用jemalloc在Go中进行手动内存管理
目录通过Cgo创建内存jemalloc在字节片上放置Go结构用分配器摊销Calloc的成本明智地参考处理分配的GB排序可变长度数据捕捉内存泄漏结论推荐阅读曼尼斯·赖·贾因(Manish Rai Jain)自2015年成立以来,Dgraph Labs一直是Go语言的用户。五年之后,Go代码达到20万行,我们很高兴地报告,我们仍然坚信Go是并且仍然是正确的选择。我们对Go的兴奋不仅限于构建系统,还使我们甚至可以使用Go编写脚本,这些脚本通常是用Bash..
2020-11-24 20:54:04
75
转载 Linux内存管理:ARM64体系结构与编程之cache(3):cache一致性协议(MESI、MOESI)、cache伪共享
目录为什么系统软件人员要深入了解cache?cache一致性协议神马是MESI协议?MESI的操作MESI状态图演示:初始化状态为I的cache line当本地CPU的缓存行状态为I时,发起读操作当本地CPU的缓存行状态为I时,收到一个总线读的信号当初始化状态为I时,发起写操作当本地CPU的缓存行状态为I时,收到一个总线写的信号演示:初始化状态为M的cache line收到一个总线读的信号收到一个总线写的信号演示:初始化状态为S的cache line
2020-11-21 23:52:34
144
转载 Linux虚拟化KVM-Qemu分析(六)之中断虚拟化
《Linux虚拟化KVM-Qemu分析(一)》《Linux虚拟化KVM-Qemu分析(二)之ARMv8虚拟化》《Linux虚拟化KVM-Qemu分析(三)之KVM源码(1)》《Linux虚拟化KVM-Qemu分析(四)之CPU虚拟化(2)》《Linux虚拟化KVM-Qemu分析(五)之内存虚拟化》《Linux虚拟化KVM-Qemu分析(六)之中断虚拟化》《在CentOS上进行虚拟化:QEMU、Xen、KVM、LibVirt、oVirt》《ARM SMMU原理与IOMMU技术(“V
2020-11-21 22:13:06
63
1
转载 Linux I/O原理和零拷贝Zero-copy技术全面揭秘
目录导言计算机存储器物理内存虚拟内存静态重定位存储器抽象交换(swapping)技术虚拟内存技术用户态和内核态Linux I/OI/O 缓冲区I/O 模式程序控制 I/O中断驱动 I/ODMA I/O传统 I/O 读写模式零拷贝 (Zero-copy)Zero-copy 是什么?Zero-copy 能做什么?Zero-copy 的实现方式有哪些?mmap()sendfile()sendfile() with DMA S
2020-11-21 20:34:14
334
2
原创 DPDK 20.05 | rte_pci_bus思维导图 | 第一版
rte_pci_bus结构如下:struct rte_pci_bus rte_pci_bus = { .bus = { .scan = rte_pci_scan, .probe = pci_probe, .find_device = pci_find_device, .plug = pci_plug, .unplug = pci_unplug, .parse = pci_parse, .dma_map = pci_dma_map, .dma_unmap = p...
2020-11-21 18:03:35
67
转载 Linux虚拟文件系统:数据结构与文件系统注册、文件打开读写
数据结构超级块 - super_block 索引节点 - inode 目录项 - dentry 文件结构 - file虚拟文件系统实现注册文件系统 -register_filesystem 打开文件 -sys_open 读写文件 -sys_read、sys_write目录虚拟文件系统抽象数据结构超级块(super block)索引节点(inode)目录项(dentry)文件结构(file)虚拟文件系统的实现注册文件系统打开文件读写文件推荐阅...
2020-11-21 17:59:03
43
1
转载 Linux文件系统IO:直接IO原理与实现:缓存I/O、直接I/O
目录缓存I/O缓存I/O的优缺点直接I/O直接I/O实现 -direct_IO(),brw_kiovec()推荐阅读缓存I/O一般来说,当调用open()系统调用打开文件时,如果不指定O_DIRECT标志,那么就是使用缓存I/O来对文件进行读写操作。我们先来看看open()系统调用的定义:int open(const char *pathname, int flags, ... /*, mode_t mode */ );下面说明一下各个参数的作用:...
2020-11-21 17:41:23
63
转载 Linux虚拟内存管理 | 虚拟地址与物理地址映射、段错误SIGSEGV
Linux的内存管理分为虚拟内存管理和物理内存管理,本文主要介绍虚拟内存管理的原理和实现。在介绍虚拟内存管理前,首先介绍一下x86 CPU内存寻址的具体过程。x86 内存寻址Intel x86 CPU把内存地址分为3种:逻辑地址、线性地址和物理地址。逻辑地址:由段寄存器:偏移量组成(段寄存器为16位,偏移量为32位),偏移量是应用程序能够直接操作的地址,比如在C语言中使用&操作符取得的变量地址就是逻辑地址。 线性地址:也称为...
2020-11-21 17:35:01
70
原创 华为ICT大赛 | 官网 报名入口 赛事视频
官方网址:https://e.huawei.com/topic/ict-competition-2020/cn/index.html预约网址:https://events02.huawei.com/custom/ICTRegisterCn/register/232842045/register.htmlICT,全称Information Communications Technology。华为ICT大赛是华为打造的面向全球大学生的年度例行ICT赛事,为华为ICT学院和有意愿成为ICT学院的.
2020-11-21 16:26:18
178
转载 Linux文件系统与持久性内存介绍:块设备、闪存(NAND/NOR)、NVDIMM(非易失性内存)、PMEM(PMDK)- ndctl
《持久内存开发套件(Persistent Memory Development Kit-PMDK) - pmem.io: PMDK》《PMDK介绍》《PMDK(NVML)事务实现机制源码分析》目录1、Linux 虚拟文件系统介绍1.1、硬件层面1.2、内核空间层面2、下一代存储技术NVDIMM2.1、种类NVDIMM-NNVDIMM-FNVDIMM-P2.2、硬件支持写的原子性高效的缓存刷新(flushing)提交至持久性内存(Committing
2020-11-20 21:39:44
451
转载 Linux内存管理:反向映射机制(匿名页,文件页和ksm页)
目录1.反向映射的发展2.反向映射应用场景3.匿名页的反向映射4.文件页的反向映射5.ksm页的反向映射6.总结7.作者简介8.推荐阅读为了系统的安全性,Linux内核将各个用户进程运行在各自独立的虚拟地址空间,用户进程之间通过虚拟地址空间相互隔离,不能相互访问,一个进程的奔溃不会影响到整个系统的异常也不会干扰到系统以及其他进程运行。Linux内核可以通过共享内存的方式为系统节省大量内存,例如fork子进程的时候,父子进程通过只读的方式共享所有的私有页面。再比如.
2020-11-20 20:58:51
108
1
原创 Linux四种共享内存技术(附源码):SystemV、POSIX mmap、memfd_create、dma-buf
《Linux 下的进程间通信:管道、消息队列、共享文件、共享内存》《【共享内存】基于共享内存的无锁消息队列设计》《File Sealing & memfd_create() | 文件密封和memfd_create()》《Linux环境无文件渗透执行ELF:memfd_create、ptrace》《利用ptrace和memfd_create混淆程序名和参数》《宋宝华:世上最好的共享内存(Linux共享内存最透彻的一篇)》先给出宋宝华老师的结论:目录共享内存的方式
2020-11-20 20:36:24
114
1
翻译 File Sealing & memfd_create() | 文件密封和memfd_create()
File Sealing & memfd_create()From: David Herrmann <dh.herrmann@gmail.com> To: linux-kernel@vger.kernel.org Subject: [PATCH 0/6] File Sealing & memfd_create() Date: Wed, 19 Mar 2014 20:06:45 +0100 Mess...
2020-11-20 14:56:15
92
1
转载 利用ptrace和memfd_create混淆程序名和参数
《GDB调试之ptrace实现原理》《C语言程序调用栈:backtrace+backtrace_symbols+backtrace_symbols_fd》《strace实现原理:ptrace系统调用》《Linux环境无文件渗透执行ELF:memfd_create、ptrace》《利用ptrace和memfd_create混淆程序名和参数》目录说明源代码运行结果原理分析fork创建子进程父进程调试子进程修改子进程总结参考说明在linux环境.
2020-11-20 13:34:31
52
1
转载 Linux环境无文件渗透执行ELF:memfd_create、ptrace
《GDB调试之ptrace实现原理》《C语言程序调用栈:backtrace+backtrace_symbols+backtrace_symbols_fd》《strace实现原理:ptrace系统调用》《Linux环境无文件渗透执行ELF:memfd_create、ptrace》《利用ptrace和memfd_create混淆程序名和参数》目录说明MEMFD_CREATEptracelseekmemfd_createexecveELF in-memory exe
2020-11-20 13:31:27
135
1
转载 Linux内存管理:ARM64体系结构与编程之cache(2):cache一致性
《Linux内存管理:ARM64体系结构与编程之cache(1)》《Linux内存管理:ARM64体系结构与编程之cache(2)》《ARM SMMU原理与IOMMU技术(“VT-d” DMA、I/O虚拟化、内存虚拟化)》《内核引导参数IOMMU与INTEL_IOMMU有何不同?》《提升KVM异构虚拟机启动效率:透传(pass-through)、DMA映射(VFIO、PCI、IOMMU)、virtio-balloon、异步DMA映射、预处理》目录为什么系统软件人员要深入了解cache
2020-11-19 22:33:27
309
2
转载 Linux内存管理:ARM64体系结构与编程之cache(1)
《Linux内存管理:ARM64体系结构与编程之cache(1)》《Linux内存管理:ARM64体系结构与编程之cache(2)》《ARM SMMU原理与IOMMU技术(“VT-d” DMA、I/O虚拟化、内存虚拟化)》《内核引导参数IOMMU与INTEL_IOMMU有何不同?》《提升KVM异构虚拟机启动效率:透传(pass-through)、DMA映射(VFIO、PCI、IOMMU)、virtio-balloon、异步DMA映射、预处理》目录为什么系统软件人员要深入了解cache
2020-11-19 22:19:27
258
转载 Linux系统调用表(system call table)
《Linux系统调用表》《linux系统调用表(system call table)》《线上环境 Linux 系统调用追踪》《Linux系统调用权威指南》《为什么系统调用会消耗较多资源?系统调用的三种方法:软件中断(分析过程)、SYSCALL指令、vDSO(虚拟动态链接对象linux-vdso.so.1)》系统调用号 函数名 入口点 源码 0 read sys_read fs/read_write.c 1 write sys_wri
2020-11-19 21:22:31
51
1
转载 strace实现原理:ptrace系统调用
《GDB调试之ptrace实现原理》《C语言程序调用栈:backtrace+backtrace_symbols+backtrace_symbols_fd》目录strace是什么?ptrace系统调用运行被跟踪程序编写跟踪进程代码获取进程寄存器的值strace是什么?按照strace官网的描述, strace是一个可用于诊断、调试和教学的Linux用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。strace底层使用内核的p
2020-11-19 21:19:11
179
转载 利用jemalloc分析内存泄漏以及LD_PRELOAD
《Linux环境下的LD_PRELOAD:库预加载》GitHub代码:https://github.com/Rtoax/test/tree/master/jemalloc目录InstallGetting StartedLeak CheckingJemalloc不仅实现了一种通用的malloc, 还能利用它来做内存分析和监控/调优等.这里介绍如何利用jemalloc来检测内存泄漏问题. 并且利用LD_PRELOAD环境变量, 可以做到不需要源代码, 将jemalloc库嵌入..
2020-11-19 21:05:35
190
转载 Linux进程管理:进程和线程基础知识
《Linux进程管理:进程和线程基础知识》《Linux-进程管理》《C语言进程的内存地址空间分配》《进程和线程模型》《(1)Linux进程调度》《(2)Linux进程调度器-CPU负载》《(3)Linux进程调度-进程切换》《(4)Linux进程调度-组调度及带宽控制》《(5)Linux进程调度-CFS调度器》《(6)Linux进程调度-实时调度器》《Linux内核:进程上下文切换》《REAL-TIME(SCHED_FIFO和SCHED_RR)进程会导致系统LOC
2020-11-18 22:14:40
80
MPI, OpenMP, CUDA, OpenCL, OpenACC,
2018-06-03
中国电信DPDK技术白皮书.pdf
2020-10-25
OpenCV自带视频测试文件vtest.avi
2018-05-04
C Reference Manual.pdf
2019-08-04
Virtual Memory and Linux - AlanOtt.pdf
2020-11-10
Aarch64 Kernel Memory Management.pptx
2020-11-08
LKM:Linux Kernel Map(图解Linux内核)PDF,SVG,PNG格式
2020-11-01
The BSD Packet Filter A New Architecture for User-level Packet Capture.pdf
2020-10-30
XDP_DDoS_protecting_osd2017.pdf
2020-10-10
极简化的TCP/UDP测试工具-吞吐量
2020-07-22
Linux内核图解LKM.pdf
2020-04-04
vxworks-product-overview.pdf
2020-02-23
conf20200210.darkTheme.xml
2020-02-10
C语言如何从源函数中获取指向它的函数指针的地址
发表于 2020-05-21 最后回复 2020-06-15
Koma_Wong的留言板
发表于 2020-01-02 最后回复 2020-03-08
谁知道这个模板用法是什么意思
2019-03-31
C语言如何将字符串“int”转化为int类型
2019-01-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人 TA的粉丝