win10如何开高性能 (win10如何开高性能模式)

家里有个配置可观的台式机,但苦于噪声和耗电,基本处于关机状态。这个对于偶尔需要远程登陆该机器的需求就不太可能满足,更不谈远程控制了。 为此探究了一下电脑的远程唤醒功能,并且给家里的台式机配置了该功能,从此无论何时何地,只要有个轻终端和网络就能如同在家一样折腾这个工作站了。

介绍

家里有个自己 DIY 组装的台式机,最初对它的设想是既能充当让我折腾的工作站也满足我娱乐的平台。为此给它安装了双系统,Ubuntu 是它的默认系统,也是我常用的工作环境; Win10 是另一个系统,偶尔用它来打打游戏。一开始想将它当做服务器一直开机,但后来直接放弃了。原因一方面是运行时水冷风扇还有有声的,特别是夜深人静的时候;另一方面是一天大部分时间都在公司上班,不可能比较高频的操作家庭电脑,比较浪费电。所以家里的电脑基本就是下班回来会捣鼓捣鼓,而且还是通过公司提供的 Mac 电脑局域网远程登陆,毕竟台式机开机登陆也挺耗时的。最近突发奇想的搜索了远程开机的信息,想以此来达到想用就开机,不用就自动休眠或手动关机的目的。没想到还真有这骚操作,学名叫远程唤醒或网络唤醒,英文叫 Wake-on-LAN。

基本概念

在实践网络唤醒之前,我们需要了解一下网络唤醒的原理以及唤醒方法。

网络唤醒

电脑处在关机(或休眠)状态时,机内的网卡及主板部分仍保有微弱的供电,此微弱供电能让网卡保有最低的运作能力,使网卡能聆听来自电脑外部的网络广播信息,并对信息内容进行侦测与解读,一旦发现网络广播的内容中有特定的魔法数据包Magic Packet,就会对该数据包的内容进行研判。

魔法数据包是以广播方式发送的,广播的方式与范畴可以是整个局域网(LAN),也可以是特定的子网(Subnet),同时魔法数据包内会有某部(或一群)电脑的网络地址资料,网卡一旦解读研判出所指的地址是自身所处的电脑时,网卡就会通知机内的主板、电源供应器,开始进行引导(或唤醒)的程序。

魔法数据包

魔法数据包Magic Packet 是一个广播性的帧frame,透过端口 7 或端口 9 进行发送,且可以用无连接 Connectionless protocol 的通信协议(如UDP、IPX)来传递,不过一般而言多是用 UDP,原因是 Novell 公司的 Netware 网络操作系统的IPX协议已经愈来愈少被使用。

魔法数据包内,每次都会先有连续 6 个 FF(十六进制,换算成二进制即:11111111)的资料,即:FF FF FF FF FF FF,在连续 6 个 FF 后则开始带出 MAC 地址信息,有时还会带出 4 字节或 6 字节的密码,一旦经由网卡侦测、解读、研判(广播)魔法数据包的内容,内容中的 MAC 地址、密码若与电脑自身的地址、密码吻合,就会启动唤醒、引导的程序。

实战硬件基础

要想实现电脑的网络唤醒 WOL,首先必须要有具备 WOL功能的主板和网卡(二者一般是一体的)。这是硬件基础,现在的主板一般都会支持网络唤醒的功能,但是默认情况不一定启用该功能,需要在 BIOS 中开启 PCI/PCIe 唤醒功能或网卡唤醒功能。

我的主板是微星 Z270 GAMING M7,网卡是 Killer E2500 Gigabit。该主板开启网络唤醒功能需要通过开机过程中,长按 DELETE 键进入 BIOS 进行如下设置:

?高级-整合周边设备-网卡 ROM 启动,设置为允许

rom

?高级-电源管理设置-Erp,设置为禁止

erp

?高级-唤醒事件设置-PCIE 设备唤醒,设置为允许

pcie

软件基础

除了硬件支持外,还需要在操作系统中设置网卡的唤醒功能。而网卡的唤醒功能是需要网卡驱动支持的,这是 Ubuntu 升级过程中通过踩坑明白的道理。 下面列举了 Win10 操作系统和 Ubuntu 系统下的设置。

windows

Window 系统中驱动是很健全的,所以只要对应的主板和网卡硬件支持网络唤醒功能,那么对应的驱动基本没有问题。那就只剩下最后一步: 设备管理器-网络适配器-电源管理-允许这个装置唤醒电脑

setting_win10

ubuntu

Ubuntu 的版本是 20.04 LTS,其默认内核版本为 5.4.x。因为该版本距今两年多,所以其对应的网卡驱动 alx-driver 已经支持远程唤醒 wol 功能。 为了验证当前网卡是否开启对远程唤醒功能的支持,需要安装软件 ethtool。

# 安装软件 ethtoolsudo apt-get install ethtool -y# 验证当前网卡 enp5s0 是否开启 wol 支持sudo ethtool enp5s0

Ubuntu 系统安装的 20.04 LTS,后来升级为 22.04 LTS(升级过程中踩了默认驱动不支持 wol 的坑,查了好多资料才填了这个坑).

ubuntu_wakeon

默认情况如上图,Supports Wake-on表示当前驱动支持的远程唤醒方式,候选项有以下几种。wake-on表示当前远程唤醒的方式。

选项

描述

含义

d

电脑disabled

不支持远程唤醒

p

PHY activity

物理唤醒

u

unicast activity

单播唤醒

m

multicast activity

多播唤醒

b

broadcast activity

广播唤醒

g

magic packet activity

魔法包唤醒

其中选项 g 是开启远程唤醒功能的标识。

# 设置 enp5s0 网卡驱动支持魔法包唤醒sudo ethtool -s enp5s0 wol g# 设置 enp5s0 网卡驱动永久支持魔法包唤醒,需要重启两次nmcli c modify enp5s0 802-3-ethernet.wake-on-lan magic

ubuntu_setting

内网通

软硬件基础都搞定后,下面一步就是在内网(局域网)中通过魔法包唤醒目标机器。唤醒的方法这里提供两种:

?命令唤醒

操作机器和目标机器需要在同一个局域网中,操作机器需要安装 wakeonlan 命令。

# 安装 wakeonlan 命令sudo apt install wakeonlan# 命令唤醒 ## host_address为远程计算机的域名或ip地址## mac_address为远程计算机的mac地址,mac地址是':'间隔的形式wakeonlan -i host_address mac_address

?app唤醒 在软件市场中搜索 Wake-On-Lan 或 WOL 可以找到相关软件

外网通

网上有相关教程[1],大致流程分为三步:

? DDNS绑定域名和动态公网IP 鉴于 家庭宽带在桥接模式 下路由器会获取公网 IP,但是这个公网 IP 是会变化的。所以最好通过 DDNS 将不变的域名和变化的公网 IP 绑定在一起。我这里使用的是 ddns-go。

? 设置 IP 和 MAC 绑定 网络唤醒的核心是将魔法数据包发送给目标机器,如果数据包中的 MAC 和目标机器一致则会触发唤醒引导程序。而路由器下面有多个终端机器,所以需要将路由器下终端机器和其 MAC 地址一一绑定,这样如果有魔法数据包经过路由器时,路由器知道将该包路由到哪台机器。

? 设置端口映射 注意 IP 地址与目标机器的 IP 一致,也就是刚才 MAC 绑定时的 IP 地址,端口随便开一个就行(但是不要用运营商封禁的端口,推荐使用 9 端口)。另外协议类型选择 UDP 或者ALL!!因为唤醒数据包是通过 UDP 协议发送的,所以协议类型只选择 TCP 协议的话数据包是进入不了内网的!!

上面的三步我依次操作了,但是没有成功。目前还没有定位的具体原因。不过我通过另一种方式解决了外网远程唤醒的问题:远程登陆到家庭 Nas(该机器是 24 小时不关机的),然后通过 wakeonlan 命令在局域网中唤醒目标机器。

常见问题系统升级带来的问题以及解决

当时是奔着高性能买的这款微星主板 Z270 GAMING M7,网卡是 Killer E2500 Gigabit,号称可以干掉游戏延迟。不过 Ubuntu 中对这块网卡的驱动支持并没有那么通用,在系统升级(20.04 LTS 升级到 22.04 LTS)中还是碰到比较麻烦的驱动支持问题。这里特地记录了一下解决过程。

从这个帖子[2] 我们知道,网卡 Killer E2500 Gigabit 的驱动是 alx,但是该驱动默认是关闭远程唤醒功能的。如果想要开启该功能需要内核支持。看遍了该帖子发现对于最新的 Ubuntu 22.04 LTS(内核 5.15) 并没有直接的解决方案。但是发现对于内核 5.16.3 有了 alx 补丁,所以有了如下的升级内核的解决方案。

? 升级内核到 5.16.3

? mainline 方式[3] 该方式未生效,主要是 Ubuntu Mainline Kernel Installer 中只有 2 个内核版本

? deb包方式[4] 简单直接

? 安装 alx 补丁 下载仓库[5],并执行 ./setup

? 重启后验证

alx_fix

目前已经验证成功,为此还提了 request[6] 给仓库。

参考文献网络唤醒[7]archlinux中网络唤醒[8]外网唤醒 配置教程 远程开机[9]Wake-on-LAN broken in alx[10]alx_driver[11]ubuntu 22.04LTS alx补丁[12]如何在Ubuntu中安装Linux主线内核[13]内核deb包[14]alx_dkms_installer支持22.04LTS[15]References

[1] 相关教程: https://blog.csdn.net/qq_19764639/article/details/82817719
[2] 帖子: https://bugzilla.kernel.org/show_bug.cgi?id=61651#c166
[3] mainline 方式: https://www.sysgeek.cn/ubuntu-install-linux-mainline-kernel
[4] deb包方式: https://kernel.ubuntu.com/~kernel-ppa/mainline
[5] 仓库: https://github.com/haojunyu/alx_dkms_installer
[6] request: https://github.com/AMV007/alx_dkms_installer/pull/5
[7] 网络唤醒: https://zh.wikipedia.org/wiki/%E7%B6%B2%E8%B7%AF%E5%96%9A%E9%86%92
[8] archlinux中网络唤醒: https://wiki.archlinux.org/title/Wake-on-LAN#Wake-up_after_shutdown
[9] 外网唤醒 配置教程 远程开机: https://blog.csdn.net/qq_19764639/article/details/82817719
[10] Wake-on-LAN broken in alx: https://bugzilla.kernel.org/show_bug.cgi?id=61651#c166
[11] alx_driver: https://wiki.linuxfoundation.org/networking/alx
[12] ubuntu 22.04LTS alx补丁: https://github.com/AMV007/alx_dkms_installer/pull/5
[13] 如何在Ubuntu中安装Linux主线内核: https://www.sysgeek.cn/ubuntu-install-linux-mainline-kernel
[14] 内核deb包: https://kernel.ubuntu.com/~kernel-ppa/mainline
[15] alx_dkms_installer支持22.04LTS: https://github.com/haojunyu/alx_dkms_installer