自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 CPU电源管理(P-state)

背景 计算机系统需要电力来执行各种活动,比如CPU需要从内存获取数据和应用程序、执行指令、显示输出结果,同时它也通过各种接口与用户通信,如使用网卡与网络上的其他计算机交互。这些功能是计算机系统中的各硬件部件协作来完成的,而每个部件都需要不同的电力去运作。 一项数据中心的电力消耗研究表明,近50%的输入电力被空调和电力传输子系统消耗,而服务器本身占用了剩下的50%电力。试想一下,...

2020-10-15 10:26:15 18987 1

原创 CPU C-state & cpuidle driver

1. 什么是C-states、C-mode?为了在CPU空闲时节约能源,可以命令CPU进入低功耗模式。C-state是intel CPU处于空闲时的一种状态,CPU有几种电源模式,它们统称为“c状态”或“c模式”低功耗模式最初是在486DX4处理器中引入的。到目前为止,已经引入了更多的功耗模式,并且对每种模式进行了增强,以使CPU在这些低功耗模式下消耗更少的功率。CPU的每个状态都使用不同的电量,并且对应用程序性能的影响也不同。每当CPU内核处于空闲状态时,内置的节能逻辑就会启动,并尝试将内核从当前

2020-07-15 15:14:12 19504

原创 linux锁机制:queued spinlock

queued spinlockticket spinlock巧妙的解决了锁的公平性问题,但它在锁竞争方面还不够完美,linux-4.2内核引入了queued spinlock。queued spinlock由Waiman Long和Perter Zijlstra 发起,补丁集经过了16个版本,并入了主线。https://lkml.org/lkml/2015/4/24/63...

2019-10-22 09:55:44 3209 3

原创 linux锁机制:ticket spinlock

spinlock spinlock即自旋锁,在linux内核中广泛运用的底层同步机制,相对于可睡眠锁,spinlock采用spin的方式获取锁(busy-wait),避免了context_switch的开销,在短暂临界区访问场景下速度明显提升,性能更高,对memory等critical section互斥访问,发挥着重要作用。spinlock对内核的数据安全性和并发性能有很大的...

2019-10-16 16:13:42 2254

原创 RCU配置指导说明

Kernel configuration parameters for RCU [Posted January 21, 2019 by jake]This sidebar is part of Paul McKenney's 2019 update to the RCU API.内核配置参数RCU的Kconfig选项和内核引导参数可以被认为是RCU API的一部分。...

2019-02-01 15:51:24 8222

原创 降低linux实时任务抖动&延迟

内核配置建议:一、配置NO_HZ子系统:内核有以下几种HZ配置供选择:CONFIG_HZ_PERIODIC  ##周期性tickCONFIG_NO_HZ_IDLE  ##在系统idle状态下,禁止tickCONFIG_NO_HZ_FULL  ##在系统idle或只有一个任务在运行的状态下,禁止tick 默认状态下,内核的时钟tick配置为CONFIG_NO_HZ_IDL...

2019-01-29 17:27:52 5263

原创 vim快捷键及配色修改

下载color插件https://www.vim.org/scripts/script.php?script_id=3412设置vimrc配置文件cat ~/.vimrc set nusyntax enablesyntax onset background=darknmap fc :cs find c <C-R>=expand("<cword&gt...

2019-01-07 14:30:56 505

原创 cpu hotplug流程

/# /# echo 0 > /sys/devices/system/cpu/cpu1/onlinecpu_subsys_offline    cpu_down        do_cpu_down            _cpu_down                cpuhp_kick_ap_work                    __cpuhp_kick_ap...

2018-11-02 18:42:52 1533 2

原创 [多核并行计算]进程间通信(三)套接字

socket套接字不仅可以在不同主机间通信,如TCP/UDP等网络方式通信。也可以再本机为不同进程间通信提供服务。int socket(int domain, int type, int protocol);socket函数接口中有3个参数,其中第一个domain参数决定了通信域,如果是本机内通信传入AF_UNIX, AF_LOCAL,如果是跨主机使用ip进行通信则传入AF_INET等。...

2018-09-30 15:46:39 541

原创 [多核并行计算]进程间通信--管理程序

#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/wait.h>#define SHARE_RFIFO_PATH "/home/tmp/...

2018-09-14 17:00:13 317

原创 [多核并行计算]进程间通信(二)共享内存

先把代码贴上,后面在做讲解。。#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h> #include <math.h> #include <sys/time.h> #include <sys/stat.h&g

2018-09-14 16:47:02 1642 1

原创 [多核并行计算]进程间通信-性能研究

 首先介绍下多核并行计算的场景,及测试方法:(1)并行计算运用在特定大型服务器之上,其硬件水平很高,可能有多几百到上千个cpu。(2)这些cpu分成了2类,一类是控制cpu,作为主控,用于发起计算,与其他CPU交互,发起计算通知,分析并统计结果等作用;第二类是计算cpu(占大多数)。系统中绝大多数cpu属于计算cpu,因为整个系统就是为了高性能计算。由于计算量大,所以需要很多很多的cp...

2018-09-05 21:30:00 1026

原创 ltp测试套件-pthread_barrier_wait_6-1分析记录

测试用例地址:https://github.com/linux-test-project/ltp/commit/b54a54e5881a0f9438ce4a862dee724130a9874f#diff-61ca0ddb356007047210a92fb128896c(1)失败打印:POSIX:conformance/interfaces/pthread_barrier_wait/pthre...

2018-08-31 15:14:59 973

原创 ltp测试套件-pthread_barrier_destroy_2-1分析记录

测试用例地址:https://github.com/linux-test-project/ltp/blob/master/testcases/open_posix_testsuite/conformance/interfaces/pthread_barrier_destroy/1-1.c(1)失败打印:conformance/interfaces/pthread_barrier_dest...

2018-08-31 15:11:34 386

原创 ltp测试套件-timer_settime_5-2分析记录

timer_settime_5-2用例地址:https://github.com/linux-test-project/ltp/blob/master/testcases/open_posix_testsuite/conformance/interfaces/timer_settime/5-2.c错误log输出:conformance/interfaces/timer_settime/...

2018-08-31 15:06:05 469

原创 ltp测试套件-pthread_barrierattr_getpshared_2-1分析记录

测试用例地址:https://github.com/linux-test-project/ltp/blob/master/testcases/open_posix_testsuite/conformance/interfaces/pthread_barrierattr_getpshared/2-1.c测试用例error log:conformance/interfaces/pthrea...

2018-08-31 14:59:31 286

原创 ltp测试套件-pthread_rwlock_unlock_3-1分析记录

 测试用例地址:https://github.com/linux-test-project/ltp/blob/master/testcases/open_posix_testsuite/conformance/interfaces/pthread_rwlock_unlock/3-1.c测试用用例运行error log: master# ./3-1.glibc-2.24 ...

2018-08-31 14:39:47 363

原创 futex机制介绍

1、概念futex: a sort of fast, user-space mutual exclusion primitive. Futex是一种用户态和内核态混合的同步机制。首先,同步的进程间通过mmap共享一段内存,futex变量就位于这段共享的内存中且操作是原子的,当进程尝试进入互斥区或者退出互斥区的时候,先去查看共享内存中的futex变量,如果没有竞争发生,则只修改futex,而不用...

2018-08-31 10:21:04 17092

原创 ltp测试套件-pthread_rwlock_rdlock_2-1分析记录

测试pthread_rwlock_rdlock_2-1.c用例失败。log如下:[83#yuchen@ubuntu ltp]# gcc 2-1.c -o 21 -pthread [84#yuchen@ubuntu ltp]# ./21 main: has priority: 3 main: attempt read lock main: acquired read lo...

2018-08-30 23:09:06 476

原创 busybox mv工具问题

在使用ltp套件测试linux内核时,其中ltp的一个cgroup测试用例执行失败。通过分析测试用例代码逻辑,及内核cgroup相关实现,最终发现是busybox mv工具的问题。下面详细记录一下分析过程。...

2018-08-30 22:44:35 413

原创 ltp测试套件-pthread_rwlock_unlock_3-1分析记录

最近在linux-4.14版本内核上做ltp测试,其中pthread_rwlock_unlock_3-1用例测试不通过,然后我又在各种其他linux系统上做测试,都没有通过。Test failed: reader did not get the lock when writer1 release the lock[root@aarch64 ]# [root@aarch64 ]# ./3...

2018-08-29 23:51:00 225

原创 futex介绍

--linux使用了futex来进行快速通信,pthread_xxx 相关接口全部都是基于futex实现的。,

2018-08-29 23:46:59 1795

原创 cgroup挂载问题1

挂载cgroup后创建了一些subgroup,再次挂载cgroup出现EBUSY问题。mount -t cgroup -o cpuset,debug cgroup /cgroup master# mount -t cgroup -o cpuset,debug cgroup /cgroup ---挂载cgroupmaster# cd /cgroupmaster# mkdir -p l...

2018-08-28 20:02:43 6038

原创 快速定位函数指针所指向的函数原型

在一些大型开源软件中,通常会有函数指针的应用,函数指针可以让程序在运行过程中,动态的的去调用对应的回调函数。linux内核代码中,也有大量的函数指针应用。例子:linux中支持大量的文件系统,如ramfs,ext3,ext4,jffs2,procfs,sysfs,nfs,debugfs,等等等,这些文件系统通过VFS虚拟文件系统统一接口,来实现调用具体文件系统的读写接口。这里就会用到函...

2018-08-27 19:37:46 1516

原创 qemu-system-aarch64 调试大端内核,开启RT_FULL,启动失败问题

qemu-system-aarch64 来调试大端内核时,遇到以下几个问题,记录以下: 1、使用linux-4.9.84、linux-4.4.97内核2、打入rt补丁。3、配置CONFIG_BIG_ENDIAN,大端内核。4、选择PREEMPT_LL时qemu可以启动。5、选择PREEMPT_RT_FULL时,不能启动。6、发现选择PREEMPT_RT_FULL时,伙伴...

2018-08-26 21:14:15 2695

原创 内核特性之ZRAM

CONFIG_ZRAM

2018-08-24 10:14:03 1123

原创 让linux变为实时操作系统

我们知道,相对比vxworks,linux内核属于非实时操作系统,原因主要是:(1)实时任务抢占时间是不可预期的。(2)为什么抢占是不可预期的呢?这涉及到内核中的抢占点知识,其中spin_lock锁,在unlock时是一个抢占点,但是spinlock本身内部是不可以抢占的,这种api在内核中大量使用,事实上是spin_lock与spin_unlock之间临界区代码片段不可预期的。具体用...

2018-08-23 23:54:15 26410 2

原创 内核报非法指令,分析方法(undefined instruction: pc=00000000000c0dbc)

操作系统内部会对中断,异常进行处理等。其中有一类异常叫未定义指令undefined instruction,CPU遇到了不认识的指令,则会进入未定义指令异常处理函数,因为CPU不认识该指令,所以通常CPU遇到非法指令,则无法继续执行,会使内核崩溃panic。但在崩溃前会操作系统会打印一些debug信息,供工程师分析。如下log,内核启动过程中调用用户态modprobe程序,而modprobe执...

2018-08-22 16:13:12 10782

原创 内核ioremap接口报Warning问题

当我们写一些外设驱动,或者内核模块,经常会使用ioremap函数来映射寄存器io地址,来访问io空间,在ioremap函数的实现内部会对传入的参数进行判断,如果地址不属于io空间,则会内核会报Warnig。从函数名字我们也可以看得出来,既然函数叫io remap,那么映射的地址空间必须是io的物理地址,所以如果映射的地址落在了ram地址空间,内核就会报warning!如下面的log内核报w...

2018-08-20 15:07:20 3558

原创 top工具全字段解析+实战(一)

一、top的概念top是linux下一个用户态工具,和windows下任务管理器差不多,就是实时显示linux系统运行状态,进程线程cpu占用,内存使用情况等等。可以实时动态地查看系统的整体运行情况,是一个综合了多方信息检测系统性能和运行信息的实用工具。二、top在哪里获取?(1)如果是发行版的linux,top由procps组件提供,procps是内核proc utils工具集,其中...

2018-08-14 16:37:19 13292 3

原创 top工具全字段解析+实战(二)

-----------接上篇,本文开始介绍cpu占用统计,及memory使用信息。  图中字段表示,如下:us, user:用户态(un-niced)的任务cpu占用率。sy, system:内核态任务cpu占用率。ni, nice:用户态(niced)的任务cpu占用率。id, idle:空闲的cpu占用率。wa, IO-wait:等io完成的cpu占用率。...

2018-08-14 16:34:03 4831 1

原创 top工具全字段解析+实战(三)

-----------接上篇,本文开始介绍进程信息。 9、进程信息依次来看下top展示的进程任务信息: (1)PID:进程号,一个任务的进程号。注意:top默认是显示的进程模式,也就是说一个创建了多个线程的程序不会被展开显示,而这个pid号是整个进程的pid。事实上,线程在内核中也是进程,它也是有唯一pid。因为不管是进程还是线程,在内核中通通都用task_struct表示...

2018-08-14 16:33:45 2148 8

原创 arm64/aarch64启动汇编代码-详细解析

/* * Low-level CPU initialisation * Based on arch/arm/kernel/head.S * * Copyright (C) 1994-2002 Russell King * Copyright (C) 2003-2012 ARM Ltd. * Authors: Catalin Marinas <catalin.marinas@ar...

2018-08-13 19:25:46 5638 1

原创 如何将二进制机器码转换成汇编指令

将机器码的指令字,用文本文件保存,将指令字保存成.S文件,如下格式:.inst  0xf9440e11 .inst  0x9120a210 (1) 用对应架构的的汇编器,编译成目标文件。命令:as a.s -o a.out(2)用objdump反汇编,生成汇编语句。命令:objdump -d a.out 实践:[82#yuchen@ubuntu ~]# cat a.s...

2018-07-31 23:37:40 11472 3

空空如也

空空如也

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

TA关注的人

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