V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  secondwtq  ›  全部回复第 11 页 / 共 123 页
回复总数  2459
1 ... 7  8  9  10  11  12  13  14  15  16 ... 123  
这题我会。如果只是这些需求的话感觉用 container 或许也可以。这里面可能需要解决一下 GUI 的一些问题,大概不如虚拟机简单直接,但是开销更小,玩熟之后也更灵活。

我没用 container 跑过 GUI ,但是我做过一个大概更加脱裤子放屁的事情。因为我现在用的是 Wayland 环境,然后我发现 Steam 的 Remote Play 大概对这玩意支持不是很好( github.com/ValveSoftware/steam-for-linux/issues/6148 )因为 Steam 是闭源的所以不怎么方便折腾。为了能用 Remote Play ,就又做了个 QEMU 虚拟机,上面跑 Openbox ,只装必要的包和 Steam ,然后插了张空闲的显卡 passthrough 过去(中间手动 hack 了新版 kernel 引入的一个 bug lore.kernel.org/lkml/[email protected]/T 不然 tty 就没法用了,然而我又时不时会改下 Wayland Compositor ...),写了个脚本启动和关闭。注意这上面是会跑 Proton 的,也就是为了解决一个 Linux 自己的兼容性问题跑了个虚拟机,然后上面又跑了解决 Linux 和 Windows 兼容性问题的 Emulator ...

刚才有几个明显的坑已经说了,还有几个:
* 我尝试过用 virtio-gl 代替 GPU Passthrough ,这个是 QEMU-KVM 这个栈给出的开源 GPU Paravirtualization 方案。说实话,纯 OpenGL 程序跑得还可以。但是 Proton 现在主要方向是 DXVK ,是需要 Vulkan 支持的,而 virtio-gl 现在是只给 OpenGL API 做虚拟化的。有人在利用 virtio-gl 的基础做一个 Vulkan 的 Paravirtualization 叫 Venus ,这个看样子已经基本可用了,但是不在目前 Mesa 和 QEMU 的稳定版里面(当时我测试的时候已经进 Mesa 的 testing 包了,但是 QEMU 的 patch 好像很久都没合进去),还好是 Arch ,折腾一阵编译好了,但是不能用,折腾到最后发现应该是 N 卡闭源驱动栈提供的一些内核对象不支持 mmap 操作,无法在两个系统之间共享内存,恰好这个闭源驱动栈的新硬件的内核部分有开源的,所以可能折腾一下能行,不过我一时半会不清楚该怎么改 ...
这个 Paravirtualization 的性能损耗会比 GPU Passthrough 要高,intel 驱动应该不会有这些问题,但是如果是核显的话本身性能也低。我去试的基础是本身主 GPU 性能足够损失一截也无所谓。这也是为啥要折腾 Vulkan 支持,更新的实现和开销更小的 API 也有助于降低 Paravirtualization 的损耗。但是 anyway Vulkan 支持现在还不成熟,虽然现在普通桌面一般还都是 CPU 渲染或 OpenGL ,但是需要游戏或者 Vulkan 编程的时候就成了问题。另外这玩意现在应该只是处理通用 API ,需要 GPGPU 等 GPU 特定 API 的时候不知道会怎么处理 ...
* 我尝试在虚拟机和主机之间共享游戏文件夹,这个 QEMU 也提供了 virtiofs 的解决方案。但是可能是因为我叠的 debuff 太多了(我还是在 ZFS 上用的),偶尔会出现不稳定。其实还有一些其他的方案,但是到底都是两个内核访问同一个文件系统,本身就是很奇怪的一个事情,使用 container 的话直接共享就行。
* 以前我都是虚拟 Windows ,我本来以为 Linux 内核会直接支持在 Linux 上虚拟 Linux 时,虚拟机没有使用的内存就不占用宿主机内存,这样我可以很低开销让虚拟机一直跑在后面。但是查了一下发现这个东西貌似挺麻烦的,不过折腾折腾估计还是可以的。
* 键鼠如何虚拟化解决方案也不唯一,现在我主要用的是 evdev passthrough ,相当于把所有事件转发给虚拟机,这样在虚拟机里用快捷键不会被宿主机拦截。但是在目前的设置下我还是需要手动处理虚拟机运行过程中热插拔键鼠的情况,并且偶尔会有不稳定。

非常凑巧的是大概同时间我还对硬盘分区进行了调整——先是换了一块更大的系统盘,这个过程很简单,就是插一个 Arch 安装盘启动,给新盘分区格式化,然后 rsync 原来的系统盘到新盘里,最后修改一下 fstab 里面的 UUID 和 bootloader 里面的系统盘分区标签(如果你用的是一样的标签就可以不做 ...),就可以直接从新盘启动。然后还把系统分区和 Home 分区分离了,这个更简单,就是分好区之后挪一下 Home 目录,fstab 加一条。我的意思是在直接备份很简单的情况下,只为了备份需求跑虚拟机实在有点大炮打蚊子的感觉。如果你只用包管理器装软件的话,桌面 Linux 大半的自定义其实都在 Home 里面,除了 Home 之外备份个 /etc 和 /boot 就差不多了(最多还有你的包列表)。所有这些都是可以通过直接拷贝文件解决的问题。虚拟机对我来说代价太重了,而且最重要的是不知道什么时候会出问题,比如我在主机可以用 turbostat 看 CPU 功耗和频率,虚拟机就跑不了(有可能是我设置问题)。

另外 Arch 属于在软件选择上没有偏向性的系统,基本只有 pacman ,glibc ,systemd 几个给你框下来了(内核可以改,因为内核的 userspace API 相对稳定反倒问题不大),剩下的基本都是你自己发挥。所以不存在“Arch 对虚拟机支持怎样”的说法。另外如果只是使用一个系统的话,没必要两个系统都装完整的 GUI 。可以向我一样只装最小化的 GUI ,或者干脆不装 GUI 直接 passthrough GPU 。
用星战的梗来说,楼主的说法是正确的,"from a certain point of view"

黄仁宇有个说法,把中国帝国史分为三个阶段,从秦到南朝陈为第一帝国,从北魏到南宋为第二帝国,从辽到清为第三帝国。按这个说法,从元成到南北朝结束,就是持续半个多千年漫长的旧秩序崩塌,新秩序建立的过程。
上面有人提到的新朝,它就是在危机第一次开始显现时试图通过较为和平的方式解决它的一个尝试。所以你会看到王莽有很多很 naive 的做法,因为他就是个大儒生,也是儒家势力推他上去的,他就按照当时比较原始的儒家学说来搞,当然完全是不切实际的。这背后反应的其实就是这个时代是比较 naive 的,后来就再也整不出这么大的活了。
就不说后面全都有很重的周边群体色彩了,按照楼主的说法,二三帝国是没有合法性的。这个结合带清的事情来看的话就更河里了——旧事物自身是缺少更新的动力和能力的,必须强行武德注入。我觉得我们看最近两百年的很多想法可能也能移植到当时经历转变的人上面。

当然,这套理论不是所有人都认,因为它只是"a certain point of view"。就像楼主认为“生产力”和“科技水平”是唯二重要的东西一样,我也可以说,自从智人走出非洲以来,每一年都是平行世界的关系——毕竟公元前 3022 年是智人的历史,公元 3022 年也是智人的历史,调换一下顺序,感觉也能对得上。因为每个朝代都吃大米,所以是平行独立的关系,调换一下顺序,感觉也能对得上——嘛,并不是,北方有一半的时间都是吃小米的,汉朝人不会发面,唐朝人不会炒菜,穿越到明朝之前的四川会感觉很不对劲,因为没有辣椒。唐朝也看不着三国演义。

不过我个人嘛,我个人坚定地认为 Rust 1.0 的发布是人类历史上最重要的转折点,从此人类便有了光明,希望,和抛瓦! UNLIMITED POWAAAAA!!!!111
unix.stackexchange.com/questions/269098/silent-disk-errors-and-reliability-of-linux-swap Silent disk errors and reliability of Linux swap - Unix & Linux Stack Exchange 不知道是不是你想要的
2023-01-11 00:21:33 +08:00
回复了 amiwrong123 创建的主题 程序员 x86 汇编 CPU 是如何使用 loop 指令的操作数的?
1. 不要完全用软件的思路揣测硬件实现,硬件可以定制任意位数的加法器的 ...
2. 不止 LOOP ,JMP 就很常用这样的模式
3. 由于各种原因,LOOP 这条指令基本早就不用了,编译器也不会生成。
我觉得比较合适的是强制使用“符合某些条件”的开放标准,而不是钦定一个特定的标准。
反正苹果只要自己能躺是不在乎恶心了谁的,也别怪别人天天恶心你
2023-01-07 18:52:08 +08:00
回复了 MMMMMMMMMMMMMMMM 创建的主题 程序员 我的预感未来前端趋势应该是 webgl 之类的东西
... 噢对了,如果楼主说的"native"是指移动端的话,那么现有解决方案比 Qt Web 更成熟
楼主的 idea ,再一次地,是 Atwood's Law 的一个体现——类似的事情桌面 GUI 早就做完了,叫做 DirectUI 。

并且 DirectUI 一般并不会直接写 3D API 函数或 Shader ,一般的 DirectUI 的架构是,由一个 Window System Abstraction 提供窗口、事件处理和 3D API Context 等平台相关的,最基本的东西,然后由一个 Vector Graphics Library 提供高层绘图 API ,然后上层的组件调用 Vector Graphics Library 绘图,Vector Graphics Library (可能)会调用 3D API ,也可能直接 CPU 渲染了(我现在打字用的这个 Firefox 就是没法用 GPU 加速的 ... 而我打开上面那个 Qt Web 的 demo 页面会直接告诉我不资瓷,所以依赖于 3D API 是有问题的,而 Vector Graphics Library 可以帮你解决)。

而 Web 浏览器本身就可以看成 DirectUI 的一种实现。比如在 Chromium 系浏览器中,Window System Abstraction 的角色由 Aura 担任,Vector Graphics Library 由 Skia 担任。
要实现所谓的“跨平台 native 体验”,最简单的是干掉 Web ,而不是设法绕过 Web——绕过 Web 其实就相当于在 Web 这个 DirectUI 上再做一层 DirectUI ,让浏览器来当 Window System Abstraction ,这不是画 Python 舔 jio 么。而干掉 Web 的结果就是 Flutter ... 你要 JS 生态的话 React Native 也行,或者 Flutter Web ,Qt Web ... 但是大的 idea 是不变的

所以你看局早就设好了,只是鸡还在炖没开始吃而已 ...
2023-01-07 18:20:09 +08:00
回复了 MMMMMMMMMMMMMMMM 创建的主题 程序员 我的预感未来前端趋势应该是 webgl 之类的东西
@MMMMMMMMMMMMMMMM 其实有现成的,Qt 就能: https://www.qt.io/qt-examples-for-webassembly

问题是人家 Qt 没能做到你要的那个程度啊
我的意思是,specific 的技术和微小的细节被看得太重了。你所担心的,卷来卷去的事情,历史上已经多次发生,以后很可能继续发生。Mac 有 Cocoa 踢掉 Pascal ,现在又要 SwiftUI 和 Cocoa 共存,Gamedev 有 shader 踢掉 fixed pipeline ,然后是底层 API 和高层 API 共存,就连 Qt 也一点点 QtWidgets 换 QML 了,至于微软和 Web 的破事就不用我说了。我不会有“以后不会再发生类似的事情”的想法。
作为一个开发者,什么适合当前的问题就用什么。在这个上下文里,Web 并不特殊,特殊的是它的*生态位*。你所述的使用场景(跨平台)之所以常用 Web 是因为它占据了这个生态位。如果这个位置换人了就再用新的就是。更应该关心的,不仅是作为开发者,更是作为用户,是新的和旧的哪个更屎,屎多少,你的系统里会最后会有多少 XX 引擎。
2023-01-07 17:04:53 +08:00
回复了 MMMMMMMMMMMMMMMM 创建的主题 程序员 我的预感未来前端趋势应该是 webgl 之类的东西
Canvas 和 WebGL 是两个东西啊 ... 而且很多事情 SVG 也能做
然后就是上面这些都是实现细节,你这个想法关键是在你的那个“游戏引擎”上
这就要说到 Web 这个东西的特殊性了,就是现在这个局面本质上是 GUI 框架之外的层级对 GUI 框架这一层级长期巴尔干化的现状不满意后果,Web 是个通用的东西。
那你这个“游戏引擎”要怎么做成另一个通用的东西?就算真做成了,历史是一个圈,最多不过是做成另一个 Web 而已。
2023-01-07 15:14:52 +08:00
回复了 gowl 创建的主题 奇思妙想 不知道以后会不会有一部基于俄乌克兰的战争 Call Of Duty
@cwcc Red Alert 两个词可以不要的~
2022-12-08 14:46:27 +08:00
回复了 wuchangming89 创建的主题 程序员 《ChatGPT 提问工程师开发指南》-- 打不过就加入
哦对,最重要的一点是,我不觉得这是个致命问题。人都有各种奇怪的习惯,各种“错误”的认知,以及很多不懂的事情。如果以人的标准来衡量 ChatGPT 的话,它比大多数人做得都要好。
2022-12-08 14:32:07 +08:00
回复了 wuchangming89 创建的主题 程序员 《ChatGPT 提问工程师开发指南》-- 打不过就加入
试了两天,太牛逼了

给他一个 API ,让他写例子,写出来之后可以继续 follow-up 根据你的需求让他加功能,哪行不懂可以让他解释,然后我还让他封装了一个类 ...
感觉好像在面试人,然后我试了下能不能让他面试我,好像还特么真的可以,可是我现在没有被面试的心理准备 ... 所以过两天再说吧,回头接个 TTS 和语音识别就可以 mock interview 了 :)

缺点是他告诉你的很多东西是有问题的,包括代码也得改一点才能用,保守一点大概有一两成的东西有明显的事实错误,并且不会给你来源。我试着问了一下,他只会不断重复”我是个 language model”或者叫你 consult documentation 。可能还需要再调教调教
主要是很多细节上的东西会出问题,比如我让他写 PKGBUILD ,居然真写出来了,可是参数基本都对不上。不过这倒可以理解,毕竟不是专门干这个的,不过我跟他讨论拉丁语,他说 "la" 是个定冠词我就呵呵了 ...
turbostat 试下,我这 Intel 是可以显示功耗的
(注意对于 Intel CPU ,这里显示的应该是 RAPL 提供的一个估计值,是通过一个数学模型算出来的,并不是直接测量功耗)
2022-11-07 21:18:52 +08:00
回复了 whereisgungun 创建的主题 程序员 Java 求解如何优化 100 个 if 判断?
@whereisgungun 有相关数据的话就简单,找出每个请求走的哪个 if ,命中频率最高的排前面就行
2022-11-07 21:12:17 +08:00
回复了 whereisgungun 创建的主题 程序员 Java 求解如何优化 100 个 if 判断?
你是想要优化结构还是优化性能?
2022-11-07 21:06:08 +08:00
回复了 vazo 创建的主题 NVIDIA #直播点歌的路人是英伟达创始人黄仁勋#
@jousca 最近正好在整理 GPU 架构,昨天看到 Fermi 的 whitepaper ,第二页写着:
> Dedicated to the World's PC Gamers

www.ece.lsu.edu/gp/refs/gf100-whitepaper.pdf
2022-11-06 05:18:41 +08:00
回复了 amlee 创建的主题 问与答 cs61a 的一道题,有大佬讲解一下吗?
那当然是“显然”“易得”啊

假设原链表是 x_1 => x_2 => x_3 => x_4 => ... => x_n
根据最后一行可知 step 一定返回一个有一个参数的函数,进而可知在 foldr 执行过程中每一步都要生成一个函数
根据 foldl 的示例,设最后生成的,用 z 为参数调用的函数为:
foo_0 z = ... fn(fn(fn(fn z x_1) x_2) x_3) x_4 ...
(注意以上的 fn 是 foldl 传入的,即示例中的 add/sub/mul ...,z 也是 foldl 传入的)

现在来推导 foldr 执行过程中间生成的那些函数,观察 foo_0 的形态,设其中的 (fn z x_1) 为 rest_1 ,进而有 fn(fn z x_1) x_2 为 rest_2 ,etc. 于是有:
foo_1 rest_1 = ... fn(fn(fn rest_1 x_2) x_3) x_4 ...
...
foo_m rest_m = ... fn(fn(fn rest_m x_m+1) x_m+2) x_m+3 ...
...
foo_n-1 rest_n-1 = fn rest_n-1 x_n
foo_n rest_n = rest_n
其中运行时的参数 rest_m 应等于 fn(... fn(fn z x_1) x_2) ...) x_m (m <= n),z 也就是 rest_0 了

然后看看 foo_m 能不能套在 foldr 上,foldr 的 inductive case 可以写成:bar x_m (foldr ...)
因为最后返回的是 foo_0 ,所以上面说的“中间生成的那些函数”其实就是这里每次 (foldr ...) 递归调用返回的函数,即:
foo_0 = bar x_1 foo_1
...
foo_m = bar x_m+1 foo_m+1
...
foo_n = identity
那 foo_m+1 是啥呢:
foo_m+1 rest_m+1 = ... fn(fn(fn rest_m+1 x_m+2) x_m+3) x_m+4 ...

最后就是 bar 怎么写的问题,其实到这比较明显了,就是想办法用 foo_m+1 实现 foo_m
把 foo_m 展开:
bar x_m+1 foo_m+1 = \rest_m -> [ ... fn(fn(fn rest_m x_m+1) x_m+2) x_m+3 ... ]
需要替换掉大括号里面那块,这里唯一可以利用的函数是 foo_m+1 ,两边 x_m+2) x_m+3 ... 这些在 foo_m+1 里面都有,而 rest_m+1 = fn rest_m x_m+1 ,所以 bar x_m+1 foo_m+1 = \rest_m -> foo_m+1 (fn rest_m x_m+1)
2022-11-05 01:59:08 +08:00
回复了 Susan0423 创建的主题 生活 失业俩月了, 10 月份花掉了 6000 块,惊掉下巴
@likunyan 6k 块钱其中 5k 用来买 React 课程?
2022-11-05 01:51:04 +08:00
回复了 forkon 创建的主题 问与答 有没有专门讲解万事万物的第一性原理的网站?
@winglight2016 是,所以我看到标题就想推荐 www.vatican.va/latin/latin_index.html
2022-11-05 01:47:15 +08:00
回复了 haolongsun 创建的主题 硬件 amd 大降价!,历史第一次。
大快所有人心的大好事,看来摩尔定律它又回来了 :)
2022-11-04 04:51:50 +08:00
回复了 afirefish 创建的主题 程序员 后续, Win11 下大小核心调度问题。
@mrzx
> 因为调度真正是由 cpu 硬件里的 ITD 来调度的

错误。调度依然是由 OS 控制。
根据 Intel SDM 14.6 的描述,ITD 的功能是 "Hardware provides guidance to the Operating System (OS) scheduler to perform optimal workload scheduling through a memory resident table and software thread specific index (Class ID) that points into that table and selects which data to use for that software thread."

实际上 ITD 是对 Hardware Feedback Interface (HFI) 的扩展(这东西之前就有个名字叫 EHFI ),后者是 LKF 开始加入的一个比较初步的版本(当时貌似叫 Hardware *Guided* Scheduling ,鉴于 LKF 是 2020 年的东西,理论上 Win10 应该是有 HFI 支持的 ...)。Intel SDM 对 HFI 的描述是 "Hardware provides guidance to the Operating System (OS) scheduler to perform optimal workload scheduling through a hardware feedback interface structure in memory." 具体说来,就是 CPU 会评估每个 logical thread 的能力( capability ),目前包括在性能方面的和能效方面的,然后会给 OS 传一个表,表中用一个数值表示每个 logical processor 的不同 capability 。 就这么一个东西。

ITD 的扩展是加入了"Class"的概念,根据优化手册和白皮书,目前有四个 Class ,分别是标量,向量,较新的指令,和自旋等待。ITD 表和 HFI 表类似,但是每个 logical processor 的 capability 不再是一个值,而是会给出执行不同 Class 软件时的 capability (也就是说 HFI 表可以被看做只有一个 class 的 ITD 表)。另外,ITD 加入了一个“Run Time Characteristics”的功能,CPU 会试图将一段时间内运行的代码归类到某一个 Class 中。OS 会读取这些信息,ITD 本身并不决定如何调度。
在描述这些功能时,SDM 使用了如下措辞:
> the lowest performance level of 0 indicates a *recommendation* to the OS to not schedule any software threads on it for performance reasons.
> When the OS Scheduler needs to decide which one of multiple free logical processors to assign to a software
thread that is ready to execute, it *can* choose ...
> When the two software threads in question belong to the same Class ID, the OS Scheduler *can* schedule to higher performance ...
> Zeroing a performance or energy efficiency cell *hints* to the OS that it is beneficial not to schedule ...

类似地,优化手册中对 ITD 的描述如下:
> Intel® Thread Director continually monitors software in real-time giving *hints* to the operating system's
scheduler *allowing* it to make more intelligent and data-driven decisions on thread scheduling. With Intel
Thread Director, hardware provides runtime *feedback* to the OS per thread based on various IPC perfor-
mance characteristics, in the form of ...

白皮书中描述如下:
> ... we wanted to develop a hardware solution that would *assist* the OS achieve optimal runtime scheduling by the Intel Thread Director giving the OS more *information* by monitoring instruction mix, the current state of each core, and the relevant microarchitecture telemetry at much more granular level than would be available via instrumentation
> The Intel Thread Director provides *hints* to the OS scheduler with thread-related information. Using these hints, the OS *can* choose between energy efficiency (EE) and performance (PERF) depending on system parameters like power policy, battery slider, etc.

www.computerbase.de/2021-08/hot-chips-33-intel-alder-lake-steht-und-faellt-mit-dem-thread-director Hot Chips 33: Intel Alder Lake steht und fällt mit dem Thread Director - ComputerBase 这里有 ADL 在 HC33 上的胶片,其中一大块是有关 ITD 的
lore.kernel.org/lkml/[email protected] [RFC PATCH 00/23] sched: Introduce classes of tasks for load balance - Ricardo Neri 这是 ITD 在 Linux 上的 patch ,邮件正文也包含了对 ITD 工作模型的描述,当然由于 Linux Kernel 是跨平台的,这堆 patch 是先在 Linux 调度器上做了一个根据 Class 调度的框架,然后再把 ITD 作为 x86 的实现塞进去,所以描述本身并不涉及太多细节。

主要由硬件控制的东西倒是有,就是用于调整频率的 Speed Shift ( SDM 中叫 Hardware P-State (HWP)),效果见 chipsandcheese.com/2022/09/15/how-quickly-do-cpus-change-clock-speeds How Quickly do CPUs Change Clock Speeds? – Chips and Cheese ,不过这东西 SKL 就有了。而且 HWP ,HFI ,ITD 都是可以禁用的 ...
1 ... 7  8  9  10  11  12  13  14  15  16 ... 123  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2831 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 34ms · UTC 02:59 · PVG 10:59 · LAX 18:59 · JFK 21:59
Developed with CodeLauncher
♥ Do have faith in what you're doing.