systemctl suspend VS pm-suspend
因为 RHEL 7 及其衍生版 CentOS 7.0 和 Oracle Linux 7.0 的相继发布,开始系统地学习 systemd ;-D
RHEL 7 的文档是一如既往的棒,而且红帽系的血统纯正,拿来当参照物学习再好不过的选择了。虽然之前在 Arch Linux 上用 systemd 已近两年(2012年10月起 systemd
就成为新安装系统的默认 init
系统),但仅停留在需要用到什么用什么学习什么的层次。
最近看 RHEL 7 的文档注意到 systemctl
工具已经替换了旧的 pm-utils
包提供的电源管理命令,建议尽可能使用 systemctl
命令来做相关的电源管理操作,比如 {halt,poweroff,reboot,pm-suspend}
等。
此前三星在 N148 上网本上 sleep 都是通过 pm-utils
里的 pm-suspend
做的,看完文档决定试了一下 systemctl suspend
结果发现后者快多了!
花了点时间一探究竟,简单的说 systemd
完全是新的实现,没有调用 pm-utils
中的命令,和后者没有关系。
从技术上来讲 systemctl suspend
的过程是这样的
systemctl suspend
进入目标suspend.target
该目标绑定的服务是
systemd-suspend.service
这个服务调用的底层命令是
/usr/lib/systemd/systemd-sleep suspend
做了十几次测试,结论是systemctl suspend
比pm-suspend
快的根本原因是前者在 user mode (用户模式)和 kernel mode (内核模式,主要是系统调用)下执行所消耗的 CPU 时间之和远小于后者。
在三星 N148 上测试的结果为: systemctl suspend
在用户模式+内核模式执行共消耗时间约0.01秒,而后者超过2秒!因为用了最新的 3.16 内核,可能还受益于 Linux 3.15 中加入的 SATA HDD 异步快速恢复特性。
如图(忽略 _real _与测试无关)
此外,在 CentOS 7.0 的台式机上测试 systemctl suspend
速度也非常快。所以,是时候和 pm-utils
说再见了。
Enjoy systemd
:-D