[linux小水滴]per-cpu变量使用实例

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

【声明】本博文为个人学习笔记,仅供参考。转发请注明出处。如发现有误,还请不吝赐教,谢谢!

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值