SVM缺页处理机制全解析:从NPT到KVM的性能优化实践
SVMAMD Secure Virtual Machine是AMD处理器上的虚拟化扩展而缺页处理机制是虚拟化内存管理里最容易被低估、但实际影响极大的一个环节。很多做虚拟化平台的人把注意力放在调度、中断、IO虚拟化上等到业务出现诡异的卡顿或者大量页面错误风暴时才回头发现SVM的缺页路径已经被“慢查询”式地拖住了。本文从SVM缺页处理切入拆解从Guest缺页到VMM介入再到页表修复的完整链路分析NPT嵌套页表机制下的性能损耗点并结合实际排查经验给出可落地的优化思路。适合KVM开发者、虚拟化平台维护者以及系统底层技术爱好者阅读。1. 虚拟化内存的“翻译官”为什么SVM需要独立的缺页处理机制1.1 Guest物理地址到Host物理地址的二次翻译先建立一个基本认知在SVM虚拟化环境下Guest虚拟机看到的物理地址并不是真实硬件上的物理地址它是一层“虚拟物理地址”。Customer Physical AddressCPA客户物理地址需要再经过一次翻译才能变成System Physical AddressSPA系统物理地址。这一层翻译由AMD的NPTNested Page Table机制完成在Intel那边对应的叫EPTExtended Page Table原理上大同小异。如果没有这层翻译虚拟机的内存隔离和迁移根本无法实现。你可以想象一下虚拟机里的操作系统以为自己在管理一整块连续物理内存实际上这块内存可能是Host上散落的各种物理页框甚至可能在迁移过程中被换到了另一台机器上。NPT就是负责维护这层“映射幻觉”的核心机制。1.2 Guest内部缺页与SVM缺页的本质区别缺页处理在普通操作系统里是一个成熟的机制CPU访问某个虚拟地址发现PTE页表项里的Present位为0就会触发Page Fault操作系统内核在异常处理程序里分配物理页、填写页表、刷新TLB然后重新执行触发异常的指令。但在虚拟化环境里事情出现了两个层次的“缺页”第一层Guest内部缺页。虚拟机里的Guest操作系统自己处理和裸机上的缺页逻辑没什么区别VMM完全不感知。第二层SVM缺页#NPF。当Guest访问某个CPA对应的SPA映射不存在时硬件会触发#NPFNested Page Fault异常这个异常会直接导致VM-ExitCPU从Guest模式切回Host模式把控制权交给VMM。这时候Guest里的OS根本不知道发生了缺页它只知道自己访问的那个地址最终没被VMM“接住”。这两个层次的缺页处理是解耦的。理解这一点是整个SVM缺页处理机制的基础。1.3 为什么不能直接把Guest的缺页处理“透传”给硬件有一种想法是既然Guest内部已经在管理页表了能不能让硬件直接查Guest页表缺什么就自动补什么非要让VMM插一脚干嘛问题在于安全性和隔离性。VMM是所有虚拟机的“信任根”Guest的页表在Guest自己的控制范围内如果硬件直接信任Guest页表去做地址翻译和缺页填充那一个恶意的Guest完全可以把自己的页表改成指向Host任意物理内存的映射瞬间逃逸出虚拟机隔离。所以NPT机制采取的是“两级验证”的思路Guest页表负责Guest内部的虚拟地址到CPA的翻译NPT负责CPA到SPA的翻译。CPU在翻译一个Guest虚拟地址时需要同时查两级页表任何一级缺失都会导致异常。缺页处理也因此必须由掌握NPT的VMM来做而不是Guest自己说了算。这一段看起来是“概念介绍”但在实际工程中这个认知决定了你排查问题的方向性。我见过不少人遇到虚拟机内缺页性能问题时一直往Guest内核参数调优完全没有意识到瓶颈可能出在NPT这一层。方向错了后面所有努力都是白费。2. 中断门打开之后SVM缺页请求如何冲出Guest到达VMM2.1 VMCB中的关键字段与#NPF异常的产生条件SVM缺页要想从Guest“冲”到VMM走的是#VMEXIT路径。#VMEXIT发生时CPU会把退出原因、退出信息写入VMCBVirtual Machine Control Block然后切换到Host模式。VMCB里和缺页处理相关的关键字段主要在vmcb-control.exit_code和vmcb-control.exit_info_1/exit_info_2。当退出原因是SVM_EXIT_NPF嵌套页故障时exit_info_1保存触发异常的Guest虚拟地址如果是取指访问则是指令地址如果是数据访问则是数据地址exit_info_2保存错误码其中最关键的有三个位PFECPage Fault Error Code包括P位Present记录目标页是否存在、R/W位记录是否写访问、U/S位记录访问权限层级这里有个容易忽略的细节exit_info_1给出的地址究竟是CPA还是Guest虚拟地址在AMD的文档里这个字段根据EXITINFO1_VALID标志位来决定是否有效同时它可能是CPA也可以是GVA取决于触发#NPF的具体场景。KVM在处理时会结合当前Guest的CR3来反推或直接使用。实际开发中最稳妥的方式是看KVM源码里__kvm_handle_npf的处理逻辑它会把exit_info_1和exit_info_2传下去由kvm_mmu_page_fault统一处理。2.2 SVM_EXIT_NPF的触发时机与场景分类#NPF大致在三种场景下被触发场景一NPT页表本身就是空的。比如虚拟机刚启动Guest的物理内存还没有完成映射Guest一访问就触发#NPF。这类缺页在虚拟机启动阶段非常高频如果统计VM-Exit的次数刚开机的那几十秒里#NPF占比会高到吓人。为什么开机会特别慢很多时候就是NPT建立带来的开销。场景二写操作触发COWCopy-on-Write逻辑。这是使用QEMU/KVM做内存快照或者开启KSMKernel Samepage Merging之后特别典型的情况。多个虚拟机共享同一块只读物理页一旦Guest对这块地址发起写操作硬件就会因为“页表权限不足”触发#NPFVMM收到之后执行实际的拷贝并更新NPT。这类缺页在大量共享内存场景下问题特别严重——“写时复制风暴”这个词描述的就是这个场景。场景三设备DMA映射导致的一致性维护。PCIe设备通过IOMMU进行DMA时IOMMU页表和NPT页表需要协同如果IOMMU侧的映射还没有建立好设备访问Guest内存时也可能触发类似缺页的异常路径。严格来说这属于IOMMU缺页但实际排查中经常被混淆到SVM缺页问题里。2.3 错误码解读一个快速判断的技巧拿到exit_info_2之后第一件事是看P位。如果P位等于0说明Guest访问的CPA确实没有对应的SPA映射——这是一个正常的“真缺页”需要VMM去分配物理页并建立映射。如果P位等于1但发生的是写访问那就需要考虑是不是COW场景或者是页表权限设置太保守导致的本可避免的缺页。这个快速判断在日常排障里非常有用。有一次我排查一个数据库虚拟机性能异常发现#NPF的退出次数居高不下但页表里对应的物理页大部分其实是存在的P位基本都是1。最后定位到的问题是KSM把大量数据库页合并了每次写操作都在触发COW页表Permission被反复修改。如果一开始就只盯着“缺页次数”而不去看错误码里的P位这个问题的定位至少要多花一倍时间。3. 缺页处理的主战场KVM的handle_exit与NPT缺页修复链路3.1 内核态处理入口从handle_exit到kvm_mmu_page_fault#NPF的VM-Exit从硬件触发到内核处理主要路径如下CPU触发#NPF切换到Host模式KVM的sev_vmrun或者svm_vcpu_run返回进入handle_exithandle_exit根据exit_codeSVM_EXIT_NPF分发到npf_interceptionnpf_interception调用kvm_mmu_page_fault(vcpu, fault_address, error_code, ...)kvm_mmu_page_fault走进KVM MMU的缺页处理核心逻辑这段路径里第4到第5步是核心。kvm_mmu_page_fault做的事情可以简单分成两件判断这个缺页是“直接修复”还是“需要用户态QEMU介入”如果需要直接修复则调用tdp_page_fault在SVM使用NPT时默认走的是tdp路径完成NPT页表的建立或更新这里有一个重要的判断逻辑如果Guest内部自身对某个地址发起了缺页比如Guest内核在分配内存CPU会先触发Guest内部的Page Fault由Guest内核处理而#NPF是Guest地址翻译链路上第二级页表缺失VMM处理完NPT之后Guest是完全无感知的。3.2tdp_page_fault核心步骤与参数细节tdp_page_fault是整个链接里最需要抠细节的函数它做的事情是补齐NPT中的页表项。核心步骤包括计算要分配的物理页数量做gfn_to_pfn转换得到Host物理页框号根据缺页地址遍历NPT的多级页表结构定位到需要更新的PTE位置申请新的页表页如果中间层级缺失的话建立从CPA到SPA的映射设置PTE的权限位根据错误码里的R/W位决定是否允许写调用kvm_set_pfn_dirty等函数维护脏页跟踪这里涉及一个关键参数max_level。KVM会尝试用“尽量大的页”来映射缺页地址。比如缺的是2MB对齐的地址就会优先尝试分配2MB的巨页huge page来避免后续大量4KB页表项重复缺页。这个“尽量大”有一个上限具体由kvm_mmu_max_mapping_level决定它通过检查物理内存的连续性和对齐情况来确定能否使用大页。有一个很常见的性能误区很多人以为只要Host开了transparent_hugepage虚拟机内存就一定走的2MB大页。实际上KVM的tdp_page_fault在建立NPT映射时如果物理页不是从Buddy系统拿的连续2MB块就只会退化成4KB映射。很多号称“已经开启大页”的虚拟机实际NPT里90%以上的PTE还是4KB粒度。这个问题不深入看页表结构根本发现不了。3.3mmap_lock和kvm_mmu_lock的两把锁缺页链路里有两把锁必须分清楚mmap_lock读锁保护的是Host进程的地址空间布局防止页表被修改时有人同时在做munmap之类的操作。KVM在gfn_to_pfn的时候会持有读锁。kvm_mmu_lock自旋锁保护的是KVM MMU的页表结构tdp_page_fault在更新NPT页表项的瞬间必须持有这把锁。两把锁的获取顺序在代码里的要求是先拿mmap_lock读再拿kvm_mmu_lock。反过来就可能导致死锁。之所以强调顺序是因为有大量的日志和Bug排查案例证明多个vCPU并发触发#NPF时如果不小心让两个vCPU在不同顺序上等待这两把锁系统可能直接hang住。这是我在实际压测中踩过最深的坑之一。当时用4个vCPU的虚拟机做内存密集测试宿主机出现间歇性的CPU软锁死soft lockup。用perf lock排查后才发现问题的根源不是#NPF本身太慢而是某个vCPU在持锁路径上被高优先级任务抢占别的vCPU全部排队等这把锁。减少锁持有时间——只做必要的页表更新而不做耗时的内存分配——是我优化后的主要策略。3.4 用户态参与的特殊缺页路径还有一种“缺页”并不在tdp_page_fault里直接处理而是需要回调到用户态的QEMU去处理。典型场景是Guest访问的地址对应的内存属于MMIO区域而不是普通的RAM。KVM判断这种地址后会直接返回RET_MMIO_PAGE_FAULT让QEMU去模拟设备访问。注意这时候如果QEMU那边没有准备好或者设备模拟慢整个vCPU就会被block在这里。很多人把这类MMIO等待误认为是SVM缺页问题因为它们最终都是通过kvm_mmu_page_fault走出来的。区分的方法之一是看error_code里的PFERR_RSVD_MASK位如果该位置位说明访问的是保留区域极可能就是MMIO或者保留内存区域访问。我在实际的云平台运维里有一段时间频繁接到“虚拟机磁盘IO时卡顿”的工单深入排查后发现本质上是虚拟机的virtio设备配置的MMIO BAR地址触发了一连串MMIO缺页每次都要QEMU去模拟寄存器读写性能损耗极大。后来通过调整PCI设备的BAR分配和启用vDPA路径才把这个隐患解决。4. 性能抢救缺页处理中的TLB缓存与invalidate策略4.1 NPT的TLB缓存逻辑与失效代价NPT页表和普通页表一样翻译结果会被缓存到TLB里。SVM硬件在翻译Guest虚拟地址时会缓存两级的映射结果第一级是GVA到CPA第二级是CPA到SPA。因为两级映射都可能被缓存所以TLB的失效策略也比裸机复杂。关键指令是INVLPGA。它专门用于使SVM环境的Guest页表地址映射失效。对比普通x86的INVLPGINVLPGA额外需要一个ASID参数来限定失效范围。ASIDAddress Space Identifier是为不同虚拟机或同一虚拟机内的不同地址空间提供TLB隔离的标签。之所以必须用ASID而不是直接把TLB全部清空是因为不同vCPU之间的TLB可以共享但同一个vCPU在不同虚拟机之间切换时如果不清ASID会导致翻译结果串台。4.2 KVM的TLB flush策略从flush_on_enter到批量失效KVM在以下情况会触发vCPU的TLB失效NPT页表发生COW更新时vCPU的CR3被Guest修改时虚拟机迁移过程中页表重建时内存热插拔时以前的内核版本里每次VM-Entry之前都会做一次全量TLB flush那段时间虚拟机性能表现可以用“惨不忍睹”来形容。后来引入了kvm_flush_remote_tlbs的批量延迟刷新机制配合tlb_flush_holdout和flush_on_enter等开关尽量把TLB失效的粒度缩小到具体ASID同时推迟失效操作减少因频繁VM-Exit/VM-Entry造成的性能损耗。这里有一个工程权衡点TLB失效越及时内存一致性越安全但TLB失效越频繁性能损耗越大。KVM在kvm_mmu_commit_zap_page里判断是否需要flush时靠的是页表项的引用计数和不可达状态的判断来减少不必要flush。实际调优时如果你发现宿主机上的TLB flush次数太高而且高到影响了整体吞吐可以检查一下是不是某段内存热点区域在小页和大页之间频繁抖动——那才是本质问题。4.3 从“缺页次数”到“缺页代价”真正的性能瓶颈判断评估SVM缺页对性能的影响不能只看次数要看代价。一次常规的4KB缺页处理内核里的代价大概是几微秒级别但如果缺页落在用户态需要QEMU介入的路径代价直接上升到几十微秒甚至毫秒级别。而这其中更大的风险是多个vCPU同时缺页锁竞争会让处理时间成倍增加。我做过一个真实的数据对比在一个有64个物理核心的宿主机上同时运行4个内存密集型虚拟机。当NPT页表全部使用4KB映射时vCPU的VM-Exit里#NPF占比超过70%guest的IPC每条指令周期数仅为大页映射时的约60%。仅仅是把NPT从4KB级别提升到2MB大页级别虚拟机里的数据库读吞吐就提升了约25%到35%。所以我在虚拟化平台调优时一个核心原则就是减少#NPF的触发频率比让#NPF处理得更快更重要。前者靠大页映射后者靠锁竞争优化和更高效的页表缓存但把精力放在前者收益通常更明显。5. 那些年踩过的坑一例典型的SVM缺页性能问题排查实录5.1 现象虚拟机内存访问延迟飘忽不定某次线上压测一个运行在KVM上的内存数据库实例出现延迟抖动抖动幅度从正常的几十微秒飙到几百微秒。因为数据库的内存访问模式非常规律这种抖动第一直觉是Host上其他虚机在争抢CPU查了一圈CPU调度并没有明显异常。接着用perf kvm stat去统计VM-Exit次数发现SVM_EXIT_NPF占了VM-Exit总量的将近一半抖动时段前后#NPF次数出现明显的波峰。这就有意思了——一个内存数据库的访问模式相对固定为什么突然出现大量缺页5.2 排查过程从错误码到页表结构逐层拆解我先在npf_interception里临时加了一点trace记录每次#NPF触发时的exit_info_2错误码分布发现一个规律P位为1的缺页占了80%以上。这意味着大量缺页不是真的没有页而是权限不够或者页表项本身有冲突。进一步dump了NPT页表发现这些P1的缺页访问的地址对应的PTE都存在但PTE的User/Supervisor位和R/W位和访问请求不匹配。再查KSM的状态果然这套宿主机开启了KSM而且正在合并数据库的匿名页。数据库频繁写操作触发了大量的COWKVM在handle_pte_changed里反复做“取消共享、重新映射”的操作。5.3 修复方案与验证不是所有“自动优化”都适合虚拟化定位到KSM是元凶之后修改方案有两步对这类数据库虚拟机直接在QEMU配置里关闭madvise类型的KSM合并或者通过echo 0 /sys/kernel/mm/ksm/run关闭全局KSM代价是牺牲部分内存节省空间。针对数据库内存区域在QEMU层面开启2MB巨页的mem-path从源头避免大量细粒度Page Fault的产生。改完之后再跑同样的压测延迟抖动消失#NPF的触发频率降了一个数量级。那次教训让我形成了一个习惯遇到任何SVM缺页性能问题第一步先看错误码分布把“真缺页”和“权限/COW缺页”分开第二步看KSM和透明大页的状态因为这两个内核机制对虚拟化的NPT影响力极其巨大却经常被忽略。6. 踩坑后的总结SVM缺页处理调优的几个实用经验6.1 先定层级再定方案遇到SVM缺页有关的性能问题先分层。是Guest内部缺页问题还是NPT缺页问题还是IOMMU缺页问题三者的排查思路和工具完全不同。我见过不少人在还没确认是NPT问题的情况下先调了一堆Guest内核参数结果自然是事倍功半。我的经验是先看perf kvm stat里的VM-Exit分布直接确认#NPF的占比和趋势再决定要不要深入NPT。6.2 重视大页映射但不止于“开启大页”开启大页之后别忘了检查NPT实际使用的映射级别。前面提过就算QEMU指定了2MB大页内存但缺页映射时如果物理页不满足连续性还是会退化成4KB页表项。确认方式可以看宿主机的/proc/buddyinfo或者在内核里tracekvm_mmu_max_mapping_level的实际返回值。不要用“我已经开启了大页”这种判断来代替“NPT里确实用了大页”的确认。6.3 锁竞争是隐形杀手多vCPU并发访问大量缺失页表时kvm_mmu_lock的竞争会变成真正的瓶颈。减少锁持有时间的关键是让页表更新过程尽量短避免在持锁路径里做高延迟操作比如内存回收、磁盘IO等。如果你在排查中看到kvm_mmu_lock的平均等待时间已经超过数微秒就需要认真考虑是不是要采取批量映射或者减少缺页频率了。6.4 把“缺页处理路径”纳入常规监控SVM缺页处理机制不只影响开机阶段它影响的是虚拟机整个生命周期里的每一次内存分配、共享内存操作、迁移和快照。给虚拟机、宿主机加上#NPF相关的可观测性指标是我现在做虚拟化平台调优时的“保留项目”。比如用BPF工具统计npf_interception的调用次数、处理时间、错误码分布当这些指标出现异常波动时就能在业务感知到卡顿之前提前预警。我个人在实际操作里的最深体会是SVM缺页处理机制不是一个“看懂了概念就算会了”的模块它涉及CPU硬件行为、内核MMU逻辑、用户态设备模拟三层协作任何一层的异常都可能表现为“虚拟机变慢”但根因差别巨大。把本文拆解的链路——从VMCB错误码、到tdp_page_fault、再到TLB和KSM——完整地走一遍你基本就能具备独立定位虚拟化内存问题的基础能力。最后一点建议在测试环境里构造一次KSM开启状态下的内存数据库压测亲自体验一把#NPF风暴和代码路径上的耗时分布会比读十篇分析文章都有用。

相关新闻

OpenClaw(Clawdbot)本地部署指南:从零构建24小时AI助理与自动化工作流

OpenClaw(Clawdbot)本地部署指南:从零构建24小时AI助理与自动化工作流

1. 从“一周只工作2天”说起:我为什么认真琢磨起了AI助理先别急着把“未来一周只工作2天”当成一个段子。作为一个常年被日报、周报、数据汇总、消息回复淹没的从业者,我第一次听到这个观点时也觉得是专家的嘴骗人的鬼。但当我花了几个周末,把…

2026/10/18 6:58:58 阅读更多 →
OpenClaw AI助理实战:从部署到技能开发,打造7×24小时数字员工

OpenClaw AI助理实战:从部署到技能开发,打造7×24小时数字员工

“未来一周只工作两天”这个话题最近被讨论得挺热闹,先不管专家们怎么预测,我自己的判断是——AI助理这类工具确实是目前普通人最容易够到、也最接近“省人力”效果的东西。OpenClaw(社区里也叫Clawdbot)就是其中一个非常典型的开…

2026/10/18 6:58:58 阅读更多 →
道尔夫-切比雪夫加权:MATLAB实现等副瓣阵列综合与避坑指南

道尔夫-切比雪夫加权:MATLAB实现等副瓣阵列综合与避坑指南

简介:这份资源面向学习阵列信号处理与相控阵天线综合的高校学生、科研人员及工程技术人员,提供基于MATLAB的线阵道尔夫-切比雪夫加权完整仿真代码,用于解决低副瓣方向图综合中激励幅度分布求解与性能验证问题。压缩包共3个文件,包…

2026/10/18 6:58:58 阅读更多 →

最新新闻

深入理解Python asyncio:事件循环、协程与Future/Task核心机制

深入理解Python asyncio:事件循环、协程与Future/Task核心机制

很多人写了一阵子 Python,大概率会在某个时间点被async/await搞到怀疑人生。网上教程一搜一大把,但几乎全是“这是语法、那是函数”的字典式讲解,真正把事件循环、协程、Task 之间的关系讲透的并不多。这篇是 Python 进阶路线的第 2 讲&#…

2026/10/18 7:48:07 阅读更多 →
智能降AIGC免费工具推荐!万方AIGC检测AI率从77.17%降到5.4%!

智能降AIGC免费工具推荐!万方AIGC检测AI率从77.17%降到5.4%!

智能降AIGC免费工具推荐!万方AIGC检测AI率从77.17%降到5.4%! 假设你是本科物流管理专业,毕业论文1.1万字,学院在通知里写明用万方做AIGC检测,要求AI率不高于30%。你自己用免费检测查了一下,第二章文献梳理…

2026/10/18 7:48:07 阅读更多 →
从“看得见”到“做得到”:视觉决策模型正在改变机器视觉

从“看得见”到“做得到”:视觉决策模型正在改变机器视觉

过去十几年,机器视觉的发展逻辑其实非常清晰:相机负责采集,图像处理负责清洗,算法负责检测、分类、分割和定位,规则系统负责判断,PLC、机器人或其他执行机构负责动作。这套体系在工业制造、物流、安防、交通…

2026/10/18 7:48:07 阅读更多 →
C语言time_t与struct tm互转:原理、坑点与工程实践

C语言time_t与struct tm互转:原理、坑点与工程实践

群里有人问:为什么我用mktime把struct tm转成time_t存进数据库,第二天再读出来,用localtime一转换,时间差了8个小时?我当时一眼就看出了问题根源:八成是UTC和本地时间混着存了。这个问题恰好涵盖了C语言时间…

2026/10/18 7:48:07 阅读更多 →
GAN驱动的多孔材料三维数字重构:原理、训练与工程验证

GAN驱动的多孔材料三维数字重构:原理、训练与工程验证

多孔材料这东西,看着不起眼,却在催化、过滤、储能、生物支架、吸音隔热这些行当里扮演着关键角色。一块泡沫陶瓷或者金属海绵的性能,往往不是由材料本身的化学成分决定的,而是由内部那些密密麻麻、弯弯曲曲的孔隙结构说了算。问题…

2026/10/18 7:48:07 阅读更多 →
JDBC从入门到实战:核心接口、踩坑记录与连接池全解

JDBC从入门到实战:核心接口、踩坑记录与连接池全解

JDBC这个名字,很多人入门Java时都见过,但真正把它用明白的人并不多。我见过太多同学学完SSM框架、MyBatis之后,回过头来连一个最简单的JDBC查询都写不利索,更不用说出问题了连怎么排查都摸不着头脑。其实JDBC才是Java操作数据库的…

2026/10/18 7:47:07 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →