無標題文檔

Clear Linux 下 KVM 硬件直通配置

前言

Clear Linux 是针对 Intel 平台的滚动 Linux 发行版。它有很多优势,我个人目前主要用来针对老机型(四代酷睿平台)的裸机运行派台,并主要用来跑虚拟机。

由于 Clear Linux 是过于强调精简的发行版,因此配置方面需要额外的精力,所在这里针对 KVM 虚拟机的配置做个记录。

BIOS 配置

针对硬件直通这块,首先需要 CPU 的支持,四代平台支持 VT-D 功能的不多,主要集中在 i5、i7 的 CPU。个人购买过四代 i3 的 CPU 发现并不支持硬件直通,所以又退款换货非常的折腾。

了解了支持的 CPU 以后,然后在 BIOS 中对应的开启虚拟化以及 VT-D,这里就不表。

内核配置

和其他的发行版不同,Clear Linux 的引导器是 Intel 自己研发的 clr-boot-manager。内核的参数文件具体的文件路径在 /etc/kernel/cmdline.d/ 这个目录中,然后对应的示例文件 iommu.conf:

intel_iommu=on iommu=pt vfio_iommu_type1.allow_unsafe_interrupts=1 vfio-pci.ids=<id>,<id>

这个 ID 是 PCI ID,对应的可以使用 lspci -nn 获得,例如列出网卡的 PCI ID:

$ lspci -nn | grep -i Ether
00:19.0 Ethernet controller [0200]: Intel Corporation Ethernet Connection I217-V [8086:153b] (rev 04)
02:00.0 Ethernet controller [0200]: Intel Corporation I210 Gigabit Network Connection [8086:1533] (rev 03)

同时,需要注意的是 IOMMU Group 分组是否在一个组中(这个可能需要 PCI 设备的支持),可以使用以下简单的 Shell 脚本查看(来自 Arch 的 Wiki):

#!/bin/bash
shopt -s nullglob
for g in `find /sys/kernel/iommu_groups/* -maxdepth 0 -type d | sort -V`; do
    echo "IOMMU Group ${g##*/}:"
    for d in $g/devices/*; do
        echo -e "\t$(lspci -nns ${d##*/})"
    done;
done;

然后,使用 clr-boot-manager update 生成启动配置,然后 reboot 重启后查看 cat /proc/cmdline 内核引导参数是否已经生效。

Qemu 配置

查看 Qemu 下 PCI 的设备列表,例如

$  virsh nodedev-list | grep pci
pci_0000_00_00_0
pci_0000_00_02_0
pci_0000_00_03_0
pci_0000_00_14_0
pci_0000_00_16_0
pci_0000_00_19_0
pci_0000_00_1a_0
pci_0000_00_1c_0
pci_0000_00_1c_3
pci_0000_00_1d_0
pci_0000_00_1f_0
pci_0000_00_1f_2
pci_0000_00_1f_3
pci_0000_02_00_0

那么根据对并上面

$ lspci -nn | grep -i Ether
00:19.0 Ethernet controller [0200]: Intel Corporation Ethernet Connection I217-V [8086:153b] (rev 04)
02:00.0 Ethernet controller [0200]: Intel Corporation I210 Gigabit Network Connection [8086:1533] (rev 03)

两块网卡的 ID 分别为 pci_0000_00_19_0 和 pci_0000_02_00_0 ,然后我们 dump 出配置来

$ virsh nodedev-dumpxml pci_0000_00_19_0
<device>
  <name>pci_0000_00_19_0</name>
  <path>/sys/devices/pci0000:00/0000:00:19.0</path>
  <parent>computer</parent>
  <driver>
    <name>vfio-pci</name>
  </driver>
  <capability type='pci'>
    <class>0x020000</class>
    <domain>0</domain>
    <bus>0</bus>
    <slot>25</slot>
    <function>0</function>
    <product id='0x153b'>Ethernet Connection I217-V</product>
    <vendor id='0x8086'>Intel Corporation</vendor>
    <iommuGroup number='4'>
      <address domain='0x0000' bus='0x00' slot='0x19' function='0x0'/>
    </iommuGroup>
  </capability>
</device>

例如以上就可以 dump 出具体 PCI 信息的来,可以比较直观的看到 product id 以及生产商 vendor id 等信息。这里需要的几个参数分别是 domainbusslot、以及 function

我们分别记录下来,然后填写到以下的 xml 片段中,例如上面对应的数值就是

<hostdev mode='subsystem' type='pci' managed='yes'>
  <driver name='vfio'/>
  <source>
    <address domain='0' bus='0' slot='25' function='0'/>
  </source>
</hostdev>

可以直接使用十进制数值,因为 virsh edit 在编辑保存的时候会自动计算其原始的十六进制数值。

验证

使用 virsh edit 编辑对应的虚拟机配置,例如 virsh edit <my-machine> 。在编辑器中将上述 的 xml 粘贴入 devices 这个 xml 块中,保存关机然后在启动虚拟机即可生效。

在启动虚拟机以后,例如上述的网卡直通可以使用 ip a 等命令查看虚拟机有无识别到对应的物理网卡。如果一切顺利,那么就可以使用对应的网络配置程序来配置对应网卡的网络信息,这里不在复述。

常见问题

  1. 查看 IOMMU Group 中的设备是否分别在不同的组中,如果多个设备在同个组中,则需要额外的操作(参见 Arch Wiki 的内容);
  2. 如果物理机设备被直通出去,那么就无法使用该设备以及设备树下的子设备。例如,如果直通 USB 控制器给虚拟机,那么这个控制器下的键盘、鼠标都只能在虚拟机下使用;
  3. 直通的内核模块应该优先于其对应的物理设备驱动,否则会造成冲突造成无法直通,因此可以考虑搭配内核 blacklist 使用。

最后,如果服务器是 Intel 平台的,强烈建议尝试下 Clear Linux 你会爱上它的!

参考信息

对于 ThinkPad X1 Carbon 7th 的琐事

其实早前的时候,就已经入了台联想的小新 Pro13,这是台非常棒的笔记本。AMD 的 4800U 这块处理器无论在功耗以及性能的表现上都非常的满意。

然而,有两个问题是我无法忍受的:第一,就是它的键盘简直可以用翔来形容。虽然,这个价位的笔记本对于做工方面不能有太多的要求,但毕竟每天都重度使用笔记本输入文字和代码,对于键盘的要求实在不能太低。第二,就是只有一个 USB Type-A 的接口,对比 MacBook Pro 来说接口相对已经足够的丰富,但是对于 Wintel 平台的笔记本而言扩展接口实在是少得可怜。

加上自己又有 ThinkPad 的情节,偶尔间碰到个比较良心的商家对比美行 X1 7th 的顶配只要国行的入门乞丐版的价格,这个诱惑实在是太大。于是,借故将小新笔记本充公给公司作为开发机使用,而自己又开始使用那个熟悉的带有小红点键盘的 ThinkPad X1 Carbon 7th。

Thinkpad X1 Carbon 7th

从硬件的角度上说,这台 X1 Carbon 7th 已经是顶配了:十代低压版本的 i7 10710u 、16g 内存、以及 4K 的 IPS 屏幕加上 LTE 模块;自己更换了原先 512G 的 NVME SSD 到了 1T,没有存储上的焦虑,一切都是看来那么得美好。

但是还是忽略了一点,就是续航以及 Intel 那糟糕的能耗比,导致这台机器向对比原先的小新 Pro13 而言在续航以及发热方面实在是无法比拟(AMD Yes!)。

没有办法,自己折腾的后果打碎了牙齿都要继续承担下去。

Linux & Windows

系统方面其实个人纠结了很久,出于需求的角度出发 Windows 是不得不用的,然而 Linux 作为开发而言也是不得不装的。因此,双系统就这样子提上了日程,从这段时间的使用角度出发个人呆在 Linux 系统下的时间明显比 Windows 多得多。

这个倒不是说 Windows 不好(虽然对比 Windows 的发热和续航明显更加降低和严重了),只是 Linux 环境下很多的工具以及应用更加的顺手。

这台笔记本还偶尔出现过睡眠方面的问题,好在 Google 以后知道能够捅菊花(reset)解决大部分的电源方面的问题(说多了都是泪水)。

Manjaro & Archlinux

Linux 的发行版其实一直都是比较难选择的事情,但其实说到底就是你用这个系统来干嘛。个人是 Archlinux 的忠实用户,但是在桌面端使用它还是会有些心智方面的困难。

Manjaro 对比也是使用过非常长的一段时间,大部分情况下它工作得都非常的好。然而,要知道 Manjaro 毕竟不是 Archlinux,虽然这除了所谓心智方面的纠结以外,其实没有更多其他的区别(但其实这点就足够了)。

同时,Manjaro 会针对图形界面加入了很多自己的「私货」,这在大部分情况下是非常方面的事情,但是这往往会造成其他各种各样的问题。

例如,我将这台 ThinkPad 接入 2K 显示器的时候,缩放就成了问题:虽然我知道如何去手工配置,但是对于 Manjaro 来说它不会推荐你这样做,同时表现来说也和 Archlinux 有很多的不同。以至于在这种情况下我非常讨厌外接显示器工作,宁可使用十三寸的笔记本来干活。

Fedora & Ubuntu

对比而言 Manjaro 和 Ubuntu 其实非常像:它们都封装了很多有用的工具给用户带来的便利,但同时也部分失去了所谓「原汁原味」的感觉。

而回到我自己一直很喜欢的 Archlinux,上面说过使用这个系统我一直有心智上的「强迫症」就是不停的会 sudo pacman -Syu,以保证系统一直在最新的状态。

Fedora About

所以,到最后干脆还是使用起 Fedora,毕竟一来它的更新迭代的周期是固定的,二来相对来说是纯净的(例如,至少不会同时给你安装个 xorg 以及 Wayland)。

早在前几天,就了解 CentOS 那点屁事,其实一直以来我一直都不是非常喜欢 CentOS。这是个非常擅长「钻空子、不劳而获」的发行版,那怕生产环境有大量的部署,我个人也不会主动推荐它。

这下反倒是好了,一来是可以安心的继续使用 Fedora 作为桌面、二来对于 Ubuntu、Debian 来说也是个利好,至少会有部分原用户会迁移到其上面来。

总之,暂时就先这样子折腾吧。对于这台电脑以及操作系统、甚至发行版来说说到底还是工具而已。自己已经在这个上面花了太多的时间去选择,接下来应该是把心给收收了。

- eof -

正确配置 WSL2 的宿主机文件权限

在 Windows 平台通过 Docker Desktop 部署 Syncthing 的时候发现文件全部被重新同步了,究其原因是因为 Windows 下的文件系统权限 meta 信息没有带过来。

Docker Desktop 支持在 WSL2 下运行 Docker,也就是说可以使用以前同样的配置去解决 WSL 的宿主机(也就是 Windows 系统)的文件权限问题。

找个 PowerShell 打开 docker-deskop 的 WSL2 虚拟机终端

wsl -d docker-desktop

然后找到文件 /etc/wsl.conf ,建议保险起见先备份原有的配置。增加或修改对应的配置如下:

[automount]
enabled = true
root = /mnt/host
options = "metadata,umask=22,fmask=111"
mountFsTab = true

[filesystem]
umask = 022

然后重启 Docker Desktop 就可以了。PS,有其他 WSL2 访问宿主机碰到类似文件的权限问题也可以这样子处理。

- eof -

入手小新 Pro13 的 AMD Ryzen7 版本

经常背着 Macbook Pro 15 寸的笔记本上下班,这台笔记本完成了很多生产力的事情,但有其实并不是很需要那么好的算力的笔记本,所以轻薄的需求就提上了议程。

想着很多年没有用 Windows 10 了,想想换换口味再买台 Windows 10 的笔记本。考虑了很多相关的笔记本,例如 Dell 的 XPS、联想的 X1 Carbon(我对 Thinkpad 的情节比较重)、甚至微软自家的 Surface Laptop。

这些笔记本都是非常好的选择,但对于我个人而言或多或少的有些都有些不满意的地方。例如 Dell 国行的 XPS 要高配才有 4K 屏幕,其他的都是 1080p;国行的联想机子那兼职就是劫贫济富,买行货的性价比非常的低;微软的 Surface Laptop 3 虽然硬件方面支持有限的升级了(升级硬盘),从 Win10 的笔记本平台来说没法升级硬件是个非常大的痛点。

偶然个机会看到有人在推荐联想小新的 Pro13 笔记本,其实对这个笔记本的第一印象是装黑苹果比比较合适,甚至可以说换了苹果兼容的无线网卡和蓝牙以后,几乎可以说是台完美的黑苹果笔记本

2020 款的小新 Pro 13 的 AMD 版本换上了低压版本的 4600U 和 4800U,京东的差价大概在五百上下,预售的价格分别是 4599 和 4999,这个价格就可以买到 8 核心 16 线程、512G NVME 的 SSD 以及 16g 内存、2.5K 屏幕的轻薄本,瞬间就显得非常得有性价比了。

由于是预售的缘故,所以被京东套路了下,6.1 首先需要支付 200 的定金,等到 6.10 再支付尾款。后来等我去支付尾款的时候,发现这款笔记本其实手速快的话可以直接购买,估计是支付了定金以后有不想买的客户,但心里的确因为等待了那么多天,多多少少有点不舒服的。

到手以后简单看了下做工还是不错的,至少从感官上没有觉得有什么粗糙和暗病的地方。这里唯一的不爽的就是由于 AMD 版本的机身是暗灰色的,但是底部的螺丝还是银白色因此显得非常的突兀。

键盘的手感完全对不起五千块钱笔记本的价格定位,对比 MacBook Pro 老款的蝴蝶键盘简直可以说从矮子里面挑矬子,所以如果使用惯了其他键盘的话,对这块的期望不要太高。

屏幕方面由于亮度对比 Macbook Pro 稍低一点,感觉屏幕的反光还是比较严重的,目前正在考虑要不要贴个磨砂的屏幕贴膜(可能不是个很好的主意)。

其实个人到手就将这个笔记本的硬件做了个升级,首先,将原机的无线网卡和蓝牙升级到了 Intel AX200 的 Wifi6 网卡,可以说这是 100 块钱的预算最值得升级的硬件。

考虑到一步到位的情况,同时京东 618 打折得过分而且加上三期免息,入了快西数的 SN750 1T(我的这台原机也是西数的,不过是 SN730 512gb 版本,可以说也很良心了),直接装上装系统一切正常。

任务管理器

最后,看下 Windows 10 任务管理器的样子,个人目前将这个笔记本作为轻度办公以及文档相关的工作,就这个而言硬件方面肯定是过剩的。但从性价比的角度而言,五千的预算就这个价位的配置的笔记本而言,几乎可以说找不到竞争对手了。AMD,Yes!

- eof -

万物之中,希望至美

这篇文章是有读者发我邮件,基于我的回复整理了下,散漫之处望谅解。原文如下:

Mail

凮凨你好,见字如面,诚惶诚恐。

其实有点惭愧,我个人已经有一段时间没有专职从事前端了,看老哥想和我了解前端的发展路线,我也只能从我过往的经历和浅见聊聊我对于这块的愚见。

我和兄弟的年纪差不多,稍长几岁。在我们这个年纪家庭和生活的负担不少,能够重新在专业路线上思变,说明兄弟也是很有想法和对自己负责的人。

但是按照我个人的从业经历来说,前端这个职位是属于相对入门容易,但也是很容易碰到「天花板」的职业。

对比和我同期一起从业前端的伙伴,经历了十多年的职业发展,很多有可能都已经不在前端这个行业,有些往前去做产品而也有些和我一样,更偏后端和架构。

这个就要聊到广度和深度的问题。曾经有一段时间,我负责团队招聘是带有非常强烈的个人品好的,尤其当简历看到「培训班」的经历,往往是会被减分的。

但这不是因为什么「歧视」的事情,而是因为在我印象中经历过「培训班」更看中的是操作层面的技术熟练度,而不是对于技术本身的追根溯源。

所以往往有这样子经历的从业者,会在技术的深度上浮于表面。看兄弟还有外包的经历,我更担心您对于技术深度方面的理解会不够深入,需要更加的注意。

很巧,前几天和玉伯聊技术的时候,我个人也聊到从行业上理解。我理解前后端这块的分工会更加不断的细分,会造成前端对于后端的理解也恐怕会出现两极的分化。封装和调用的便利性会造成忽略对于底层实现原理和概念,无形中会让前端更加无法接触技术的底层实现和理解。

同时看到兄弟的学历,是实话起点上来说对于目前的行业要求是相对比较落后,但是从同龄人角度上我理解这样子情况的原因,因此对于这块没有必要对于这块过于的焦虑。

学历和能力

这里搬出来张图,供兄弟参考。学历和能力不是正相关的,甚至可以说通过从业的经历以及对于自身认知的边界突破,往往这块的差距会被不断的拉伸和推平。

这几年,自媒体的发展让造成很多水平差次不齐的从业人员进来,为了眼球和流量贩卖焦虑。

互联网行业仍然是高速发展的行业所以和其他行业一样,30 岁的设计师、35 岁的程序员、40 岁的产品经理绝对不是「见光死」的年纪。

年龄只是代表了自己的经历和过往,这块对于所有人而言是最公平的。按照国人平均年纪 75、从业平均 40 年来算,我们经历过的 10 年职业路线,只是其中的几分之几而已。

有些就业单位对于年龄和学历的筛选会设立门槛,但是相信真实看中个人能力的公司,往往是发展向上的公司,例如在阿里也有很多 P7 甚至 P8 都是专科学历。

至于考虑去公司还是小公司,这往往是带有个人的品好的。

从我个人的从业经历来说,大公司不要求技术的全面要求单点技术的深入,是因为分工变细弱化了人在项目中的影响。而小公司因为资源的制约不可避免个人对总体项目的影响会更大些,所以往往综合能力比大公司的员工稍全面些。

这块兄弟可以根据自己的发展路线多加考虑,选择合适自己的路线。

最后,再聊聊技术人员的综合能力方面的理解。这块从我经历的很多技术管理人员来说,是普遍比较忽略的,网易这边称之为「软性素质」。

但哪怕是阿里和网易这样的平台,无论从技术面试还是职级晋升,对于这块的考核和评价往往技术侧能够给的评价和建议给到个人的意见和建议是不多的。

所以个人建议,除了技术方面对于广度和深度方面的加强,随着我们从业年限的增加,对于「软性素质」例如沟通能力、管理能力、协调能力等各个方面,都可以尝试着锻炼和提升。

「万物之中,希望至美,而至美之物,永不凋零」,三十而立的年龄是充满未来和机遇的年纪,希望共勉。

我的照片

嗨!我叫「明城」,八零后、码农、宁波佬,现居杭州。除了这里,同时也欢迎您关注我的 GitHubTwitterInstagram 等。

这个 Blog 原先的名字叫 Gracecode.com 、现在叫 「無標題文檔」 。 要知道作为码农取名是件很难的事情,所以不想在取名这事情上太费心思。

作为八零后,自认为还仅存点点可能不怎么被理解的幽默感,以及对平淡生活的追求和向往。 为了避免不必要的麻烦,声明本站所输出的内容以及观点仅代表个人,不代表自己所服务公司或组织的任何立场。

如果您想联系我,可以发我邮件 `echo bWluZ2NoZW5nQG91dGxvb2suY29tCg== | base64 -d`

分类

搜索

文章