自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(1528)
  • 资源 (3)
  • 论坛 (5)
  • 收藏
  • 关注

原创 dpdk中测试cache和memory延迟的工具

在https://github.com/DPDK/dpdk/blob/main/app/test/test_memcpy_perf.c

2021-05-29 19:39:10 40

原创 IMA的简单理解

IMA的全称是The Integrity Measurement Architecture。他的作用是检测一个文件是否被修改,包括本地和远程修改.其原理是比较文件的hash值是否相等,这个hash值是被保存到文件系统的 extended attribute中.与之相似的的机制是selinux作为IMA的一种补充.IMA 子系统引入了一些hooks来创建和手机被打开准备读写的文件的hash.IMA机制在2.6.30的时候就被引入到linux kernel中.IMA的作用是手机文件的hast并将其放到用户.

2021-05-18 10:08:23 85

原创 由于代码对齐造成的性能波动

有时候修改了代码,会造成性能下降,但是和具体的改动点有没有什么关系,回退改动点性能就回复了。这个时候考热点函数就无法分析了,可以看看topdown模型中的icache load的情况.这种情况之一就是由于代码不对其造成的,如果改动点在kernel的话,则可以合入下面的的patch验证https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=09c60546f04fdiff --git a/Makef.

2021-05-18 08:59:42 63

原创 使用rasm2 将机器码转成汇编

[root@localhost ~]# yum install radare2-4.5.0-1.el8.aarch64Last metadata expiration check: 0:00:54 ago on Thu 06 May 2021 05:29:17 AM EDT.Dependencies resolved.============================================================================================.

2021-05-06 19:03:24 68

原创 jump label

这段代码的反汇编如下所示static inline bool test_idle_cores(int cpu, bool def){ struct sched_domain_shared *sds; if (static_branch_unlikely(&sched_smt_present)) { sds = rcu_dereference(per_cpu(sd_llc_shared, cpu)); .

2021-04-05 09:14:45 230

原创 Mos中线程调度器是rr

https://github.com/intel/mOS/blob/890456f8a51627ab695750d4934dac31f11a31e7/kernel/sched/mos.c/* mOS scheduler class function table */const struct sched_class mos_sched_class = { .next = &dl_sched_class, .enqueue_task = enqueue_task_mos, .dequ.

2021-02-19 20:29:49 358

原创 Mos的cpu up操作

Mos 有自己的cpu up函数,但是其实也是linux kernel的do_cpu_up的封装int lwkcpu_up(unsigned int cpu){ return do_cpu_up(cpu, LWKCPU_MAX_STATE);}由于要和linux kernel隔离cpu 来使用,所以如果这个cpu已经被linxu kernel boot起来了则booted为trueint lwkcpu_up_multiple(cpumask_var_t request, cpumask_va.

2021-02-19 11:01:28 451

原创 Mos 初体验

1:什么是MosMos是一款intel 开发的,针对HPC场景优化的os,目前已经开源,其开源网址为https://github.com/intel/mOS。2:Mos和linux kernel的区别。Mos 是在linux kernel的根目录下面加了一个mos的文件夹,里面放的是Mos的主要文件,总结一下,Mos就是内嵌到linux kernel中的一个轻量级os.3: Mos 的工作原理通过命令行参数 lwkcpus 和lwkmem 来隔离内存和cpu,或则通过lwkctl 来在li.

2021-02-18 20:10:55 141

原创 通过sysfs判断cpu是否支持smt

在kernel/cpu.c中为smt建立了一个sysfs的入口,代码如下:可以看到支持smt的cpu 有一下五种状态static const char *smt_states[] = { [CPU_SMT_ENABLED] = "on", [CPU_SMT_DISABLED] = "off", [CPU_SMT_FORCE_DISABLED] = "forceoff", [CPU_SMT_NOT_SUPPORTED] = "notsupported", [CPU_SMT_NOT_IM.

2021-02-18 14:41:50 46

原创 kernel对支持smt的cpu的启动

有一个疑问,支持smt的cpu,bios 传递给os的cpu的个数是开了smt后的还是没有开smt的呢?这里举个例子,例如支持smt2的cpu,其实还有支持smt4,smt8的cpu,例如ibm的power系列假如支持smt2,没有开smt的时候是16核,开了smt就是32核,那在开了smt后,bios就要告诉kernel 当前的cpu 核数是32,这点可以从下面的函数中发现端倪.static int cpu_up(unsigned int cpu, enum cpuhp_state target.

2021-02-18 11:26:05 61

原创 virtio 提供的hw_rng

hwrng 也提供了一种从virtio中获取真随机数的方法,代码在drivers/char/hw_random/virtio-rng.c中,通过前面的分析hw_rng的工作原理都清楚了,那我们看看做核心的read函数的实现vi->hwrng = (struct hwrng) { .read = virtio_read, .cleanup = virtio_cleanup, .priv = (unsigned long)vi, .name = vi->name, .qual.

2021-02-10 11:08:56 72

原创 optee 提供的hwrng

如果没有专门的硬件来hwrng,则客户用trustos的optee来产生hwrng,这个是的实现在driver/char/hwrng/optee-rng.c中,前面已经看过hwrng代码的架构,我们重点看看核心函数read的实现static struct optee_rng_private pvt_data = { .optee_rng = { .name = DRIVER_NAME, .init = optee_rng_init, .cleanup = optee_rng_clean.

2021-02-05 10:57:36 42

原创 hwrng相关的sysfs

在driver/char/hwrng/core.c中会生成一个文件系统如下:可以查询可以选择的hwrng,可以看当前选择的hwrng,以及手动选择hwrng./sys/devices/virtual/misc/hw_random/rng_current[root@ip134 /]# cd /sys/devices/virtual/misc/hw_random/[root@ip134 hw_random]# lsdev power rng_available rng_current rng.

2021-02-04 11:30:33 72

原创 内核硬件随机数/dev/hwrng的一些规则

不管是否支持hwrng 都可以看到/dev/hwrng 这个字符设备,如果有真正的hwrng,则只是增加这个hwrng的随机性而已,同一个hwrng不能重复注册,而且会根据每个hwrng的quality 来选择一个质量最好的hwrng。这里举例如下:drivers\crypto\hisilicon\trng.cprobe 中的核心代码如下:trng->rng.name = pdev->name;#这里提供的读取硬件随机数的方法 trng->rng.read = hisi_trn.

2021-02-02 09:58:03 217

原创 kernel调度域的初始化

kernel 调度支持多级,下面的例子就是支持2级调到,即第一级的MC和第二级的NUMA[root@localhost ~]# sysctl kernel.sched_domain.cpu0.domain0.namekernel.sched_domain.cpu0.domain0.name = MC[root@localhost ~]# sysctl kernel.sched_domain.cpu0.domain1.namekernel.sched_domain.cpu0.domain1.name.

2021-01-18 21:45:33 84

原创 每个内核版本支持的新特性

https://kernelnewbies.org/LinuxChanges例如1.2. Ext4 fast commit support, for faster metadata performanceMany applications use fsync(2) to ensure that data is reliably placed on disk. Such operation attempts to synchronize to the disk a few more metadat

2021-01-18 21:11:36 84

原创 linux 内存压缩技术

2021-01-14 10:21:48 91

原创 内存屏障sy/ld/st的详细解释

在arch/arm64/include/asm/barrier.h 中定义了一些内存屏障#define mb() dsb(sy)#define rmb() dsb(ld)#define wmb() dsb(st)#define dma_mb() dmb(osh)#define dma_rmb() dmb(oshld)#define dma_wmb() dmb(oshst)这里面的sy/ld/st的详细解释如下:https://www.keil.com/support/man/doc.

2020-12-18 10:50:13 223

原创 ACPI的forbidden_id_list

使用ACPI后,在driver/acpi/acpi_platform.c中会为bios 传过来的设备create device. 知道这个后,我们除了可以再grub中添加blacklist来禁止某个驱动外,还可以在driver/acpi/acpi_platform.c中的forbidden_id_list添加,这样kernel 就不会为这个设备创建device在driver/acpi/acpi_platform.c 中已经禁止的device如下static const struct acpi_devi.

2020-12-14 09:08:28 259

原创 centos 上安装phoronix-test-suite

1009 yum install php-cli php-xml -y 1010 wget https://github.com/phoronix-test-suite/phoronix-test-suite/archive/v9.8.0.tar.gz -O phoronix-test-suite-9.8.0.tar.gz 1011 tar -zxvf phoronix-test-suite-9.8.0.tar.gz 1012 cd phoronix-test-suite-9.8.0 10.

2020-12-07 15:49:43 295

原创 SPE

SPE是Armv8.2的特性,SPE 是一种使用随机抽样对程序一种动态分析禁止。要使用spe :1: defconfig中必须打开ARM_SPE_PMU 2: 启动命令行参数加kpti=off通过命令perf list | grep arm_spe 就可以确认perf 是否支持speperf record -a -c 1024 -e arm_spe_0/branch_filter=0,ts_enable=0,pa_enable=0,load_filter=0,sotre_filter=0,min.

2020-12-01 10:47:10 252

原创 修改kernel text 段为RW

kernel的text段是RO的,如果想改变text段为RW,可以关掉CONFIG_STRICT_KERNEL_RWX 和 CONFIG_STRICT_MODULE_RWX 这两个配置项#if defined(CONFIG_STRICT_KERNEL_RWX) || defined(CONFIG_STRICT_MODULE_RWX)bool rodata_enabled __ro_after_init = true;static int __init set_debug_rodata(char *.

2020-11-25 08:56:01 203

原创 通过kprobe在测量函数执行的时间

[root@localhost ~]# cd /sys/kernel/debug/tracing/[root@localhost tracing]# lsREADME current_tracer hwlat_detector printk_formats set_ftrace_filter stack_max_size trace_marker tracing_threshavail.

2020-11-23 15:11:37 131

原创 arm64 中的__virt_to_phys

在arm64上的线性映射区还是可以通过__virt_to_phys 来将虚拟地址转成物理地址,我们来看看其在arm64上的实现#define __virt_to_phys(x) __virt_to_phys_nodebug(x)#define __is_lm_address(addr) (!(((u64)addr) & BIT(vabits_actual - 1)))#low memory的虚拟地址到物理转换#define __lm_to_phys(addr) (((addr) &amp.

2020-11-23 10:36:45 209

原创 强制中断线程化threadirqs

kernel 提供了一个命令行参数threadirqs,这个参数会让irq 中断强制运行在thread context,这个时候不管用户是否设置中断线程化,都强制让中线运行在线程上下文中.static int __init setup_forced_irqthreads(char *arg){ force_irqthreads = true; return 0;}early_param("threadirqs", setup_forced_irqthreads);当命令行加threadir.

2020-11-23 09:18:28 141

原创 pyinstaller 打包

[root@localhost ~]# pip3 install pyinstallerWARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.Collecting pyinstaller Downloading https://files.pythonhosted.org/packages/9e/ed/fbdad7f5d8f..

2020-11-20 08:52:14 477 2

原创 centos 编译报错缺少openssl-devel包

scripts/extract-cert.c:21:10: fatal error: openssl/bio.h: No such file or directory #include <openssl/bio.h> ^~~~~~~~~~~~~~~compilation terminated.make[3]: *** [scripts/Makefile.host:95: scripts/extract-cert] Error 1make[3]: *** Waitin.

2020-11-16 11:49:02 670

原创 src.rpm 编译rpm 包

https://www.atoptool.nl/downloadatop.php 这个网址下载src.rpm 源码,通过rpm -ivh 安装源码打开spec 文件Name: atopVersion: 2.5.0Release: 1Source0: %{name}-%{version}.tar.gzURL: https://www.atoptool.nlPackager: Gerlof Lang.

2020-11-13 19:19:54 244

原创 64 bit的risc v 最大支持2G的模块空间

从下面的代码可以看出risc v 64bit时,留给模块的空间最大是2Glinux-master\arch\riscv\kernel\module.c#define VMALLOC_MODULE_START \ max(PFN_ALIGN((unsigned long)&_end - SZ_2G), VMALLOC_START)void *module_alloc(unsigned long size){ return __vmalloc_node_range(size, 1, VM.

2020-11-12 16:22:02 79

原创 risc v 支持64bit

从下面的代码看,risc v 也支持64bit,不像arm 分成arm和arm64两个目录,也就是risc 一个目录同时支持64bit和32bit,无法兼容的部分用defined(CONFIG_64BIT) 和 defined(CONFIG_32BIT)来区分.static void print_mmu(struct seq_file *f, const char *mmu_type){#if defined(CONFIG_32BIT) if (strcmp(mmu_type, "riscv,.

2020-11-06 10:57:59 202

原创 risc的loader.bin

risc v除了支持各种压缩格式的Image外,还支持一个loader.bin我们看看loader.bin是如何生成的arch/risc/boot/Makefile$(obj)/loader.o: $(src)/loader.S $(obj)/Image$(obj)/loader: $(obj)/loader.o $(obj)/Image $(obj)/loader.lds FORCE $(Q)$(LD) -T $(obj)/loader.lds -o $@ $(obj)/loader.o.

2020-11-02 09:21:08 337 1

原创 risc v的head.S

risc v kernel的入口代码在arch/riscv/kernel/head.S中#include <asm/thread_info.h>#include <asm/asm-offsets.h>#include <asm/asm.h>#include <linux/init.h>#include <linux/linkage.h>#include <asm/thread_info.h>#include <a.

2020-10-31 19:02:37 258

原创 查询suse中的包

不安装suse的系统,可以通过scc.suse.com/packages来查询suse的包,如下图所示

2020-10-28 19:09:21 163

原创 spi 发送系统reboot 命令

一台机器上的/dev/spidev2.0 可以相应另外一台机器上spi master发出的命令,从而可以控制slave的机器来进行关机重启等动作。具体源代码在drivers/spi/spi-slave-system-control.c中目前支持的命令有CMD_REBOOT/CMD_POWEROFF/CMD_HALT/CMD_SUSPEND 这四个命令static void spi_slave_system_control_complete(void *arg) { struct spi_slav.

2020-10-28 09:59:23 210

原创 通过用户态驱动来读写spi 设备

当有一个spi device的时候,但是不想再内核态写spi_driver的话,可以使能CONFIG_SPI_SPIDEV这样的话会生成一个spidev.ko ,插入这个ko后就可以在用户态open((“/dev/spidev0.0”), O_RDWR)的方式pen 这个设备然后通过SPI_IOC_WR_MODE/SPI_IOC_RD_MODE 设置SPI_MODE_0,设置SPI_IOC_WR_BITS_PER_WORD/SPI_IOC_RD_BITS_PER_WORD为25000000,设置SPI.

2020-10-17 14:31:36 456

原创 grub menuentry的位置的改变

在centos 8.2之前的grub的菜单中的entry,如下所示一般在boot/efi/EFI/centos/grub.cfg在centos 8.2之后已经在boot/efi/EFI/centos/grub.cfg中看不到menuenty,而是放到/boot/loader的目录中,猜测估计是grub的代码回去扫描这个目录,从而得到grub的菜单.其次通过catgrunenv可以得到当次是从那个entry进入的,这个在centos 8.2上同样适用...

2020-10-16 20:13:31 286

原创 kernel.sched_domain.cpu0.domain0.flags

[root@localhost ~]# sysctl kernel.sched_domain.cpu0.domain0.flagskernel.sched_domain.cpu0.domain0.flags = 4655其中4655的十六进制是0x11d6,这个值的含义是啥呢?在linux/sched/topology.h 中通过下面的值组合处理#define SD_BALANCE_NEWIDLE 0x0001 /* Balance when about to become idle */#de.

2020-10-12 08:55:54 272

原创 内核加固CONFIG_HARDENED_USERCOPY

如果内核开启CONFIG_HARDENED_USERCOPY,则在从user space copy 数据到kernel space 时做一些检查,如果不是有效数据,则assert这部分代码在mm/usercopy.c 中,即使开启CONFIG_HARDENED_USERCOPY,也可以通过命令行来禁止这个特性来提高部分性能static bool enable_checks __initdata = true;static int __init parse_hardened_usercopy(c.

2020-10-10 14:57:32 317

原创 源码编译gcc

yum update -yyum install -y gcc-c++ glibc-static gcc bzip2 wget tmuxcd ~wget https://ftp.gnu.org/gnu/gcc/gcc-10.1.0/gcc-10.1.0.tar.gztar -xzf gcc-10.1.0.tar.gzcd gcc-10.1.0./contrib/download_prerequisites# gmp-6.1.0.tar.bz2: OK# mpfr-3.1.4.tar.

2020-09-14 14:27:19 285

原创 按邮箱过滤 git log

[root@localhost src]# git log --oneline --author=linaro.comd02dc27db0dc ACPI / processor: Rename acpi_(un)map_lsapic() to acpi_(un)map_cpu()af8f3f514d19 ACPI / processor: Convert apic_id to phys_id to make it arch agnosticdc1956b5f84d Thermal: Add ST-E.

2020-09-10 10:54:09 267

空空如也

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

TA关注的人 TA的粉丝

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