如何在没有220v插座的图书馆优雅的用Surface Go 3码字
话说旧事
两年前的今天,在同学的安利下我开箱了一台Surface Go 3,但是出厂预装的Win11
家庭版22000
实在难用,主要就是一个字:烫。在i3-10100Y这个TDP-up有7瓦CPU上运行臃肿的Win11,再加上那128G寸土寸金的SSD属实是有点小才大用了,尤其是装了WSA之后。
不插电源用Win11两个小时就没电了!!
于是我给它装回了Win10 Iot LTSC 2021
系统。在获得流畅体验的同时,开始追求更加极客的玩法。
网上说装黑苹果可以提升Windows笔电的续航,但我装了Big Sur
之后续航不仅没有变好,撞温度墙的次数也不比Win11少。后续的Ventura
和Sonoma
系统也是如此,尽管台前调度确实好用。
离谱的是,Surface Go 3这东西开机的时候不会给SD卡卡槽上电,也就意味着我无法在SD卡安装系统。
于是我从Windows划了32G出来试了试ChromeOS
,一个基于Gentoo
的浏览器系统。在获得更好的安卓体验的同时,电脑也能更加凉快。但是ChromeOS还是限制太多,比如想要享受纯净的Linux体验,就得开个Debian
容器,要不然就是装chromebrew
,不爽。在多次尝试将ChromeOS
装到SD卡中,均以失败告终,因为无法认到在SD卡内的rootfs
。
甚至FydeOS官方对我的评价是…
Chromium OS跟一般的Linux不一样,不建议这么骚操作,我们官方不会出教程,你只能自己去尝试一下
更要命的是,经历过我几次在SSD内折腾黑苹果之后,内置硬盘的寿命仅在一年就消耗了3%
!!!
但是面对着捉襟见肘的空间,我打算放手搏一搏,死马当活马医,直接把ArchLinux
装到SD卡里。
前情提要
开机,进Arch Live CD
,把SD卡挂载到/mnt
,把ESP
挂到/mnt/boot
下,直接pacstrap
开跑。没想到啊,还成功了。查阅相关资料才知道,Surface会在加载initramfs
之后给SD卡卡槽上电。先不管ChromeOS
了,先把Arch整好再说。
⚠警告
请不要把swap
放到SD卡内,否则你的卡寿命会掉的很快。别说你买了延保就使劲造,回头丢数据了有你好哭的所以我直接把swap
关了
既然是个x86机器,那就想办法榨干它。vscode
, Obsidian
, syncthing
, Chrome
, Waydroid
, Android Studio
, Intellij Idea
啥的全怼进去。然后AS
在跑编译的时候就爆内存了,淦,下次不碰8G的电脑了
在跑Waydroid
的时候,最开始还挺流畅的,但后来越来越卡,然后又流畅一会儿,又卡一会儿。
这让我突然想到了之前Win11的时候,电脑老撞温度墙,一撞墙CPU就强制锁到399MHz
频率运行到降温为止。让我十分头大。
试着解决
突然想起来我在Windows上简单粗暴的调教温度墙的经历:直接用ThrottleStop
禁用牙膏厂的Turbo Boost
,然后电脑撑死就60度,上不去了。于是直接到Arch照搬这个操作。
一开始就是简单的关闭Turbo Boost
,将/sys/devices/system/cpu/intel_pstate/no_turbo
文件内容写为1,以此关闭Intel的p-state
下的睿频功能。
1 |
|
效果显著!Waydroid中运行12306
这个网页套壳的卖票软件(真不是星穹铁道)和飞常准
看飞机,苏菲就没撞过温度墙,一直50度很乖。就算我再开一个日益臃肿的最新版酷安,也是这个温度。
但是随之而来的问题是,两万毫安的充电宝只能撑大半天因为苏菲吸得是在太快了。就算平时开个Okular
看书,Obsidian
记笔记,再开个syncthing
同步,也只能勉强将温度维持到40度,一直降不下来。问题是我平时也用不到那么高的性能,为了防止性能过剩,怎么办呢?
对调度策略下手
之前查过很多资料,有更加精细粒度管理性能的(直接人工硬核介入CPU的时间片轮转),也有简单粗暴限制CPU最大占用率的。在目前看来,我的需求更倾向于限制最大运行频率。
初识cpupower
工具
cpupower is a set of userspace utilities designed to assist with CPU frequency scaling. The package is not required to use scaling, but is highly recommended because it provides useful command-line utilities and a systemd service to change the governor at boot.
The configuration file for cpupower is located in/etc/default/cpupower
. This configuration file is read by a bash script in/usr/lib/systemd/scripts/cpupower
which is activated by systemd withcpupower.service
. You may want to enablecpupower.service
to start at boot.
香啊,很香啊!这东西太符合我的要求了!直接对CPU性能一顿限制,防止性能过剩。
先把这软件装好:
1 |
|
然后就可以通过cpupower frequency-info
命令来查看当前CPU支持的模式信息:
1 |
|
好啊,很好啊!可以在400 MHz - 3.90 GHz
之间变频,支持performance
和powersave
两个策略。
但是我测了一下,
powersave
策略似乎并没有什么效果,所以不如直接限频。
然后我们请那个男人来看一看它限频的用法:
1 |
|
嗯~~很好,用法和参数都给的很清楚。
1 |
|
那,我们直接开炫限:
1 |
|
很快啊,桌面上的KDE小组件显示的频率就超不过700MHz了。
如果要恢复,先记住上面cpupower frequency-info
输出的提示第六行,就是CPU最高支持的频率,我这里是3.9GHz。那就把最大频率重新设置到3.9就行:
1 |
|
注意
这里的修改都是仅对本次开机有效,重启需要重新设置。
如何在开机的时候自动限频呢?
回忆一下上面Arch Wiki
说的,默认配置文件在/etc/default/cpupower
下,当启用服务cpupower
之后开机就会去读配置限频。
这个是默认配置文件:
1 |
|
我们依葫芦画瓢,按文件的第七、第八行,填入max_freq="700MHz"
后保存退出重启开机,频率就被默认限制到700Mhz了!
至此,这台苏菲总算变得轻快好使了,让它机如其名,正真的GO起来。
后话:死机了咋整
记不记得以前山寨机和电视机顶盒,总会有一个reset
按钮,当机器死机的时候拿根牙吴签戳一下,设备就会强制重启?
对你没看错,Linux内核也给我们提供了这个功能!对于表面走3这电子垃圾再合适不过了
根据Arch Wiki上的说法,我们只要启用sysrq
这个调用,就可以实现一些用户主动触发的控制内核行为:
Kernel (SysRq)
There are several low level shortcuts that are implemented in the kernel via theSysRq
key which can be used for debugging and recovering from an unresponsive system. Whenever possible, it is recommended that you use these shortcuts instead of doing a hard shutdown (holding down the power button to completely power off the system).
提示
SysRq
键被映射到键盘上的Prt Scn
功能键上了。注意使用的时候不要按下Fn
否则(Surface Go 键盘上)触发的是F8
而不是SysRq
了。
启用它也很简单,只需要在终端运行sysctl kernel.sysrq=1
或者 echo "1" > /proc/sys/kernel/sysrq
,然后就会自动启用这个功能。
但每次开机都得输一次,多麻烦!所以贴心的Linus先生给我们提供了一种传递内核参数的方式:将sysrq_always_enabled=1
这段内核参数添加到grub里。最后你的grub启动脚本应该是这样的:
1 |
|
这样你每次开机之后都默认启用了SysRq。
那么问题来了,死机之后怎么调用它来强行重启呢?
继续看Arch Wiki给我们的一张表:
Keyboard Shortcut | Description | Code to Enable | Other Functions Enabled |
---|---|---|---|
Alt+SysRq+r Unraw |
Take control of keyboard back from X. | 4 | Alt+SysRq+k SAK |
Alt+SysRq+e Terminate |
Send SIGTERM to all processes, allowing them to terminate gracefully. | 64 | Alt+SysRq+f OOM kill Alt+SysRq+j Thaw |
Alt+SysRq+i Kill |
Send SIGKILL to all processes, forcing them to terminate immediately. | ||
Alt+SysRq+s Sync |
Flush data to disk. | 16 | - |
Alt+SysRq+u Unmount |
Unmount and remount all filesystems read-only. | 32 | - |
Alt+SysRq+b Reboot |
Reboot | 128 | - |
也就是说,强制重启只需要按组合键alt 截屏 b
就行。有没有找回一点当年山寨机顶盒的感觉2333