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
Linux中的调度参数之公平调度中的轮转周期与时间片 基于Linux-5.4当前的Linux中有公平调度、实时(rt)调度、deadline调度等等调度算法;其中公平调度是目前最主要的调度算法之一。公平调度,顾名思义就是要保证公平性,要照顾到所有任务都能够有机会得到CPU调度资源。Linux中有几个参数和"公平性"息息相关。sysctl_sched_min_granularity:公平调度中一个轮转周期内每个任务可运行的最小时间粒度(最小时间片),这样可避免任务运行时间太短导致优先级低的任务受到不公平待遇以及避免任务切换太过频繁的情况。 期默认
Linux中的current与rq->curr浅析 基于linux-5.4背景在内核中检查当前运行任务时有时候会使用rq->curr,而其他时候内核又使用current来作为当前进程使用,究竟二者是什么关系,又什么区别呢? 带着好奇心我扒开内核代码简单进行了分析1 rq->curr浅析rq->curr表示的是rq这个就绪队列上当前正在运行任务的task_struct结构指针,它在调度函数__schedule()中进行更新。在主调度函数__schedule()中,内核先选好下一个将要运行的任务next,然后将任务next更
进程内核态堆栈与用户态堆栈浅析 kernel:linux-4.9cpu: ARMV8背景在广袤的代码中堆栈无疑是一个高热度的技术用语,就linux而言你能常观察到的几个场景有:用户态堆栈函数func_foo中用堆栈来保存寄存器、局部变量等等:
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_...
aarch64异常(一)aarch64异常简介 目录Aarch64中异常的基本概念异常发生时硬件做了哪些事情?异常的处理Aarch64中异常的基本概念在aarch64中,将中断、系统调用、数据指令异常等等情况统称为异常。异常会中断当前cpu执行流,转而执行具有更高权限的代码,即exception handler。当异常处理完毕后cpu会再次返回到之前的被中断的代码流继续执行。常见的异常有中断、系统调用、数据指...
在两个不同的vim之间进行复制粘贴 转自:https://blog.csdn.net/trochiluses/article/details/9237379使用vim进行编辑的时候,如果我们打开了两个不同的vim,此时不能用yy和p在两个Vim窗口之间进行复制和粘贴,此时,需要分割窗口,然后就可以复制粘贴了。步骤如下:假如我们有两个需要编辑的文件a和b1.分割:此时先打开a,然后在命令界面下输入sp2.打...
利用systemd的定时器来定时停止服务 需求背景:有时候我们有这样的一种需求:需要一些服务在定时运行一段时间后就停止。实现这种需求的方法有许多种,这里介绍一种基于systemd实现方式。场景:希望在dockerd服务在每次启动1个小时后就关闭服务。实现:利用systemd中的timer来实现。具体方法:1 创建定时器处理服务 在/usr/lib/systemd/system/目录下创建dockert...
xenomai系统中timer校准简要分析 一、背景Xenomai为了提升系统的响应速度、减少响应延时在各个维度上都做了许多工作。其中为了减少定时器上的延时在定时器上实时了一个叫做gravity的校准,以尽可能的消除timer响应路径上的延时,确保定时器的响应时间更加接近用户的期望到期时间。二、gravity的默认值Xenomai初始化阶段会调用xnclock_init()函数来设置默认的gravity值,逻辑如下:s...
仿照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...
如何为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"#这个步骤是交互...
Docker run 容器处于created状态问题 在最近遇到的一次问题中,有这样一种现象: 系统有一个测试脚本会不断的执行docker run命令来运行容器,在测试过程中发现有一个情况是,有时候容器没有完全被运行到"Up"状态,而是处于"created"状 态,现象十分奇怪。 上环境首先查看了"created"状态的容器,以及dockerd日志: (1) dockerd的日志中只有"post create"请求,但是居然没...
进程托孤 前言 我们知道,一个任务在消亡退出时通常会将子任务(后面用孤儿或者children表示)托付其他任务(后面用reaper表示)以便以后“收尸”,这个流程就是“托孤”。 托孤会为子任务寻找一个新的parent作为new reaper,那这个new reaper选谁呢?怎么选呢?会是传说中的1号进程么?这就是本文要去探索的问题。一、单身父亲的谢幕 作为一个单身父亲,没有...
制作一个最简单ftpd容器镜像 准备基本的根文件系统镜像 先从dockerhub pull busybox镜像到本地。Pull完成后可以通过docker images看到busybox:latest镜像。准备entrypiont文件 然后编写entrypiont.sh作为ftpd镜像的入口函数。如下:#!/bin/shsh -c "exec tcpsvd 0 21 ftpd -w /"编写...
制作简单的http镜像 一、编写简单的http服务首先写一个简单的http服务器程序:package mainimport ( "fmt" "net/http")type MyHandler struct{}//实现接口的ServeHTTP方法func (this *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques...
交叉构建sqlite与libseccomp 背景 在交叉构建第三方的一些组件时需要依赖sqlite以及libseccomp,此时就需要先交叉构建sqlite和libseccomp。下面简单说明如何交叉构建sqlite和libseccomp。获取源码 可以根据自己需要分别从https://www.sqlite.org/download.html和https://github.com/seccomp/libseccom...
cat /proc/$pid/smaps浅析(一) 引子 当我们执行cat /proc/pid/smaps读取某个进程对应的虚拟内存区间到信息显示给我们,整个过程究竟发生了什么呢? >>用户态open("/proc/pid/smaps")-->内核proc_pid_smaps_operations.open() >>用户态 read(fd) ...
Registry私有仓库的镜像清理 一、背景 在私有registry仓库的场景中,对于私有镜像的升级操作是一个比较常见的操作。然而在我们升级私有镜像、并push到私有仓库后,升级前的镜像也就失去了它存在的意义;而随着时间的积累,旧镜像将会越来越多,旧镜像的数据有可能会占用大量磁盘空间。为了解决此问题,我们需要对私有仓库中的旧镜像进行清理以释放空间。二、具体操作2.1 清理blobs、_manifests和_lay...
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...