Tesla P4 - Nvidia 专业卡 vGPU 解决方案体验

1. 前言 之前体验过 intel 的 vGPU 解决方案 Intel GVT-g ,我的古早处理器 i5-10400 还是 intel 很老的gpu架构的 UHD630 分配到一个 Win10 虚拟机使用,哪怕是只分配一个 vm 的情况下性能依然不够看,使用 parsec 1080P H264 串流的情况下帧数无法保证60,这时视频播放就更不用说了,直接GPU占用100%,更不用谈 2k、4k 等高分辨率串流了。早就了解到 Nvidia 的 vGPU方案支持 kvm 平台,而且支持 Windows 和 Linux 客户操作系统,性能较 intel 核显好得多,于是我弄来了这块小小的 Tesla P4。 2. 硬件 这块 Tesla P4 是个单槽半高卡,刚好我的 pve 宿主机剩下一个 x16 的 PCIE 插槽,虽然只有 X4 的速度,但咋对性能没有极致的追求,所以损失一点性能还能接受(主要是穷换不起主板),而且这块显卡最高功耗仅为 75W 无需外接供电,实测无负载的时候功耗仅十几瓦,最惊讶的还是他的价格,仅仅只需300块,这简直就是“年轻人的第一台特斯拉”呀,哈哈。缺点就是其是为了数据中心设计的,没有主动散热,所以我们需要外接一个小小的风扇为其降温,就是图中这个,我多花了50从PDD购入。 拆机安装 内部紧凑的空间,一番折腾终于装上了,这台主机的配置可以在这篇文章中找到。 安装的过程中还有2的小插曲: 我的手在拆机的时候碰到散热器挂彩了(所以一定是要祭点什么吗)。 安装之后开机系统识别不了我的 2 块 PCIE 的 M.2 固态,还以为是这块主板的接口有屏蔽关系,最后发现是因为我打开了 GSM,需要关闭 GSM 才能正确识别 M.2 硬盘。 3....

2023-12-13 · 3 min · 566 words · Linkzz

甲骨文免费Arm主机新玩法-云安卓手机

1. 前言 我的一篇 文章 中有提到过云安卓手机的项目-redroid,该 项目 基于容器技术,构建一个安卓的运行时,同时通过Linux的内核模块,支持调用宿主机的硬件资源,同时其可运行于 x86 架构之上,通过转译来运行仅支持 arm 架构的安卓应用,用来跑app测试可以一试,正好甲骨文的arm主机资源没有好好利用,今天就来折腾一下这个玩法。 2. 加载内核模块 ashmem_linux、binder_linux 2.1 基于 Ubuntu 20.04 以上发行版 这两个模块是容器运行必须的内核模块,按照官方文档,在 Ubuntu 20.04 以上版本中,这两个模块已经编译到内核里了,可以直接 modprobe 命令加载,所以如果你的 arm服务器 正好是Ubuntu 20.04 以上版本,按照一下命令即可运行: # 安装额外内核模块 apt install linux-modules-extra-`uname -r` # 加载内核模块 modprobe binder_linux devices="binder,hwbinder,vndbinder" modprobe ashmem_linux # 运行容器 docker run -itd --rm --privileged \ --pull always \ -v ~/data:/data \ -p 5555:5555 \ redroid/redroid:11.0.0-latest \ androidboot.redroid_gpu_mode=guest 2.2 Oracle Linux 8 否则如果你像我一样开主机的时候选了 Oracle Linux 8 的话,很遗憾,官方没有该系统的运行文档,以上两个内核模块也并没有编译,奈何我对该发行版不熟,升级了官方内核到 5....

2023-12-06 · 2 min · 368 words · Linkzz

一加 3T 刷 LineageOS 18.1记

现在用的手机是一加8 Pro,旧手机一加3T放在公司作为备用机和必要时候的远程打卡机,最近在在使用scrcpy连接手机发现音频的传输需要系统在Android 10以上,然而这个手机早已失去了官方的支持,最终最新版系统停留在安卓9.0,幸好这手机在国外很受欢迎,有 LineageOS 的官方支持,最新的系统也有基于Android 11 的 LineageOS 18.1,今天就来记录一下安装过程。 本文不是教程文章,只是自己的折腾记录,如果你要按照本文的方式来操作,请确保你了解必要的手机刷机的知识如 adb、fastboot、解锁 bootloader 等。 1. 解锁 Bootloader, 刷入第三方 recovery 手机刷机第一步,由于我的一加3T很早以前就已经解锁BL并刷入了第三方TWRP recovery,这里就写一写步骤就好了 1.1 安装 oem usb 驱动 Mac和Linux系统无须安装usb驱动,但在Windows上则必须安装,否则 adb 和fastboot无法连接设备。 由于设备古老,在中文互联网上已经很难找到官方驱动了,还好在外网有专门的网站下载,虽然标的是官方,但具体是否还待验证,用起来是没有什么问题。 下载之后是 setup.exe 文件,点击安装之后用手机连接Windows,设备管理器里没有Android设备的感叹号就好了。 1.2 解锁 Bootloader 安装 adb 工具 scoop install adb 打开USB调试模式,连接手机并允许usb调试。 adb reboot bootloader 或者关机状态下按住 ”音量+“ + “电源” 键进入 fastboot 模式。 fastboot devices 键入一下命令解锁 Bootloader fastboot oem unlock 没有报错就解锁成功了。 1.3 刷入 Recovery 下载 LineageOS 的 recovery 镜像 进入 fastboot 模式...

2023-11-30 · 2 min · 229 words · Linkzz

Oracle Linux 8 升级内核

甲骨文的免费Arm主机开始申请的时候没注意选了 Oracle Linux 8 系统而没选自己更熟悉的Ubuntu ,导致各种折腾的时候发现资料有点少,今天折腾一个云安卓 redroid 系统的时候发现需要编译一些内核模块,而默认的 5.4 内核一直编译失败,于是想到升级内核试试,一路搜索找不到很符合的文章,于是自己摸索了一下,记录于此。 1. 查看已经安装的内核包 ➜ client yum list installed | grep kernel kernel-headers.aarch64 4.18.0-477.13.1.el8_8 @ol8_baseos_latest kernel-tools.aarch64 4.18.0-477.13.1.el8_8 @ol8_baseos_latest kernel-tools-libs.aarch64 4.18.0-477.13.1.el8_8 @ol8_baseos_latest kernel-uek.aarch64 5.4.17-2136.307.3.1.el8uek @ol8_baseos_latest kernel-uek.aarch64 5.4.17-2136.309.4.el8uek @ol8_baseos_latest kernel-uek.aarch64 5.4.17-2136.320.7.1.el8uek @ol8_baseos_latest kernel-uek-devel.aarch64 5.4.17-2136.307.3.1.el8uek @ol8_baseos_latest kernel-uek-devel.aarch64 5.4.17-2136.309.4.el8uek @ol8_baseos_latest kernel-uek-devel.aarch64 5.4.17-2136.320.7.1.el8uek @ol8_baseos_latest 可以看到我们的内核都是baseos仓库安装的内核,该仓库内核版本比较老,查看 官网仓库 列表,内核仓库有了更新的包。 内核版本为 5.15.0 2. 安装内核 先看下已有的 yum 库 ➜ sudo yum repolist repo id repo name docker-ce-nightly Docker CE Nightly - aarch64 docker-ce-stable Docker CE Stable - aarch64 docker-ce-test Docker CE Test - aarch64 epel Extra Packages for Enterprise Linux 8 - aarch64 nginx-stable nginx stable repo ol8_MySQL80 MySQL 8....

2023-11-24 · 2 min · 321 words · Linkzz

pve安装Android-x86并配置显卡加速

先看下效果: 可以看到运行很流畅,由于gif压缩小了尺寸,Aida64的信息界面看不清,显卡是virtGL,支持OpenGL,3D加速由宿主机Intel UHD 630提供,最后的游戏演示可看出很流程。 1. 前言 1.1 为什么需要Android 我日常使用的是一个直通了RTX2060s(矿卡)的Win11虚拟机,众所周知,在虚拟机里使用模拟器性能巨差,我试过夜神模拟器,启动慢不说,游戏电竞帧数,连抖音都卡顿明显。所以一个能在Hypevision中运行的安卓系统就是一个很好的选择。 1.2 选择哪一种 现阶段能作为选择的有3种方案: ChromeOS: 首当其冲的就是基于Chromium OS的ChromeOS及其他发行版如国内的FydeOS,这系统号称老电影福音,具有完整的桌面环境并兼容Android应用,可惜对于显卡的兼容性不是很好,而虚拟机能使用3D加速的显卡,除了显卡直通外还有一种就是最近一两年积极维护的VirtualGL,所以ChromeOS在VirtualGL下运行是否可行还得画个问号,后面再折腾。 容器化方案 -Waydroid or Redroid: 第二种方案就是借助容器化cgroups,namespace 等内核技术的容器化方案,这种方案启动快速,可使用宿主机硬件资源,也能使用宿主机GPU进行3D加速, 但是对于Nvidia的显卡兼容性很差。运用pve创建一个lxc容器来运行docker redroid容器也能运行,后续折腾一下这个方案。 Android-x86: Android-x86 在AOSP的基础上增加x86平台的支持,可通过native-bridge转义arm指令从而运行arm应用,同样称为老电脑福音,GPU兼容性较好,兼容VirtualGL ,今天我们就来在pve中尝试一下这个系统有什么妙处。 2. 安装Android-x86 2.1 镜像下载 打开Android-x86 官网,官网提供了2个下载分流,按需选择,我这里选择SourceForge 共有一下版本: 最新版本Release 9.0 基于Android 9.0 Pie,也是下载次数最多的版本,我们选择此版本。 选择 64 位ISO版本 2.2 创建虚拟机 创建虚拟机 选择刚才下载的镜像 选择 q35 机型和 OVMF 安装,显卡选择VirGL GPU VirGL GPU 需要宿主机有有效的render节点设备,也就是说你的显卡需要正确的驱动了才能运行,通过ls /dev/dri 查看是否有 render* 字样。 存储给到32G即可,如果需要安装大型游戏可以给多一点。 安卓比较依赖CPU资源,如果运行的是arm应用更需要CPU的转译,所以这里给到 10 vCPU 。 内存给到 8G Android-x86做了虚拟机的兼容,所以这里网卡选择效能最高的 VirtIO 。 点击完成之后选择“硬件” -> “添加音频设备”, 后端驱动器选择 “无”...

2023-11-23 · 2 min · 300 words · Linkzz

pve环境10代i5-10400核显直通

1. 背景 3年前,怀着不折腾不舒服斯基的心情,我按当时最新的硬件(大概)组了一台All in One主机,这这台主机拥有当时最为先进的14nm+++工艺的CPU i7-10400和性能遥遥领先的UHD630核显,我当时的想法也很普通,就是集家庭透明网关、NAS、Linux开发机、Windows娱乐机、以及Linux Docker服务器于一身的超级家庭数据中心,下面看下我当时所选的硬件: 类别 项目 价格 CPU i5-10400 – 主板 华擎B-460M钢铁传奇 – 内存 酷兽8G * 4 = 32G – SSD 三星980 1TB – SSD 爱国者 128GB – HDD 希捷酷狼4TB * 2 – 机箱 先马趣造 – 散热 九州风神 – 当时我选配的时候正值挖矿潮,显卡是没想法的,只当一个服务器用,这其中Windows娱乐机的需求一开始没有显卡加速,使用起来确实无法胜任我的需求,我希望的是这台机器能24小时开机,能浏览网页,能流程播放h265视频。但很显然只依靠CPU模拟的显卡是无法完成以上工作的,于是就想到了直通核显到Windows客户机,然而当时针对10代的直通教程真是少之又少,爬了很多帖子之后只能做到直通安装Ubuntu并拥有hdmi输出,Windows则不是hdmi黑屏就是显卡驱动Code 43,后来矿难入了一张2060s之后直通用来打游戏,核显就只是用来为jellyfin提供硬件解码加速,直通核显这事就一直搁浅了。而今折腾之心渐起,而今itel也早已经更新到了14代酷睿,igpu性能也较10代大幅提升了,早先的10代直通恐怕也很多大佬已经研究透彻了,而且我平时用的一个Windows虚拟机主要使用微软的RDP远程桌面,没有GPU加速下看视频内容实在是难以忍受,于是开始了新的爬帖之旅。果然,10代直通的中文内容也多了起来,也有很多人做成了直通并显示hdmi接口内容,于是就有了今天的文章。 2. BIOS准备 这里参考pve官方Wiki内容,需要BIOS设置好直通所需的技术: 2.1 启用VT-d 启用CPU虚拟化,启用vt-d(直通必备) 2.2 启用CSM 启用CSM并将所有启动项设置为"仅传统" 待会创建的虚拟机将使用legacy启动模式直通,若不开启DP接口和hdmi接口将无法输出画面,而且如果你是先用pve的默认显示安装完Windows再安装核显驱动,然后再添加核显的pci设备,启动之后核显还是无法驱动的,会报错“代码43”,除非你有一个正确的igpu bios文件,有了这个文件的话核显可正常驱动,但是看不到pve的SeaBIOS界面,启动Windows核显驱动正常加载之后可以输出Windows画面,本文最后会介绍提取vbios的方法。 2.3 启用多图形适配器 有些主板BIOS设置的主GPU是PCIE通道的gpu且多图形适配器功能是关闭的,也就是说你的主板PCIE X16的插槽插上显卡之后核显会被屏蔽,需要开启多图形适配器功能(我的主板是这个设置项)并且将主图形适配器设置为“板载”。 3. 宿主机(pve)设置 我的pve环境如下: ➜ ~ pveversion --verbose proxmox-ve: 7.3-1 (running kernel: 5....

2023-11-17 · 3 min · 581 words · Linkzz

一次防火墙纠错,让我更了解防火墙机制

1. 起因 工作中我一直使用wireguard搭建公司 -> 家的桥梁,用于随时随地访问家中内网的各种服务,如gogs代码仓库、nextcloud同步工作文件,抑或是远程连接windows虚拟机用来摸鱼,然而尽管拥有公网ip,家里和公司之间只有区区10ms的网络时延,却还是因为运营商对UDPl的QOS而影响远程服务的传输体验。于是我就搭建了一套phantun服务用来将UDP流量转换为TCP流量而避过运营商的QOS,建好之后确实体验提升明显,远程的moonlight能稳定跑满30M上传带宽,然而当时搭建的时候的iptables规则未保存,今天的一次重启让我的phantun死活连不上,于是就有了今天的文章。 2. 排查 2.1 报错日志 由于是客户端重启之后连不上的,排除服务端错误的情况,从客户端查起,查看phantun报错: sudo systemctl status phantun.service Nov 8 10:22:11 new-business-dev-001 phantun_client[5517]: ERROR client > Unable to connect to remote {my-home-ip}:25379 Nov 8 10:22:14 new-business-dev-001 phantun_client[5517]: ERROR client > Unable to connect to remote {my-home-ip}:25379 客户端一直报错连不上服务端,25379端口是phantun_server的监听端口,之前连接是好的,不可能有问题。 2.2 抓包分析 遇到网络相关的问题,抓包分析是最为直观的解决方案,我们查看往来服务端的流量信息: sudo tcpdump -i any host {my-home-ip} 10:28:48.652090 IP 192.168.200.2.61048 > {my-home-ip}.25379: Flags [S], seq 0, win 65535, options [nop,wscale 14], length 0 10:28:49.653239 IP 192....

2023-11-07 · 2 min · 412 words · Linkzz

基于AutoHotKey的windows平台Vim输入法切换方案

众所周知,在中文环境下使用 vim 一直会有中英文输入法切换的烦恼,社区也有一些方案解决,如 AutoHotKey 脚本 im-select 插件等,今天提供一种基于屏幕颜色的方案来实现按下 ESC 键切换输 入法的方案,下面是效果展示: Window Spy 我目前安装的是AutoHotKey v2.0.2版本,使用其提供的 Window Spy 功能,我们可以方便的查看各个窗口的信息,鼠标的信息等,今天我们要实现的版本思路就是基于判断屏幕指定坐标处的十六进制颜色来判断当前是处于什么输入法环境下。 如上图,因为截图无法截取鼠标位置,我的鼠标置于图中“中”字的下部分,切换到英文的时候为大写字母"A",屏幕相同的位置是没有“中”字下部分的颜色的,而 Windows 系统输入法状态指示的图标相对来说是比较固定的,故以此来判断当前输入法的环境是可行的,看官自己设置的时候使用 window spy 来获取这个坐标即可。 AutoHotKey 脚本 既然有了方案就可以着手实现了,我们使用 V2 版本的语法来完成,并将键盘上不常用的 CapsLock 键映射为 ESC 键,下面是完整的脚本: #Requires AutoHotkey v2.0 ; 获取坐标的模式,相对于屏幕 CoordMode "Pixel", "Screen" CoordMode "Mouse", "Screen" ; 应用vim模式的窗口组 GroupAdd "VimMode", "ahk_exe WindowsTerminal.exe" GroupAdd "VimMode", "ahk_exe Code.exe" GroupAdd "VimMode", "ahk_exe Obsidian.exe" ; 退出vim模式 VimEsc() { Send "{Esc}" if (PixelGetColor(1985, 1422) = "0x464646") Send "{Shift}" } #HotIf WinActive("ahk_group VimMode") ESC::VimEsc() CapsLock::VimEsc() #HotIf 以上代码中将需要生效的应用添加到 VimMode 组,如果有更多需要应用 Vim 模式的应用,通过 window spy 获取其 ahk_exe,通过GroupAdd "VimMode", "ahk_exe {name}" 将其加入组中即可,十六进制颜色和坐标也根据需要修改为你自己的,Send 后面的内容也要修改你输入法的中英文切换的快捷键,在这里我的是 Shift 键,之后运行脚本即可实现“按下 Esc 或者CapsLock 自动切换为英文输入法” 的功能。

2023-09-05 · 1 min · 97 words · Linkzz

【NanoPi R2S旁路网关系列】2. 自定义域名、DDNS、KMS

前言 上一章我们实现了 wireguard 在任意地方安全的访问家庭网络,这章我们将实现自定义域名和 DDNS 动态更新公网 IP 的需求。 自定义域名 内网自定义域名有什么好处: 防止 IP 变更之后的访问难题 想象一下这样一个场景,一开始我内网部署了一个 jellyfin 服务,ip 为192.168.5.132,但某天我的网段变了,我得用192.168.1.132这个 IP 去访问,这时好不容易浏览器记住的密码和所有缓存信息都失效,还有有记错 IP 需要重新查看的烦恼。 有记忆特征 IPv4 是 4 段数字,即使家里网段固定只需要记忆一段的数字,那也是 0-254 共 255 个数字,数字的记忆对人类来说是不如字符来的方便的,jellyfin和132请问你是更喜欢记忆哪一个,虽然自建服务也可以通过搭建dashbord服务如heimdall,但是这样打开网页的效率着实有点低,你需要打开 heimdall 页面,再去点击相应的链接,同样还要维护服务的变更。 签发证书实现 https 有了自定义域名,我只需要修改 nginx 配置,将反代的 IP 变更即可解决以上 2 个问题,同时通过自签名的泛域名证书,我可以通过 https 访问自建服务,https 可以开启一些自建服务的一些功能。 Dnsmasq 配置 openwrt 的 dns 服务基于 dnsmasq,自定义一个内网域名解析我们只需要修改配置即可: vi /etc/config/dhcp config dnsmasq配置下添加 list address 选项 config dnsmasq option domainneeded '1' option localise_queries '1' option rebind_protection '1' option rebind_localhost '1' option local '/lan/' option domain 'lan' option expandhosts '1' option authoritative '1' option readethers '1' option leasefile '/tmp/dhcp....

2023-08-10 · 2 min · 309 words · Linkzz

使用Oracle对象存储作为博客图床(二)

前言 上一章我们已经做到了使用 picgo 上传图片并获得一个可以公开访问的链接,这章介绍如何使用 CloudFlare 代理图片的访问并加上自定义域名,以及录屏转 gif 的方法。 CloudFlare 代理访问 创建一个 Cloudflare Workers,代码如下: export default { async fetch(request, env) { const url = new URL(request.url); const path = url.pathname.replace("/blog/", ""); const originUrl = `${env.OBJECT_STORAGE_BASE_URL}${path}${url.search}`; const res = await fetch(originUrl); return new Response(res.body); }, }; 以上代码功能是将访问的 url 去掉存储桶名称,通过 workers 获取内容并返回给访问者,充当了一个代理的角色,这样我们可以使用自定义的域名来替代甲骨文对象存储的访问域名,以后换了图床供应商也方便切换,因为博客里的链接是不用改的。 部署完之后需要配置环境变量OBJECT_STORAGE_BASE_URL的值为上文的访问地址,一直到/o/处,如: 现在你可以使用 works 提供的域名作为图片前缀访问,也可以自定义域名,该功能只限于你自己的域名是由 CloudFlare 托管解析的才可,如果已经使用 CloudFlare 作为域名解析商,在 works 配置的Custom Domains配置即可,CloudFlare 会自动生成 Https 证书。 配置好之后将picgo的配置文件的urlPrefix改为上面的域名: { "aws-sr3": { "accessKeyID": "{ak}", "secretAccessKey": "{sk}", "bucketName": "blog", "region": "ap-chuncheon-1", "uploadPath": "images/{year}/{month}/{md5}....

2023-08-09 · 1 min · 154 words · Linkzz