关闭cpu

Linux双核cpu转为单核运行 echo 0 > /sys/devices/system/cpu/cpu1/online
若你机器是双核的cpu,上面命令使你的第二个内核停止运行。
这样/sys/devices/system/cpu/cpu1/下的所有关于第二个内核的文件消失。
单核运行,cpu很容易就飙到100的,只需移动一下窗口。不知道省电否。


echo 1 > /sys/devices/system/cpu/cpu1/online
恢复双核运行

cat /sys/devices/system/cpu/online 可以显示你的当前工作的cpu数。

echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
可以设置你的cpu为省电模式

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
可用的模式

# ls
affected_cpus related_cpus scaling_governor
cpuinfo_cur_freq scaling_available_frequencies scaling_max_freq
cpuinfo_max_freq scaling_available_governors scaling_min_freq
cpuinfo_min_freq scaling_cur_freq scaling_setspeed
cpuinfo_transition_latency scaling_driver stats

网上看到的脚本不知道是否管用
#!/bin/bash
# author: fcicq
# requirement:
# acpi,cpufreq
# a Dual Core CPU (like Intel core 2)
chkavg() {
thisloadavg=`cat /proc/loadavg | awk -F . '{print $1}'`
if [ $thisloadavg -ge 2 ]; then
# >2
if [ `cat /sys/devices/system/cpu/cpu1/online` -eq 0 ]; then
echo 1 > /sys/devices/system/cpu/cpu1/online
fi
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
cat /sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_max_freq > /sys/devices/system/cpu/cpu1/cpufreq/scaling_setspeed
elif [ $thisloadavg -ge 1 ]; then
# 1-2
if [ `cat /sys/devices/system/cpu/cpu1/online` -eq 1 ]; then
echo 0 > /sys/devices/system/cpu/cpu1/online
fi
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
else
# 0-1
if [ `cat /sys/devices/system/cpu/cpu1/online` -eq 1 ]; then
echo 0 > /sys/devices/system/cpu/cpu1/online
fi
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
fi
}
while true; do
chkavg
sleep 60
done

From: http://hi.baidu.com/black/item/4078cda5879bc6d85af19140
<think>好的,我现在要回答用户的问题:“msleep函数是否会关闭CPU中断”。首先,我需要回忆一下Linux内核中关于msleep函数的相关知识,并结合提供的引用内容进行分析。 根据用户提供的引用[1],msleep_interruptible和msleep都属于延时函数,其中msleep_interruptible可以被信号中断,返回剩余的毫秒数。而ssleep则是不可中断的睡眠。不过问题集中在msleep是否关闭CPU中断。 接下来,引用[3]提到nanosleep和sleep的区别,指出nanosleep可以被信号中断。但这里主要讨论的是进程的睡眠状态是否可中断,而不是CPU中断是否被禁用。用户的问题是关于CPU中断是否被关闭,这需要理解msleep在实现时如何处理中断。 通常,Linux内核中的延时函数如msleep会让当前进程进入睡眠状态,释放CPU资源。进程睡眠期间,CPU仍然可以响应中断,因为中断处理是独立于进程调度的。例如,当硬件中断发生时,CPU会暂停当前进程,处理中断,然后再继续执行。因此,msleep本身并不会关闭CPU中断,它只是让当前进程休眠指定的时间。此时,中断处理程序仍然可以运行。 引用[4]中提到了tasklet机制,属于中断下半部处理的一部分。tasklet的运行依赖于中断上下文,如果CPU中断被关闭,tasklet可能无法及时执行。但msleep不会影响中断的开启或关闭状态,它只涉及进程的调度。 进一步思考,msleep的实现可能涉及到将进程状态设置为TASK_UNINTERRUPTIBLE或TASK_INTERRUPTIBLE。根据引用[1],msleep对应的可能是不可中断的睡眠(如ssleep),但具体要看函数实现。然而,无论进程是否可被信号中断,这并不直接影响CPU中断的开启或关闭CPU中断是硬件层面的,由中断控制器管理,而进程睡眠是调度层面的概念。 总结,msleep函数不会关闭CPU中断。它仅仅使当前进程进入睡眠状态,期间CPU仍能处理硬件中断。如果需要确保某段代码不被中断打断,可能需要使用像spin_lock_irqsave这样的机制,但msleep本身并不涉及这些操作。</think>在Linux内核中,**msleep函数不会关闭CPU中断**。该函数的作用是使当前进程进入不可中断的睡眠状态(`TASK_UNINTERRUPTIBLE`),并释放CPU资源。在此期间,**CPU中断仍然保持开启**,系统可以正常响应硬件中断和调度其他任务[^1]。 ### 具体分析 1. **msleep的实现机制** msleep通过调用`schedule_timeout`实现延时,将进程状态设置为不可中断的睡眠。这意味着进程不会响应信号(如`SIGKILL`或`SIGTERM`),但**不会影响CPU中断的启用状态**。中断处理程序仍可抢占当前进程执行[^3]。 2. **中断与进程调度的关系** CPU中断是硬件机制,与进程调度无关。即使进程处于睡眠状态(如使用msleep),中断仍会触发中断服务程序(ISR),完成关键硬件事件处理(例如网络数据到达或磁盘I/O完成)[^4]。 3. **对比其他延时函数** - `msleep_interruptible`:进程进入**可中断睡眠**(`TASK_INTERRUPTIBLE`),可被信号唤醒,返回值是剩余睡眠时间。 - `ssleep`:通过`msleep`实现秒级休眠,同样不关闭中断。 - `udelay/mdelay`:忙等待函数,占用CPU但不涉及进程调度,中断仍可正常响应[^2]。 ### 需要关闭中断的场景 如果代码段需要严格避免中断干扰(例如操作共享硬件资源),应使用: - `local_irq_disable()` 关闭本地CPU中断 - `local_irq_enable()` 重新启用中断 但这与msleep无关,且需谨慎使用以避免系统不稳定。 ### 示例代码(进程休眠) ```c #include <linux/delay.h> void example_function(void) { msleep(100); // 进程休眠100ms,期间CPU中断仍有效 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值