PVE 独显直通功耗优化

及时关闭Windows VS 保持Windows待机?

答案是保持Windows 待机。

关闭 Windows 虚拟机并不会使真实硬件断电,因此显卡仍会保持通电运行状态。由于显卡已经直通给了 Windows,PVE host 已经失去了对显卡的控制权。

这会导致显卡缺乏有效的软件控制,可能一直处于高负荷运转状态,反而造成更高的功耗和更大的噪音。

但是众所周知,Windows的待机功耗不尽如人意,有没有一种可以关闭Windows但不让核显失控的方式呢?

备用系统

我们可以创建一个尽可能精简和低功耗的系统,当Windows关闭之后来以最低成本接管显卡。

我选择创建一个Archlinux VM,可以根据我的需求高度自定义,比如不用compositor,display manager和DE/WM只需要tty。如果觉得麻烦可以使用Debian系统。

PVE 独显直通windows

Grub配置

参考 PVE 集成显卡直通飞牛OS

安装windows并启用远程登陆

首先我们使用默认显卡来安装windows (这样我们可以通过PVE console来查看当前画面) 安装过程可以参考 [1]

开机加载vfiomodule

编辑/etc/modules,加入以下內容

vfio
vfio_iommu_type1
vfio_pci

也许在其他教程中还会多加一个vfio_virqfd,不过在 kernel6.2 之后这个模块不再需要添加了,已经包含在vfio中了

编辑完成后使用update-initramfs -u -k all来更新 initramfs

PVE 集成显卡直通飞牛OS

更新Grub

编辑 /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="quiet iommu=pt initcall_blacklist=sysfb_init pcie_acs_override=downstream,multifunction"

💡 pve内核经常更新,amd_iommu=on有的内核已经内置,因此不需要上面加amd_iommu=on。如果遇到更新pve内核后,提示iommu没有开启,请手动在以上此处添加amd_iommu=on,并update-grub重启后即可解决。

  1. iommu=pt : 仅对直通设备启用IOMMU,减少性能开销
  2. initcall_blacklist=sysfb_init :启动时运行黑名单内添加项,在Intel的机型中,此项非必要添加,但是在amd机型中建议添加,否则会影响核显直通后的性能,比如4K60Hz降低到30Hz。 防止宿主机占用显卡帧缓冲区
  3. pcie_acs_override=downstream,multifunction 解决某些PCIe设备的ACS限制问题,避免死机

编辑 /etc/modprobe.d/pve-blacklist.conf

blacklist nvidiafb
blacklist amdgpu
options vfio_iommu_type1 allow_unsafe_interrupts=1

解释:屏蔽amd显卡驱动, options vfio_iommu_type1 allow_unsafe_interrupts=1 允许不安全的设备中断,在部分机型上不加此项会导致虚拟机启动加载转圈时直接宿主PVE卡死。

Delegate Azure domains to Cloudflare

Background

These days, I bought a domain (right one of this site) in Azure. I successfully assocciated this domain to my tiny site. After knowning that cloudflare offers free CDN and other advanced functions for free, so I decided to move the DNS host from default Azure to Cloudflare.

I thought it would be easy, after all I own the domain as I paid for it, However, Azure takes me aback, there is no option to transfer the authoritative DNS servers(nameservers) to outside.

Azure will automatically create a corresponding Azure DNS Zone after the doamin registered. Despite I can add or delete DNS records on it, there is no way to delete or replace the azure's existing NS and SOA records at apex level, as the doc, which unfortunately, is a must have when transfering DNS authority.

picture 3

Fortunately, the door was not fully locked, I finally made a way out.

ZJU校园网Openwrt路由器设置

Why

学校这边上网每次都要输入账号,有登陆设备数量限制,玉泉这边还要申请静态IP地址,每人只能申请两个,申请下来还需要隔天才能生效……真的是有多不方便就多不方便。不过还好,学校的上网协议是标准的L2TP VPN认证,这几天想着把压箱底的小米路由器mini拿出来试一试看看能不能的openwrt上拨VPN然后分享出来。

刷机

Warning

刷机有变砖的风险,最好先刷入breed 或 uboot做一层保护

今日头条笔试解题报告(10.17)

之前随便投了一下今日头条竟然过了,虽然不是很想去,但是已经给了我笔试邀约好歹也就做一下,锻炼锻炼脑子,说句实话还是挺喜欢头条的题目的,做起来很有以前ACM刷题的感觉,不像其他公司总感觉"工程化"比较多。

推箱子

第一题比较简单,表面上无从下手但是仔细想想应该能想出来的,本质上跟走迷宫问题本质上是一致的,只不过在这题中状态既要保存人的位置也要保存箱子的位置。暴力搜索能够,AC代码:

Hugo使用笔记

Hugo是spf13大神写的一个静态博客生成器,拥有仅次于Hexo的用户量。相比于Hexo,Hugo使用Go编写,生成速度快了很多。除此之外,Hugo的设计更加合理,文档也比较详尽,比较适合我这种喜欢从零开始折腾的技术宅。本博客就是在hugo上搭建的,使用了自己编写的主题: canoe

迁徙博文

因为我以前使用的hexo,已经拥有相当一部分博文了,所以我需要将原来hexo格式的博文转换到hugo中。其中主要的差异在于front matter,hexo使用YAML格式,这也是支持最为广泛的格式。hugo则默认是toml,但是同时可以支持yaml和json格式。个人感觉toml格式并没有多大的方便,倒是YAML格式支持的最为广泛,所以我还是在hugo中指定了使用YAML格式的front matter:

metaDataFormat = "yaml"

GraphQL Learn (1) - Queries and Mutations

在此页面上,你将详细了解如何查询GrahQL服务器。

字段(Fields)

最简单的,GraphQL是关于要求对象上的特定字段。我们先来看一个非常简单的查询,当我们运行它时得到结果:

{
  hero {
    name
  }
}
{
  "data": {
    "hero": {
      "name": "R2-D2"
    }
  }
}
可以看到,查询与结果的形状完全相同。这对于GraphQL是至关重要的,因为您总是收到您期望的内容,并且服务器确切知道客户端要求哪些字段。

GraphQL Learn (2) - Schemas and Types

在此页面上,您将了解有关GraphQL类型系统的所有知识,以及如何描述可查询哪些数据。 由于GraphQL可以与任何后端框架或编程语言一起使用,因此我们将远离实现特定的详细信息,仅讨论概念。

类型系统(Type System)

如果您以前看过GraphQL查询,那么你应该知道GraphQL查询语言基本上是在对象上选择字段。 所以在以下查询中:

{
  hero {
    name
    appearsIn
  }
}