常用调优命令

sudo perf record -F 99 -p 3887 -g -- sleep 30sudo perf report -n --stdio生成火焰图git clone https://github.com/brendangregg/FlameGraph.gitperf script -i p...

2018-05-30 17:06:28

阅读数:40

评论数:0

cfs调度中进程最小运行时间是0.75ms

在sheduler_tick->task_tick_fair->entity_tick->check_preempt_tick 这个函数中会检查当前进程是否要 被调度出去,从这个函数中我们可以知道在cfg调度中一个进程最小运行时间是...

2018-05-29 11:50:00

阅读数:61

评论数:0

dpdk中的timer

dpdk 中有提供time没看负责定时操作,同时在example/timer中有提供一个测试code 可以告知大家如何使用time 没看 从meson.build中可以看出源文件只有一个main.c deps += 'timer' sources = files( 'main.c' ) 从mak...

2018-05-28 20:30:43

阅读数:175

评论数:0

kernel中ksm特性

ksm的全称是kernel samepage mergeing,主要用于合并内容相同的页面,只要用于虚拟机中 存在的大量的冗余页面。 在kernel中可以通过PageKsm 来判断一个页面是否是ksm页面 static __always_inline int PageKsm(struct page...

2018-05-28 16:32:22

阅读数:62

评论数:0

物理内存映射

kernel 通过paging_init来映射物理内存 void __init paging_init(void) { #为pgd申请内存并赋值,这时候还没有buddy system,因此在早期都是通过memblock来申请内存的 phys_addr_t pgd_phys = early_pg...

2018-05-26 15:04:01

阅读数:153

评论数:1

cpu子系统的组调度

组调度属于cgroup中的cpu子系统 cpu子系统的所有操作都在cpu_cgrp_subsys 中有定义 struct cgroup_subsys cpu_cgrp_subsys = { .css_alloc = cpu_cgroup_css_alloc, .css_online = cpu...

2018-05-25 19:49:54

阅读数:57

评论数:0

页面回收线程

在kernel中会为每个numa节点建一个内核线程kswapd,主要用于在内存不足时回收页面 static int __init kswapd_init(void) { int nid, ret; swap_setup(); #遍历所有的numa节点,每个numa节点调用kswapd_ru...

2018-05-25 16:33:48

阅读数:70

评论数:0

页面的反向映射

反向映射是指根据struct page数据结构找到所有映射到这个page的vma,反向映射主要用于kswaped和页面迁移. 反向映射主要调用try_to_unmap来进行 其源码分析如下: bool try_to_unmap(struct page *page, enum ttu_flags ...

2018-05-24 08:27:44

阅读数:160

评论数:0

页面锁

lock_page 可以占用这个页面,这样其他进程要使用这个页时只能在睡眠中等待 static inline void lock_page(struct page *page) { #这里提示在使用lock_page这个函数时会等待 might_sleep(); #检查是否可以锁定这个pag...

2018-05-23 14:17:29

阅读数:143

评论数:0

docker 性能debug

docker = namespace + cgroup + seccomp + capacity +selinux 遇到docker 性能,namespace可以用nsenters/setns 来debug cgroup 可以用cgexec来debug 其中seccomp/capacity/sel...

2018-05-22 19:42:02

阅读数:62

评论数:0

smp的负载均衡

在kernel中会注册一个软件中断来做负载均衡 __init void init_sched_fair_class(void) { #ifdef CONFIG_SMP open_softirq(SCHED_SOFTIRQ, run_rebalance_domains); endif /* SMP...

2018-05-22 14:39:00

阅读数:69

评论数:0

cpu的调度域初始化

cpu的调度域可以分为下面3类。目前arm都是用的mc static struct sched_domain_topology_level default_topology[] = { #ifdef CONFIG_SCHED_SMT { cpu_smt_mask, cpu_smt_flags, ...

2018-05-21 19:26:23

阅读数:71

评论数:0

mempolicy

vma目前有四种内存分配策略,这四种用法如下: * Support four policies per VMA and per process: * * The VMA policy has priority over the process policy for a page fault....

2018-05-18 14:57:11

阅读数:46

评论数:0

numabalance

numabalance的本意是让进程和其使用的memory在同一个numa节点上,这样延迟最小。但是这需要 调动器来做大量的工作来迁移进程和memory到同一个node上,这样对某些场景性能会有比较大的损耗。 一般debug时候如果perf top中看到迁移进程的函数则建议观点numabalanc...

2018-05-17 16:03:25

阅读数:161

评论数:0

ceph中用到的压缩引擎

ceph可以默认支持snappy/zlib/zstd,如果要支持lz4的话,必须打开宏HAVE_LZ4 set(compressor_srcs Compressor.cc) add_library(compressor_objs OBJECT ${compressor_srcs}) ## ...

2018-05-17 10:09:43

阅读数:168

评论数:0

arm64 页表映射

armv8最多支持48根地址,4级页表,这样最多支持user space和kernnel space 分别是256TB 其中user space占据低端地址 kernel可以支持48/42/39 根地址 # CONFIG_ARM64_VA_BITS_39 is not set CONFIG_ARM...

2018-05-16 19:29:17

阅读数:209

评论数:0

arm 的neon指令等同于arm64的asimd指令

在ceph 的src/test/test_arch.cc 中我们可以看到下面的code ,从kernel中的/proc/cpuinfo 中的feature 来判断arm是否支持neon指令,需要注意这个指令在armv8 之后被称为asimd指令 TEST(Arch, all) { ceph_a...

2018-05-16 09:34:47

阅读数:464

评论数:0

解开xz格式的initrd

原来suse 的initrd中也包含了ko啊

2018-05-14 20:37:45

阅读数:119

评论数:0

系统调用之getpid

这个函数用于获得线程组的领导线程的pid 其源码分析如下: SYSCALL_DEFINE0(getpid) { #这里可以看是当前进程 return task_tgid_vnr(current); } static inline pid_t task_tgid_vnr(struct task_...

2018-05-14 20:25:31

阅读数:251

评论数:0

ceph_perf_local

在ceph 源码ceph-master\ceph-master\src\test\CMakeLists.txt 中定义了一个ceph_perf_local的可执行文件,用于测试 不同平台对ceph性能的影响 #ceph_perf_local add_executable(ceph_perf_loc...

2018-05-14 14:34:34

阅读数:75

评论数:0

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