手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:Linux

[知道分子]Linux 省电十招

我的笔记本装上ubuntu后,只能使用4小时不到,但使用xp可以将近7小时。所以看到这个标题的时候就激动的记录了下来。。

原文:http://hutuworm.blogspot.com/2009/04/linux.html


1. Linux Kernel 2.6.21 开始支持 Tickless(此前的内核默认设置为 1000Hz timer tick),于是系统空闲时不再无故骚扰 CPU,可以节省大量能耗。Fedora 7+ 以及目前的 Ubuntu Linux 发行版都含有 Tickless 特性,而 RHEL 则要到版本 6 才会随新版本内核正式支持该特性(预计 2010年上市)。检查你的 Linux 系统是否支持 Tickless: watch --interval=1 cat /proc/interrupts ,若 timer 中断值并非以 1000 为步进单位增加,则说明该内核支持 Tickless。

2. 编译内核(make menuconfig):

  • 启用 Tickless: Processor type and features -> [*] Tickless System (Dynamic Ticks)
  • 启 用 CONFIG_USB_SUSPEND: Device Drivers -> USB support -> [*] USB selective suspend/resume and wakeup (自动禁用 UHCI USB,可以节省约 1 watt)

3. PowerTOP 可以找出计算机闲置时哪些进程耗电最多。(Kernel Hacking -> [*] Collect kernel timers statistics) 详见: http://www.lesswatts.org/projects/powertop/

4. 启用 power aware CPU scheduler(Scheduler Power Saving Mode): echo 1 > /sys/devices/system/cpu/sched_mc_power_savings

5. RHEL 5.3 支持 Intel Core i7 (Nehalem) 的电源管理功能。

6. 启用 irqbalance 服务,既可以提升性能,又可以降低能耗。irqbalance 用于优化中断分配,它会自动收集系统数据以分析使用模式,并依据系统负载状况将工作状态置于 Performance mode 或 Power-save mode。处于 Performance mode 时,irqbalance 会将中断尽可能均匀地分发给各个 CPU core,以充分利用 CPU 多核,提升性能。处于 Power-save mode 时,irqbalance 会将中断集中分配给第一个 CPU,以保证其它空闲 CPU 的睡眠时间,降低能耗。(详见:http://www.irqbalance.org/documentation.php

7. 禁用 pcscd,该进程会阻碍 USB 子系统进入 Power-save mode。

8. 将 VM dirty writeback time 延长至 15 秒: echo 1500 > /proc/sys/vm/dirty_writeback_centisecs

9. 启用 noatime 文件系统选项: mount -o remount,noatime / (noatime 禁止更新 atime,可以节省大量 I/O,但为了避免 atime 相关应用程序出现问题,建议启用 relatime 代之: mount -o remount,relatime / ,relatime 自 Kernel 2.6.29 起为默认设置。)

10. 禁止 hal 轮询你的 cdrom: hal-disable-polling --device /dev/cdrom

* 关于 Linux 节能的更多信息,请看: http://www.lesswatts.org

Tags: 省电

SSH连接时的乱码解决方法

ssh连接时,发现屏幕上一堆乱码,恐怕这种事情谁都遇到过吧。(我是使用SSH secure shell登录的)
这种情况的发生大多是安装时,语言包选择为中文导致的。一般有以下几种解决方法

1、RH(估计centOS也行)
vim /etc/sysconfig/i18n
内容改为:
LANG="zh_CN.GB18030"
LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"
SYSFONT="lat0-sun16"

2、UBUNTU
中文版的ubuntu遇到这种问题,可以尝试使用putty,因为putty可以通过修改 font, character set 设置来解决。
设置:
Window -> Appearance -> Font settings 选择宋体或新宋体:
Window -> Translation -> Character set translation on received data 选择 UTF-8:
然后基本就没有问题了,

或者尝试使用secureCRT登录,这款软件也能够自动识别。

再或者尝试把语言换为英文?
修改Ubuntu的命令行语言环境的2个步骤:

1、修改/etc/default/locale
如不存在则新建一个
如下:
LANG='en_US' #中文可以用zh_CN
LANGUAGE='en_US:en' #中文可以用zh_CN:zh

2、reboot即可
locale命令可以列出当前系统所用的所有语言设置

即使你搜索google,基本上也只有这几种解决方案了。呵呵,全部列出来,希望有用

Tags: linux, ssh, 乱码

SSH Client 会话空闲超时的解决办法

摘抄这一篇文章的内容,是因为这两天正好用到。
SSH连接上服务器后,人走开了,或者去忙其他事情了,结果回来一看,光标不动了。原来已经断却了连接。
看到这篇文章是24号,遇到问题是27号,因为对文章有印象,所以继续打开一看,原来我已经打上星标了。所以,摘抄下来。希望给其他使用UBUNTU的人也多一次GOOGLE搜索的命中率。

原文链接:SSH Client 会话空闲超时的解决办法

原文内容:

最近工作时经常要同时维护 3 台 Ubuntu 的主机,但当 SSH Client 窗口在几分钟没有键盘操作的时候,会话就会超时断线,特别对于 SFTP 管理时会更加烦躁 :(

找了一些关于 SSH Server 的资料,发现通过修改 sshd 的配置文件,能够让 SSH Server 发送“心跳”信号来维持持续连接,下面是设置的内容

打开服务器 /etc/ssh/sshd_config,我在最后增加一行

ClientAliveInterval 60
ClientAliveCountMax 1

这 样,SSH Server 每 60 秒就会自动发送一个信号给 Client,而等待 Client 回应,(注意:是服务器发心跳信号,不是客户端,这个有别于一些 FTP Client 发送的 KeepAlives 信号哦~~~),如果客户端没有回应,会记录下来直到记录数超过 ClientAliveCountMax 的值时,才会断开连接。

当然也可以开启 top 命令,还可以监测机器状态。

Tags: ubuntu, ssh

oracle收购sun

这段时间最大的新闻莫过于SUN被收购了,收购人不是IBM而是oracle
新闻那是铺天盖地呀,去CNBETA看看就知道了,但对于我来说,关心的只有几点:

1、MYSQL会怎么个走法?
2、以后java会怎么继续
3、服务器价格会下降吗?

更多新闻请google一下就知道了

Tags: mysql, oracle, sun, ibm

重拾:自己动手做一个最小的Linux kernel

文章来自至顶网,两年前的内容,只是感觉好象不错,就复制了过来。
原文链接如下:
http://soft.zdnet.com.cn/software_zone/2007/1022/570485.shtml
http://soft.zdnet.com.cn/software_zone/2007/1020/568251.shtml

很难想象,2居然比1先出来。

Linux 能有多小呢 ? 每一个做 embedded 系统的人都把小看成第一要务,其实这是不对的。小当然不会比较坏,但不一定比较好。如果系统使用 4MB 和 5MB 没有价格或性能上的差别,那 4MB 和 5MB 是一样好的。

到底有多小

废话说了一堆,那到底 Linux 有多小呢? 好吧,各位这么有小牛顿的精神。我也只好想办法生一个答案出来了。

首先我必须声明,我的不一定最小。不要说我在欺骗世人,你的核心比我小。我无意比较,我的数据只是给大家一个参考而己。不过我欢迎大家提出自己的心得,告诉大家怎么样做出更小的核心。

我使用的是 Mandrake 内付的 2.2.15,我没有修改任何一行程序码,完全只靠修改组态档得到这些数据。

首先,使用 make xconfig 把所有可以拿掉的选项都拿得。

不要 floppy;

不要 SMP,MTRR;

不要 networking,SCSI;

把所有的 block device 移除,只留下 old IDE device;

把所有的 character device 移除;

把所有的 filesystem 移除,只留下 minix;

不要 sound 支援。

相信我,我己经把所有的选项都移除了。这样做之后,我得到了一个 188K 的核心。 还不够小吗? OK,再加上一招,请把下列二个档案中的 -O3,-O2 用 -Os 取代。

 

./Makefile 
./arch/i386/kernel/Makefile

这样一来,整个核心水小了 9K,成为 179K。不过这个核心恐怕很难发挥 Linux 的功能,因此我决定把网络加回去。把 General 中的 network support 加回去,重新编译,核心变成 189 K。10K 换个 TCP/IP stack,似乎是很上算的生意。不过有 stack 没有 driver 也是惘然,所以我把 embedded board 常用的 RTL8139 的 driver 加回去,195K。

如果你需要 DOS 档案系统,那大小成为 213K。如果 minix 用 ext2 换代,则大小成长至 222K。不过大家要注意,那里的大小指的是核心档的大小。那和所需要的随取记忆体是二回事。这个数字代表的意义是你需要多小的 ROM 来存放你的核心。

Linux 所需的记忆体大约在 600~800 K 之间。1MB 可能可以开机了,但可能不太有用。因为可能连载入 C 程序库都有困难。2MB 应该就可以做点事了,但可能要到 4MB 以上才可以执行一个比较完整的系统。

到底谁占了这些空间

看到这里,是不是觉得 Linux 真的有点大。好吧! 那我们就来看看谁占用了这些空间,下面这个列表是从 222K 这个核心做出来的。

 

# wc  
arch/i386/kernel/kernel.o arch/i386/mm/mm.o kernel/kernel.o mm/mm.o fs/fs.o
ipc/ipc.o
fs/filesystems.a
net/network.a
drivers/block/block.a
drivers/char/char.a
drivers/misc/misc.a
drivers/net/net.a drivers/pnp/pnp.a
/usr/src/smalllinux/arch/i386/lib/lib.a
/usr/src/smalllinux/lib/lib.a
/usr/src/smalllinux/arch/i386/lib/lib.a

结果如下 :

 

243 2250 81946 arch/i386/kernel/kernel.o 
42 316 10569 arch/i386/mm/mm.o
173 1541 74660 kernel/kernel.o
266 2307 68053 mm/mm.o
222 3139 123193 fs/fs.o
49 602 21600 ipc/ipc.o
263 2940 106504 fs/filesystems.a
137 1510 65512 net/network.a
92 719 39178 drivers/block/block.a
230 2308 87556 drivers/char/char.a
1 1 8 drivers/misc/misc.a
83 721 25680 drivers/net/net.a
1 1 8 drivers/pnp/pnp.a
20 187 9526 /usr/src/smalllinux/arch/i386/lib/lib.a
23 150 7714 /usr/src/smalllinux/lib/lib.a
20 187 9526 /usr/src/smalllinux/arch/i386/lib/lib.a
1865 18879 731233 total

先说明一下,这里的大小和最终的大小有点差别,但大致还是可以做个参考。这边显示 730K 实际上大约在 600K 左右。

很显然的,filesystem 相当的大。大约在 230K 左右,占了 1/3 的体积。记忆体管理占了 80K,和核心其它部份的总合差不多。TCP/IP stack 占了 65K,驱动程序占了 120K。SysV IPC 占了 21K,必要的话可以拿掉,核心档应该可以再小个 10K 左右。

所以如果要减核心大小,应该动那里呢? 答案应该很明显,当然是档案系统。Linux 的 VFS 减化了档案系统的设计,buffer cache, directory cache 增加了系统的效率。但这些对整个系统都在 flash 上的 embedded 系统而言根本就用处不大。如果可以把它们对拿掉,核心可以马上缩小 20K 左右。如果跳过整个 VFS,直接将档案系统写成一个 driver 的型式,应该可以将 230K 缩减至 50K左右。整个核心缩到 100K 左右。

从上面的数据来看,ucLinux 所减小的 mm 部份反到省的不多,主要是 mm 除了 virtual memory 之外,也要处理 memory allocation 的部份,这部份是省不得的。如果二者齐做,则 100K 以下的 Linux 核心不是不可能的事。

结语

如果有人有闲的话,不妨拿 2.0 或 1.0 的核心来试试。看能做出多小的核心。看完本文后,143K 的核心不再是技术上的挑战了,是吗? 也许明天就有人宣称做了 120K 的核心了。不过,所为何来,省那几十K。不如好好想想 compressed filesystem 等更有用的技术吧!

Tags: linux, kernel