ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

per cpu variable

2021-12-21 12:34:55  阅读:181  来源: 互联网

标签:vm per event states item variable cpu


per cpu variable

per cpu变量可以export出来给其它模块使用

方法:

1.define per cpu variable

DEFINE_PER_CPU(struct vm_event_state, vm_event_states) = {{0}}; EXPORT_PER_CPU_SYMBOL(vm_event_states);

2.declare per cpu variable

在你需要使用这个per cpu变量的模块里declare它后即可在这个模块里使用它了

DECLARE_PER_CPU(struct vm_event_state, vm_event_states);

 

对struct类型per cpu变量里的field进行per cpu操作

4.19/mm/vmstat.c

#ifdef CONFIG_VM_EVENT_COUNTERS
DEFINE_PER_CPU(struct vm_event_state, vm_event_states) = {{0}};
EXPORT_PER_CPU_SYMBOL(vm_event_states);

 

 

include/linux/vmstat.h

struct vm_event_state {
    unsigned long event[NR_VM_EVENT_ITEMS];
};

DECLARE_PER_CPU(struct vm_event_state, vm_event_states);

/*
 * vm counters are allowed to be racy. Use raw_cpu_ops to avoid the
 * local_irq_disable overhead.
 */
static inline void __count_vm_event(enum vm_event_item item)
{
    raw_cpu_inc(vm_event_states.event[item]);
}

static inline void count_vm_event(enum vm_event_item item)
{
    this_cpu_inc(vm_event_states.event[item]);
}

static inline void __count_vm_events(enum vm_event_item item, long delta)
{
    raw_cpu_add(vm_event_states.event[item], delta);
}

static inline void count_vm_events(enum vm_event_item item, long delta)
{
    this_cpu_add(vm_event_states.event[item], delta);
}

 

以上面raw_cpu_inc()为例,它是基于vm_event_states.event[item]的地址加上__my_cpu_offset得到(this cpu)的地址,然后将这个地址上的数据(unsigned long型)加1。
所以可以看到per cpu变量是vm_event_states,这个per cpu变量是struct类型的,但是还是可以对这个struct里的field进行per cpu操作:
#ifndef arch_raw_cpu_ptr
#define arch_raw_cpu_ptr(ptr) SHIFT_PERCPU_PTR(ptr, __my_cpu_offset)
#endif

 

标签:vm,per,event,states,item,variable,cpu
来源: https://www.cnblogs.com/aspirs/p/15714732.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有