自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Qixuan.wu的专栏

Qixuan.wu的技术世界

  • 博客(28)
  • 收藏
  • 关注

原创 Linux内核追踪[4.14] 网络报文send的ZERO-COPY(零拷贝)

ZERO-COPY对于有性能要求的大数据报文的网络应用来说是一个比较好的优化思路。在之前的内核中,ZERO-COPY只发生在sendfile、splice接口中。send接口无法做到ZERO-COPY。因此通用send 接口进行大报文发送的应用性能仍然有提升空间。

2017-11-21 00:16:59 2360

原创 Linux 4.14 特性汇总

Linux内核追踪[4.14] X86的5级页表管理持续更新中......参考:更完整的版本:https://kernelnewbies.org/Linux_4.14所有Linux历史版本:https://kernelnewbies.org/LinuxVersions

2017-11-15 22:21:33 2985

原创 Linux内核追踪[4.14] X86的5级页表管理

X86的4级页表已经能够管理48bit(256TB)的VA,以及64TB的PA。不过由于某些供应商发布了超过64T的超大物理内存,因此需要实现了一个5级页表特性来进行支持。下面是原来4级页表的48bitVA地址空间,原先的X64芯片规定,高8位永远与第48bit(从0开始算即47bit)相同。因此从硬件上只使用4级页表。

2017-11-15 21:52:17 2708

原创 【CGROUP】10分钟深入理解cgroup与css之间的多对多的关系

这就是经典的cgroup与css之间的多对多关系,它们之间的联系依靠cg_group_link对象组织在一起,每一个css与cgroup的配对都会有一个cg_cgroup_link对象。

2017-10-26 23:23:07 445

原创 【CGROUP】10分钟深入理解CGROUP V1本质

本文作为cgroup内核代码的开篇文档,只介绍cgroup的设计理念,不介绍具体代码。理解了本文即理解了cgroup的核心思想,可以更容易地理解其它cgroup的源码分析文章。文中出现的内核源码来源于4.14.4版本。一、资源的树型管理  CGROUP是拥有共同资源属性的任务的集合,用来控制一组任务拥有多少资源可用。内核中有多种资源(称为子系统,参考struct cgroup_subs

2017-10-26 23:23:04 1188

原创 Linux 4.13 特性汇总

Linux内核追踪[4.13] AIO的非阻塞优化 Linux内核追踪[4.13] Blk层的出错处理优化Linux内核追踪[4.13] Linux Kernel TLS持续更新中......参考:更完整的版本:https://kernelnewbies.org/Linux_4.13所有Linux历史版本:https://kernelnewbies.org/

2017-10-26 00:08:49 364

原创 Linux内核追踪[4.13] Linux Kernel TLS

内核的4.13版本实现了一个TLS功能(根据 RFC 5288),google员工Dave Watson受到FreeBSD的Netflix的项目启发(FreeBSD网络很强大啊),实现这个功能的初衷是为了优化tls应用协议的性能(略微有一些,作者实测是2-7%)。据他说,google内部的网络协议80%是通过tls加密的。有了这个功能之后,http在用户态不需要加密,只需要纯的http,在内核态封

2017-10-24 22:38:16 833

原创 Linux内核追踪[4.13] Blk层的出错处理优化

之前的版本在IO软件栈中存在着错误信息不能很好地返回FS层或者用户态APP的情况,4.13版本优化了两个场景的错误处理。(参考: https://lwn.net/Articles/724307/)一、Reporting writeback errors        一个场景和异步写相关。之前的版本,由后台线程进行writeback出错时,只能通过提交write的那个task进行f

2017-10-24 22:32:54 788

原创 Linux内核追踪[4.13] AIO的非阻塞优化

AIO被人诟病得较多的是一些读写操作,会经常由于某些条件而阻塞,做不到真正的异步IO。io_submit中会将kiocb->ki_flags成员的IOCB_NOWAIT。之后在FS层(如ext4/xfs/btrfs)和PageCache层,遇到kiocb->ki_flags成员的IOCB_NOWAIT flag在BIO层被转换为了REQ_NOWAIT flag,在遇到该标志且有阻塞时,返回EA

2017-10-24 22:17:32 1000

转载 OSDI, SOSP与美国著名计算机系的调查报告

【序言】按照USnews的分类,Computer Science被分为四个大类:AI, Programming Language, Systems, Theory.。毫无疑问,Systems是这四个大类中最要紧也是最大的一个。根据citeseer在2003年5月排出的所有计算机学科会议和期刊的影响因子排名[1],在前十位中的属于Systems的有7个,在前15个中占据了11个。Syste...

2018-12-16 09:35:16 764

原创 centos镜像安装

下载镜像:http://cloud.centos.org/centos/7/images/   这里下载镜像,注意是qcow2镜像还是raw镜像。https://wiki.centos.org/zh/Download修改img 密码:yum install libguestfs-tools systemctl start libvirtdsudo virt-customize -a CentOS-...

2018-02-12 10:41:36 1694

原创 【安全】10分钟理解Capability本质

让读者可以10分钟理解Capability本质

2017-10-29 16:28:15 1097

原创 微内核相对于单内核优势之我见

我认为微内核相对于单内核上没有明显的技术优势,微内核一般都宣称有如下的技术优势:1. 各服务可以动态加载插入,使内核很小,减少内存。2. 系统非常灵活。当运行一个应用程序时,只需把选定的系统服务加载到系统中即可。而修改了服务以后可以通过联机进行测试;并不需要重新构建或者启动一个新的内核,他们并不影响系统的运行。 3. 各服务地址空间独立,不影响其它模块(如文件系统服务调用内存管理服

2017-10-26 23:22:57 2654

原创 【内存】高端内存映射

高端内存含义为:线性地址空间 PAGE_OFFSET + 896M至4G的最后128M线性地址   896M以上的物理页框,非直接映射。有3种方法:非连续内存区映射,永久内核映射,临时内核映射(固定映射)   从 PAGE_OFFSET开始的线性地址区域为:   PAGE_OFFSET(3G)|物理内存映射 --8M-- vmallot区 --4K-- vmallot区 --8K-

2017-10-26 23:21:26 294

原创 内核的几种内存分配与线性映射方式

1. 内核中获取内存的几种方式      a) 通过伙伴算法分配大片物理内存(分配 【物理页框】)   alloc_pages(gfp_mask, order): 获得连续的页框,返回页描述符地址,是其他类型内存分配的基础。   __get_free_pages(gfp_mask, order): 获得连续的页框,返回页框对应的线性地址。线性地址与物理地址是内核直接映射方式。不能用

2017-10-26 23:21:20 1159

原创 中断,异常,系统调用,进程切换时的堆栈变化和寄存器保存

1. 中断,异常,系统调用相同:   CPU自动压入:  ss            运行级别提升时需切换堆栈,因此多压入用户态的栈段ss,  esp           运行级别提升时需切换堆栈,因此多压入用户态的堆栈指针esp,  eflag  cs  eip  error code  程序压入部分压入如下寄存器:  es  ds

2017-10-26 23:21:17 2868

原创 CPL, 门DPL, 描述符DPL 的关系

1. CPL要通过门(中断门,陷阱门,任务门,调用门)访问一个GDT中的描述符,必须有如下关系:CPL CPL >= DPL (描述符):门只能是用于保持或提升运行级别,因此GDT的描述符中的DPL均为0。如果有提升,则需要进行堆栈切换,如下:  运行级别不变的堆栈值:  eflag  cs  eip  error code  运行级别改变的堆栈值:

2017-10-26 23:21:13 1082

原创 运行级切换和门

只要想切换CPU的运行状态,即其优先级别,就要通过一道门。而从用户态进入系统态的途径也并不限于中断(或异常,或陷阱),还可以通过子程序调用指令CALL/JMP来达到目的。而且当中断发生时还可以安排一次任务切换,叫中断服务进程(任务)。任务门包含有一个TSS段(必须在GDT中)选择码。当CPU因中断而穿过一个任务门,就会将任务门中的段选择码自动装入TR,使TR指向新的TSS,并完成任务切

2017-10-26 23:21:10 175

原创 《Linux内核情景分析》经典解说--进程

get_current 使用宏的原因==================== include/asmi386/current.h 6 13 ====================6 static inline struct task_struct * get_current(void)7 {8 struct task_struct *current;9 __asm__("

2017-10-26 23:21:08 810

转载 Linux进程:Linux切换机制主流程

Linux切换并没有使用X86CPU的切换方法,Linux切换的实质就是cr3切换(内存空间切换,在switch_mm函数中)+ 寄存器切换(包括EIP,ESP等,均在switch_to函数中)。这里我们讲述下switch_to主流程: 在switch_mm函数中将new_task->pgd设置到cr3寄存器中,实现页表切换,由于每个进程3-4G的页表映射机制完全一样(从内核页

2017-10-26 23:21:05 249

转载 关于DPL,CPL与RPL的一个很精妙的解释

1、 CPL是当前进程的权限级别(Current Privilege Level),是cs段中的2、 RPL说明的是进程对段访问的请求权限(Request Privilege Level),意思是当前进程想要的请求权限。3、 DPL存储在段描述符中,规定访问该段的权限级别(Descriptor Privilege Level).下面打一个比方,中国官员分为6级国家主席1、总理2、省长3

2017-10-26 23:21:01 754

原创 轻松理解 struct pid

1. 基本概念每个进程控制块都有4个有关ID、含义不同的值,内核根据它们组成了4个全局的2维的HASH表,每个进程都要链接到这四个不同含义的Hash表当中。/* 4种类型的值*/enum pid_type{    PIDTYPE_PID,   进程的PID    PIDTYPE_TGID,  线程组ID    PIDTYPE_PGID,  进程组ID

2017-10-26 23:20:52 3202 1

转载 DEFINE_PER_CPU(struct runqueue, runqueues)宏

首先,在arch/i386/kernel/vmlinux.lds中有 /* will be freed after init */ . = ALIGN(4096); /* Init code and data */ __init_begin = .; /* 此处省略若干行:) */ . = ALIGN(32); __per_cpu_start = .; .data.per

2017-10-26 23:20:46 669

原创 Linux内核追踪[4.11] perf ftrace

4.11在perf中实现了一个ftrace的功能,其实就是把ftrace的功能集成在perf工具中进行显示。由于原先操作debugfs的接口还是要操作几个文件来配合使用的,比如:    a) 设置/sys/kernel/debug/tracing/current_tracer。    b) 打开开关/sys/kernel/debug/tracing/tracing_on。

2017-10-26 00:17:09 1717

原创 Linux 4.3 特性汇总

Linux内核追踪[4.3] Ext3的终结持续更新中......参考:更完整的版本:https://kernelnewbies.org/Linux_4.3所有Linux历史版本:https://kernelnewbies.org/LinuxVersions

2017-10-26 00:05:23 310

原创 Linux 3.14 特性汇总

Linux内核追踪[3.14] 用户态死锁检测--UserMode lockdep 参考:4.3版本:https://kernelnewbies.org/Linux_4.3 所有Linux历史版本:https://kernelnewbies.org/LinuxVersions

2017-10-25 12:54:29 541

原创 Linux内核追踪[4.3] Ext3的终结

在4.3内核,有可能会合入一个patch:删除ext3文件系统。由于ext3只是ext4的子集,而且从mount的接口上ext4也做了兼容,用户可以完全不感知ext3文件系统已经被删除了。遇到问题,maintainer会继续支持和解决。用户不需要把自己的文件系统升级到ext4格式上。  之所以保留ext2是因为,ext2文件系统非常小,只有10000行代码,因此它与ext4重叠的部分是比较稳定

2017-10-24 22:14:47 275

原创 Linux内核追踪[3.14] 用户态死锁检测--UserMode lockdep

想必大家都用过内核态的lockdep,它有死锁预测的功能。能够在运行态动态地去识别一些潜在的、发生概率较小的(也许一辈子都很难碰到)死锁风险。目前有人把它移植到了用户,并加入到内核主线($root/tools/lib/lockdep)  笔者这里想讲的是它的“移植”方法非常得巧妙,请看看$root/tools/lib/lockdep/lockdep.c的主体函数:#incl

2017-10-24 22:11:16 894

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除