自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

白杨谷的博客

努力向底层钻研的小学渣

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

转载 vring

vring

2023-02-20 18:06:53 307

原创 Hardware - MMU

MMU简介

2022-11-29 11:22:07 186

原创 Intel CPU Power Management

Linux中CPU频率那点事

2022-05-09 19:03:28 4657

原创 计算机I/O子系统

之前在看Linux的内存管理时,想到一个问题,就是内存中的数据是如何写入到硬盘的呢?这个过程是怎样的呢?为了回答这个问题,我们先以最简单的方式来概述I/O访问的过程。

2022-01-21 20:17:36 665

原创 linux kernel arguments for performance tuning

init=/lib/systemd/systemd ro loglevel=3 quiet no-vmw-sta nosoftlockup intel_idle.max_cstate=0 mce=ignore_ce nowatchdog cpuidle.off=1 nmi_watchdog=0 audit=0 cgroup.memory=nokmem mce=ignore_ce irqaffinity=0-1 kthreads_cpu=0-1 intel_idle.max_cstate=0 processo

2022-01-20 14:55:30 909

转载 IO虚拟化

全虚拟化对于全虚拟化有两种思路。一种是把模拟设备放在VMM(VMware),另一种是放在user space,如qemu(KVM)。模拟设备只是用软件实现了各种接口共Guest OS使用,hypervisor监测Guest OS对于虚拟设备的操作,然后将其转化到实际的物理设备。实现了一个物理设备在多个OS之间共享的目的。左侧图显示的是VMware的solution(不是所有的模拟设备都放在vmm,还有一些是放在vmx),右边是KVM。通过设备模拟,虽然可以实现共享,但是由于加了一层,会有一些性.

2021-09-28 15:08:58 2489

转载 SmartNIC之我见

传统网卡实现的是L1-L2(物理层和数据链路层)的逻辑,其他的操作需要CPU介入。在这种模式下,大约有30%的算力用于处理网络数据包。为了满足网络的高速处理,现代网卡实现了部分L3-L4的功能,进一步卸载CPU的压力。随着SDN/NFV等新兴技术的兴起,传统的网卡已经不能高效的处理网络包,尤其是在服务器领域。缺点如下:随着Open vSwitch等虚拟化技术的引入,网络数据平面的复杂度急剧增加 需要耗费大量的计算资源来处理网络包DPDK作为网络加速方法,被大量的应用,但是其还是需要大量的算力。在

2021-09-24 09:28:15 342

转载 CPU的能效

CPU在没有任务可运行时,会进入到休眠状态,以下参数可以控制cpu的休眠状态。processor.max_cstate,其值为0-9,数值越大,表示CPU休眠的程度越深。 intel_idle.max_cstate,设置intel_idle驱动允许使用的最大C-state深度。0表示禁用intel_idle. intel_pstate=disable,禁用Intel CPU专用的频率调节驱动 idle=poll/halt/momwait poll:禁止CPU进入休眠状态 halt:使用HALT

2021-09-24 09:08:56 1472

转载 Linux性能参数相关命令

先借个图, 针对Linux的性能相关命令真是多如牛毛了,在这里介绍其中几个。top 最简单也是最常用的查看系统当前负载情况,如下图所示:可以看到过去1,5,15分钟的系统平均负载(也可使用uptime)。任务数量,CPU资源分布。对于memory:total = free + used + buffer/cache。vmstat r:处在 runnable 状态的任务,包括正在运行的任务和等待运行的任务。 us,sy,id,wa,st:CPU 时间的各项指标(对所有 CPU 取均.

2021-09-08 16:04:55 93

转载 Linux - 时钟

本文是《Linux内核设计与实现》中“定时器与时间管理”的学习笔记。节拍率Hz系统定时器频率是通过静态预处理定义的。我的Ubuntu配置的是250Hz(4ms一个周期)。root@john-virtual-machine:/boot# grep CONFIG_HZ config-4.15.0-154-generic# CONFIG_HZ_PERIODIC is not set# CONFIG_HZ_100 is not setCONFIG_HZ_250=y# CONFIG_HZ_300

2021-08-24 09:55:09 1091

原创 Linux kernel thread

当我们在Linux系统中执行ps or top命令时,会发现有些进程的command 加有[],有些则没有。这是因为什么呢?[] 表示为内核线程,其余则为用户态进程。Pid=1/lib/systemd/systemd 是所有用户态进程的父进程。以前是initPid=2 kthreadd 是所有内核态线程的父线程。USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1.

2021-08-20 19:54:29 179

原创 Python chaos

Python3中* 和 **运算符的作用算数运算符 * 是乘法 **是乘方 函数形参 *args 和 **kwargs 都是可变形参 区别是*args表示若干个无名参数,本质是一个tuple。**kwargs表示关键字参数,本质是字典。 *args必须在**kwargs之前其他用法在日常工作中不常见闭包的概念在函数内部在定义一个函数,外部函数的返回值是内部函数,并且内部函数使用了外部函数的变量或者参数,这时就叫闭包,它的所有变量都已经确定(除了闭包的输入参数),形成了一个封闭的对象

2021-08-18 20:39:54 248

转载 Cyclictest

对于RT-Linux(打了rt patch的Linux),调度延迟用rt-tests工具包来测试。其中包含了很多的测试工具,在这里先介绍cyclictest。参考文档:https://zhuanlan.zhihu.com/p/336381111,https://blog.csdn.net/yangteng0210/article/details/82627718所谓延时就是一个事件的发生到系统相应该事件为止的时间。在实时操作系统中,希望这个值越小越好,表明任何任务都可以在规定的时间内得到调度。C

2021-08-18 14:52:59 1050

原创 Linux内核同步

临界区:访问和操作共享数据的代码段

2021-08-14 16:25:47 73

原创 优化实时性能

NFV的提出,为运营商提供了一个新的选择,不在有限于设备提供商。将各个网络模块运行于VM或者容器中,但是由于引入了hypervisor,延迟必定会比直接运行在物理机上要大一些,本文记录了如何在VM中通过设置内核启动参数降低程序调度的延迟。Linux Kernel通用内核在spinlock、irq上下文方面无法抢占,因此即使高优先级任务被唤醒到得以执行的时间并不能完全确定。正是因为这个执行时间的不确定性,实时内核实时系统分为硬实时和软实时,区别主要在于,软实时是统计上的实时,保证一定百分比

2021-08-13 16:16:13 6565 4

原创 Linux中断

本文学习《Linux内核设计与实现》的笔记让硬件在需要的时候向内核发出信号,这就是中断机制,而不是采用polling的方式,浪费过多的资源。由硬件产生的中断为异步中断,处理器自身产生的中断为同步中断。中断处理程序对于特定中断,内核会执行相应的函数(中断处理程序ISR),中断处理程序是硬件驱动设备的一部分。再次说明,中断处理程序不和特定的设备关联,而是中断,有些设备能会产生多个中断。注册中断处理程序驱动程序通过request_irq()函数注册一个中断处理函数,并且激活(分配)给定的中断线

2021-08-10 10:59:38 368

转载 Scheduler

Linux中的调度器可以分为主调度器和周期调度器RQstruct rq 定义在kernel/sched/sched.h在SMP系统中,每个CPU对应一个rq,每个rq包含三个就绪队列:cfs_rq/rt_rq/dl_rqunsigned int nr_running 可运行的进程总数raw_spinlock_t lock; runqueue clock所有rq结构体存放在runqueues数组中,周期调度器周期性调度器并不负责进程的切换,而是负责更新进...

2021-08-06 10:23:39 193

转载 Linux内核栈

概念kernel version: 5.13每个进程在创建时分配了两个栈,一个是用户栈,一个是内核栈。当进程通过系统调用、中断、异常等方式陷入内核时,就不能在使用用户栈,而是使用内核栈。Linux kernel定义了一个共用体:union thread_union {#ifndef CONFIG_ARCH_TASK_STRUCT_ON_STACK struct task_struct task;#endif#ifndef CONFIG_THREAD_INFO_IN_TASK st

2021-08-05 10:15:28 2224

原创 进程描述符

进程描述符(task_struct)包含了内核管理进程所需的全部信息,在kernel2.6之前,task_struct在创建进程时保存在内核栈的尾部,在kernel2.6之后,由slab分配器分配task_struct结构(通过预先分配和重复使用task_struct,可以避免动态分配和释放所带来的资源消耗),此时在内核栈thread_info结构有一个指向进程描述符的指针:current_thread_info() -> task下图摘自《Linux内核设计与实现》...

2021-08-01 22:54:51 932

原创 零拷贝技术

在前面的文章中,介绍了DMA是如何工作,减轻CPU负担,提高系统性能的。除此之外还可以进一步优化系统性能,在这里介绍零拷贝技术。直接给出定义:不需要用户空间作为数据中转的技术先来看看client和server之间发送文件的过程:DMA把数据从外设读取到内存中(内核空间),从内存写到网卡。但是还要把数据从内核空间拷贝到用户空间,如果应用程序不修改文件内容,直接发送,那么这两次拷贝是有待优化的,零拷贝技术就是解决的这个问题。将page cache 地址与长度 传给 socket描述符,.

2021-07-30 15:25:15 110

原创 Direct Memory Access

DMACPU的处理速度远快于内存,硬盘的读写速度。同时由CPU搬运数据也是很低效的,无论是程序控制方式还是中断控制方式,数据的传输都必须经过CPU,例如将一个字节的数据从地址A搬运到地址B,则要将数据存在寄存器中,然后在将其写到地址B。为了不让CPU的资源浪费在等待读写完成中,引入了DMA。它不仅能够提高数据吞吐量而且减轻了CPU的负载,提高了系统的性能。在传输过程中不需要CPU介入,但是在DMA开始和结束时需要CPU进行相关设置(源地址、目的地址、传输长度)和校验。这样就实现了CPU与DMA的

2021-07-30 15:05:40 721

转载 80x86中的寄存器

8086是一款16位的CPU,1. 通用寄存器:AX, BX, CX, DX为了与之前的8位CPU兼容,这四个通用寄存器又可分为两个独立的8位寄存器使用,例如AX = AH + AL。2. 段寄存器:CS, SS, DS, ES由于8086使用了分段机制,物理地址=段基址+段内偏移3. 特殊寄存器:SI, DI, SP, BP, IP这些寄存器主要是用于各种寻址方式时,保存基址,源地址,目的地址等。...

2021-07-29 14:48:39 266

空空如也

空空如也

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

TA关注的人

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