自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

^_^

  • 博客(68)
  • 资源 (3)
  • 收藏
  • 关注

原创 ebpf中的percpu map的注意事项与剖析

ebpf percpu map

2023-01-10 22:43:40 843

原创 Linux中的调度参数之sysctl_sched_wakeup_granularity

Linux-5.4为防止唤醒抢占特性使能的情况下出现频繁的切换导致系统产生在任务切换上产生大量开销, 内核引入sysctl_sched_wakeup_granularity参数。该参数的作用是在唤醒新任务时,只有在当前任务curr的虚拟时间比被唤醒任务p的虚拟时间多于sysctl_sched_wakeup_granularity参数的加权平均值时才会考虑让新唤醒任务p抢占当前任务curr。该参数的值在linux-5.4中默认值为1000000UL,单位为nanoseconds。【1】wakeup_g

2021-06-29 23:04:02 828

原创 Linux中的调度参数之公平调度中的轮转周期与时间片

基于Linux-5.4当前的Linux中有公平调度、实时(rt)调度、deadline调度等等调度算法;其中公平调度是目前最主要的调度算法之一。公平调度,顾名思义就是要保证公平性,要照顾到所有任务都能够有机会得到CPU调度资源。Linux中有几个参数和"公平性"息息相关。sysctl_sched_min_granularity:公平调度中一个轮转周期内每个任务可运行的最小时间粒度(最小时间片),这样可避免任务运行时间太短导致优先级低的任务受到不公平待遇以及避免任务切换太过频繁的情况。 期默认

2021-06-29 22:57:59 1093

原创 Linux中的current与rq->curr浅析

基于linux-5.4背景在内核中检查当前运行任务时有时候会使用rq->curr,而其他时候内核又使用current来作为当前进程使用,究竟二者是什么关系,又什么区别呢? 带着好奇心我扒开内核代码简单进行了分析1 rq->curr浅析rq->curr表示的是rq这个就绪队列上当前正在运行任务的task_struct结构指针,它在调度函数__schedule()中进行更新。在主调度函数__schedule()中,内核先选好下一个将要运行的任务next,然后将任务next更

2021-06-23 21:18:24 1088

原创 进程内核态堆栈与用户态堆栈浅析

kernel:linux-4.9cpu: ARMV8背景在广袤的代码中堆栈无疑是一个高热度的技术用语,就linux而言你能常观察到的几个场景有:用户态堆栈函数func_foo中用堆栈来保存寄存器、局部变量等等:

2021-06-20 15:30:07 2483 3

原创 xenomai系统中timer校准简要分析

一、背景Xenomai为了提升系统的响应速度、减少响应延时在各个维度上都做了许多工作。其中为了减少定时器上的延时在定时器上实时了一个叫做gravity的校准,以尽可能的消除timer响应路径上的延时,确保定时器的响应时间更加接近用户的期望到期时间。二、gravity的默认值Xenomai初始化阶段会调用xnclock_init()函数来设置默认的gravity值,逻辑如下:s...

2020-06-01 14:26:18 1270 1

原创 aarch64异常(二)el0_irq

内核版本:linux-4.9.217el0_irq: kernel_entry 0el0_irq_naked: enable_dbg#ifdef CONFIG_TRACE_IRQFLAGS bl trace_hardirqs_off#endif ct_user_exit#ifdef CONFIG_HARDEN_...

2020-05-03 21:45:36 1923 2

原创 aarch64异常(一)aarch64异常简介

目录Aarch64中异常的基本概念异常发生时硬件做了哪些事情?异常的处理Aarch64中异常的基本概念在aarch64中,将中断、系统调用、数据指令异常等等情况统称为异常。异常会中断当前cpu执行流,转而执行具有更高权限的代码,即exception handler。当异常处理完毕后cpu会再次返回到之前的被中断的代码流继续执行。常见的异常有中断、系统调用、数据指...

2020-04-15 22:32:38 4007 3

转载 在两个不同的vim之间进行复制粘贴

转自:https://blog.csdn.net/trochiluses/article/details/9237379使用vim进行编辑的时候,如果我们打开了两个不同的vim,此时不能用yy和p在两个Vim窗口之间进行复制和粘贴,此时,需要分割窗口,然后就可以复制粘贴了。步骤如下:假如我们有两个需要编辑的文件a和b1.分割:此时先打开a,然后在命令界面下输入sp2.打...

2020-04-07 22:16:39 3146

原创 Registry私有仓库的镜像清理

一、背景 在私有registry仓库的场景中,对于私有镜像的升级操作是一个比较常见的操作。然而在我们升级私有镜像、并push到私有仓库后,升级前的镜像也就失去了它存在的意义;而随着时间的积累,旧镜像将会越来越多,旧镜像的数据有可能会占用大量磁盘空间。为了解决此问题,我们需要对私有仓库中的旧镜像进行清理以释放空间。二、具体操作2.1 清理blobs、_manifests和_lay...

2020-03-09 22:18:08 3396

原创 利用systemd的定时器来定时停止服务

需求背景:有时候我们有这样的一种需求:需要一些服务在定时运行一段时间后就停止。实现这种需求的方法有许多种,这里介绍一种基于systemd实现方式。场景:希望在dockerd服务在每次启动1个小时后就关闭服务。实现:利用systemd中的timer来实现。具体方法:1 创建定时器处理服务 在/usr/lib/systemd/system/目录下创建dockert...

2020-02-23 21:50:52 1080

原创 仿照taskset的任务亲和性设置小程序

#define _GNU_SOURCE#include <sched.h>#include <unistd.h> /* sysconf */#include <stdlib.h> /* exit */#include <stdio.h>int main(int argc, char *argv[]){ int i, nrcpu...

2020-01-21 20:43:33 207

原创 如何为qemu制作Qcow2格式文件系统

一、 制作8G大小的raw镜像文件qemu-img create -f raw ./virt-disk 8G"上面的命名生成一个大小为8G的raw镜像virt-disk。二、将virt-disk于loop设备关联sudo losetup /dev/loop1 ./virt-disk三、对loop1进行分区sudo parted /dev/loop1"#这个步骤是交互...

2020-01-21 20:23:57 2625 1

原创 Docker run 容器处于created状态问题

在最近遇到的一次问题中,有这样一种现象: 系统有一个测试脚本会不断的执行docker run命令来运行容器,在测试过程中发现有一个情况是,有时候容器没有完全被运行到"Up"状态,而是处于"created"状 态,现象十分奇怪。 上环境首先查看了"created"状态的容器,以及dockerd日志: (1) dockerd的日志中只有"post create"请求,但是居然没...

2019-12-07 21:58:52 20804 1

原创 进程托孤

前言 我们知道,一个任务在消亡退出时通常会将子任务(后面用孤儿或者children表示)托付其他任务(后面用reaper表示)以便以后“收尸”,这个流程就是“托孤”。 托孤会为子任务寻找一个新的parent作为new reaper,那这个new reaper选谁呢?怎么选呢?会是传说中的1号进程么?这就是本文要去探索的问题。一、单身父亲的谢幕 作为一个单身父亲,没有...

2019-09-25 19:43:28 1130 5

原创 制作一个最简单ftpd容器镜像

准备基本的根文件系统镜像 先从dockerhub pull busybox镜像到本地。Pull完成后可以通过docker images看到busybox:latest镜像。准备entrypiont文件 然后编写entrypiont.sh作为ftpd镜像的入口函数。如下:#!/bin/shsh -c "exec tcpsvd 0 21 ftpd -w /"编写...

2019-08-07 21:59:57 269

原创 制作简单的http镜像

一、编写简单的http服务首先写一个简单的http服务器程序:package mainimport ( "fmt" "net/http")type MyHandler struct{}//实现接口的ServeHTTP方法func (this *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques...

2019-08-07 21:59:19 688

原创 交叉构建sqlite与libseccomp

背景 在交叉构建第三方的一些组件时需要依赖sqlite以及libseccomp,此时就需要先交叉构建sqlite和libseccomp。下面简单说明如何交叉构建sqlite和libseccomp。获取源码 可以根据自己需要分别从https://www.sqlite.org/download.html和https://github.com/seccomp/libseccom...

2019-07-20 10:15:08 489

原创 cat /proc/$pid/smaps浅析(一)

引子 当我们执行cat /proc/pid/smaps读取某个进程对应的虚拟内存区间到信息显示给我们,整个过程究竟发生了什么呢? >>用户态open("/proc/pid/smaps")-->内核proc_pid_smaps_operations.open() >>用户态 read(fd) ...

2019-07-19 21:46:13 4506

原创 aarch64-linux-gnu/bin/ld: cannot find -lz collect2: error: ld returned 1 exit status解决方案

起因 从linaro下载的aarch64工具链不包含libz库,导致有些static参数的编译程序无法通过,出现类似如下问题:gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/6.3.1/../../../../aarch64-linux-gnu/bin/ld: ca...

2019-07-05 22:14:19 10441

原创 从一个问题看isolate出来的cpu的rt_rq的root_domain

现象描述: 在一个8核环境中,内核在启动时传入内核启动参数isolcpus=4,5,6,7 即将cpu4cpu5 cpu6 cpu7置为isolated核。系统启动后cpu4 cpu5 cpu6 cpu7通过cpu亲和性各自运行了一个死循环的实时任务,从top看出4,5,6,7这四个核的cpu利用率只能够跑到95%; 然而将内核启动参数改为isolcpus=3,4,5,6,...

2019-06-02 23:55:34 1812

原创 保留内存lowmem_reserve浅析

一、保留内存的用武之地 要了解内存区的保留内存,我们首先要知道这个保留内存用在何处。实际上它在内核水线计算时会用到,那内核是如何计算水线的呢?保留内存到底在水线计算起到什么作用呢?我们先来跟踪代码一探究竟。 为了方便说明,这里只针对UMA架构。UMA架构物理内存的分配最终由__alloc_pages_nodemask()函数实现。struct page * __alloc_...

2019-06-02 23:54:59 2302

原创 softlockup原理分析

一、概述 Softlockup主要用于检查cpu上的任务是否有无法被调度的情况发生。其原理就是在cpu上创建一个实时FIFO优先级为99的percpu内核线程(一般情况下可以认为是系统中优先级最高的任务),其名字为watchdog;此任务一般会由一个高精度定时器htimer定期唤醒,唤醒后watchdog线程会去执行“喂狗”操作(具体而言就是将当前的时间戳写到变量watchdog_tou...

2019-04-17 22:16:45 7404

原创 通过简单工具定位ext4文件系统中的裸数据

一、工欲善其事必先利其器  我在系统上通过如下2条命令创建了一个ext4格式的“内存磁盘”mkfs.ext4 /dev/ram0mount /dev/ram0 /ram  接着拷贝一些文件到 /ram目录下,其中一个就是 /ram/uio/uio_begin.sh  首先通过 dumpe2fs /dev/ram0了解到文件系统的如下信息Blocks per group: ...

2019-02-03 21:25:20 824 2

原创 MIPS系统调用追踪(一)

说明:内核版本:4.4架构:mips64c库:glibc-2.24一、用户态到c库这里以系统调用 sync_file_range举例。原因有两点:一是这个系统调用在参数多达6个;二是参数中有64位参数,这个系统调用的原型为:int sync_file_range (int fd, __off64_t from, __off64_t to, unsigned int flags...

2019-02-01 20:17:02 993

原创 从MAP_SHARED谈RSS与PSS

  近期遇到一个问题:统计一个进程使用的物理内存居然远远超过了系统总内存大小。咋一看这个现象被下了一跳,怎么会这样呢?后来慢慢分析,终于了解到其中的奥秘.....  我的 "进程占用物理内存统计" 是通过累加 /proc/pid/smaps中的Rss项来计算的。以往对Rss"Resident Set Size"的理解就是实际占用的内存,但是并没有真正去区分和Pss的区别。  随后我仔细观察...

2019-01-23 22:25:16 1463

原创 容器内生成core_dump文件

  有时候docker容器中的程序可能出现类似段错误,此时要去跟踪问题的话有core_dump会方便很多;但是容器中有时候还不一定能够生成core_dump文件,需要做如下事情:  (1)启动容器时,增加--privileged选项;  (2)容器启动后,通过"ulimit -c unlimited",以使能产生core_dump文件;  (3)通过 cat /proc/sys/kerne...

2019-01-04 00:10:56 1424

原创 使用htimer定时计算一个任务的cpu利用率

  有时候我们想关注某一个任务的cpu利用率,除了使用top还有什么其他方法可行呢?  实际上cpu利用率的原理就是特定时间内一个任务总的运行时间与时间的比值即可简单的认为是cpu利用率。  那么就有两个问题:1)就是任务在某个时间周期的运行时间;2) 周期性的计算cpu利用率。  第一个问题任务在某个时钟周期的运行时间可以通过当前时间任务总的运行时间p-&gt;se.sum_exec...

2018-12-24 00:47:59 1227 1

原创 利用脚本查看一个任务的heap

计算某个人物的heap占多少个pagetaskname=$1#为了更方便的对16进制的地址进行运算需要进行16&lt;--&gt;10进制转换DecToHex(){ echo $(printf "%x" $1)}HexToDec(){ echo $(printf "%d" 0x$1)}####################pid=$(ps aux | grep $ta...

2018-12-24 00:38:02 139

原创 htimer的使用与处理流程

1 注册hrtimer-&gt;function = xxx_timer_fn;hrtimer_start(hrtimer, ns_to_ktime(sample_period), HRTIMER_MODE_REL_PINNED);2 时钟中断void run_local_timers(void){        struct tvec_base *base = __thi...

2018-12-22 19:55:46 747

原创 实时调度负载均衡的一个实例

  在一个双核系统中,运行着4个实时任务: rt0, rt1, rt2和rt3,它们的优先级分别为10,15,20和25。  其中rt2通过taskset亲和到cpu1上先睡眠,其他3个任务初始运行状态为:cpu0上运行着rt0和rt1,且rt1一直抢占着rt0; rt3运行在cpu1上死循环。     如果此时唤醒rt2会发生什么?     由于rt3一直在cpu1上处于运行状态,r...

2018-09-11 22:13:10 701

原创 CFS带宽控制浅析

摘要    什么是带宽控制?简单来讲就是控制一个任务组在给定周期时间内可消耗的CPU时间,如果在周期内消耗的CPU时间超额,则限制这个任务组内的任务调度,直到下一个周期。    本文要讨论的CFS带宽控制,它是专门针对CFS调度策略而言的;相应的,对于RT调度策略还有RT带宽控制。 原理    CFS带宽控制是基于公平调度任务组实现的,因而使用时需要打开CONFIG_FAIR_...

2018-09-04 21:29:25 3183

原创 脚本监控一个任务的调度情况

   有时候我们需要查看一个任务的调度情况可以通过 cat /proc/$pid/status | grep switch来判断任务有没有切换。但是任务出问题,得不到调度的时机是不确定的。     如果我们希望在任务没有及时得到调度的时候及时的做出报告,以便我们能够及时处理,下面这个脚本值得一试:#!/bin/shif [ $argc != 1 ]; then echo "US...

2018-09-04 21:24:03 485

原创 通过任务名字打印任务的亲和性

  有时候我们调试系统时,需要在运行过程中查看某个任务的状态,如一些任务的cpu亲和性。但是我们我们只知道要监控的任务的名字,任务的pid是动态分配的。     下面这个程序就是在c中通过popen()执行一段shell程序以通过任务名字找到对应的PID,然后再根据PID查看任务的cpu亲和性:​#include &lt;string.h&gt; #include &lt;sys...

2018-09-04 21:19:57 436

原创 ramdisk的解压与制作

一、修改、解压、生成ramdisk.bin前提:有一个原始的ramdisk.bin文件1 改名字mv ramdisk.bin ramdisk.bin.tar.gz 2 解压gunzip ramdisk.bin.tar.gz 3 导出ramdisk.binmkdir initrd cd initrd cpio -i &lt; ../ramdisk.bin.ta...

2018-08-30 22:07:34 1686

原创 一个消耗内存(以Mb为单位)的小程序

    有时候需要消耗指定大小的内存来验证一些问题,这个时候一些小程序就可以帮上忙了,下面这个小程序malloc_mb.c就是这样的作用:​#include &lt;stdlib.h&gt;#include &lt;stdio.h&gt;#include &lt;unistd.h&gt;#define UNIT (1024*1024)int main(int argc, cha...

2018-08-23 22:33:00 2075

原创 内核模块--使用misc设备

  Linux内核为开发人员提供了若干接口以允许用户态与内核态进行通信,包括设备文件,proc文件系统接口,sysfs文件系统接口等等。  这一篇主要通过一个misc设备为例子,讲述如何通过设备节点访问内核的某个数据结构信息--task_struct结构中的comm字段。  #include &lt;linux/module.h&gt;#include &lt;linux/miscdevice....

2018-07-04 22:22:36 879

原创 容器网络--为docker容器添加网络接口

一 背景    默认情况下容器启动后只有一个网络接口,一般外围为eth0,且其IP地址已经提前分配。有时候我们希望为一个容器创建多个网络接口,此时可以尝试如下的方式。二  为容器添加网络接口  1 以默认的网络方式运行一个容器# docker run --name tst_add_inf -it tst_img /bin/bash    这样,我们就通过宿主机器上的镜像tst_img创建了一个名字...

2018-07-02 22:28:12 7637 2

原创 容器网络-物理网卡绑定到网桥

一 背景    默认情况下dockerd服务启动会创建一个默认网桥(采用一个未使用网段IP)。这样此机器上的容器就通过这个默认网桥进行通信(容器与宿主机通信也通过网桥),同时达到隔离外部网络的目的。有时候我们有这样的需求:一个宿主机器上的容器可以直接和其他宿主机器上互通网络,这里作为实验,可以用“暴力”的方式实现:    宿主机host1 网口eth0:192.168.0.100    宿主机ho...

2018-07-02 22:02:23 2543

原创 Docker容器使用/dev/mem与HOST端映射同一段物理内存

    我们知道docker容器与HOST端有一定的隔离性,但同时也共享着一些资源,比如内存资源。今天我们就看一下Docker容器通过/dev/mem设备节点与HOST共享一段物理内存。    要达到这个目的需进行如下操作:1) 划分一段用于映射到/dev/mem设备文件的保留物理内存;2) 准备一段在容器和HOST端可运行的映射和读写物理内存的代码;3) 启动一个带有--privileged参数...

2018-03-02 20:48:32 3146

TCP-IP详解.卷二:实现.rar

TCP-IP详解.卷二:实现 ,经典继续,第二部

2017-05-20

TCP-IP详解.卷一:协议

TCP-IP详解.卷一:协议是一本经典的tcp-ip网络书籍

2017-05-20

Go语言程序设计 高清完整版带书签目录.pdf

Go语言程序设计pdf 下载地址

2017-05-09

空空如也

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

TA关注的人

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