per-cpu变量使用实例
本文提供了一个小module,包含整型变量和结构体变量的per-cpu变量定义、声明和初始化,以及变量引用。
/*
* per cpu sample code
* Copyright (C) 2024 Di
*/
#include <linux/cpu.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
/* int per cpu variable */
static DEFINE_PER_CPU(int, number);
/* struct per cpu variable */
struct food {
int apple;
int milk;
};
static DEFINE_PER_CPU(struct food, food_data);
/* set per cpu variable */
static void set_food_data()
{
unsigned int cpu;
for_each_possible_cpu(cpu) {
struct food *food = &per_cpu(food_data, cpu);
food->apple = 60;
food->milk = 120;
per_cpu(number, cpu) = 10;
}
}
/* get per cpu variable */
static void get_food_data()
{
unsigned int cpu;
for_each_possible_cpu(cpu) {
struct food *food = &per_cpu(food_data, cpu);
printk(KERN_INFO "CPU %d: number=%d, apple=%d, milk=%d\n",
cpu, per_cpu(number, cpu), food->apple, food->milk);
}
}
static int __init per_cpu_sample_init(void)
{
set_food_data();
get_food_data();
return 0;
}
static void __exit per_cpu_sample_exit(void)
{
return;
}
module_init(per_cpu_sample_init);
module_exit(per_cpu_sample_exit);
MODULE_DESCRIPTION("per cpu sample code");
MODULE_AUTHOR("DI");
MODULE_LICENSE("GPL v2");
insmod后log打印结果:
<6>[ 254.988663][ T8510] CPU 0: number=10, apple=60, milk=120
<6>[ 254.988669][ T8510] CPU 1: number=10, apple=60, milk=120
<6>[ 254.988672][ T8510] CPU 2: number=10, apple=60, milk=120
<6>[ 254.988675][ T8510] CPU 3: number=10, apple=60, milk=120
<6>[ 254.988678][ T8510] CPU 4: number=10, apple=60, milk=120
<6>[ 254.988681][ T8510] CPU 5: number=10, apple=60, milk=120
<6>[ 254.988685][ T8510] CPU 6: number=10, apple=60, milk=120
<6>[ 254.988687][ T8510] CPU 7: number=10, apple=60, milk=120
2024.7.29
【声明】本博文为个人学习笔记,仅供参考。转发请注明出处。如发现有误,还请不吝赐教,谢谢!