尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Linux内核模块与KVM虚拟化:从加载机制到落地调优的实战笔记
记笔记这件事我一直觉得最有价值的部分不是记下来而是为了记清楚而不得不把原理搞明白的过程。这套 Linux 内核模块与 KVM 虚拟化笔记就是我在调优虚拟化平台性能时被逼出来的产物。当时遇到一个诡异现象虚拟机网络吞吐上不去直觉以为是 QEMU 或者网络后端的问题查了一圈才发现瓶颈居然在内核模块的参数配置上。从那以后我就意识到搞虚拟化如果不懂内核模块就像开车不懂仪表盘能开但出了问题只能干瞪眼。这份笔记既包含了内核模块的加载机制、开发调试要点也包含了 KVM 作为一个内核子系统的运行逻辑、模块参数怎么影响行为、常见故障怎么排查。适合正在使用 KVM 虚拟化的运维、后端开发以及想系统了解 Linux 模块机制的读者。我不会写那种面面俱到的教材内容只记录那些真正用得上、也真正容易踩坑的地方。1. 为什么把内核模块和 KVM 放在同一本笔记里1.1 虚拟化看起来是软件本质上是内核很多人第一次接触 KVM 时会以为它是某个用户态程序毕竟平时操作它全是在敲 virsh 命令、写 libvirt 配置。但 KVM 的全称是 Kernel-based Virtual Machine它首先是一组内核模块而不是用户态程序。你的系统里如果没有加载 kvm.ko 和对应的 kvm-intel.ko 或 kvm-amd.ko那么 QEMU 进程跑得再欢也没办法把指令直接交给你本机的 CPU 去执行虚拟化。具体的文件位置一般在 /lib/modules/$(uname -r)/kernel/arch/x86/kvm/ 下面。这个目录里躺着 kvm.ko、kvm-intel.ko、kvm-amd.ko 等文件它们不是平时所谓的驱动插件而是真正运行在内核态、拥有最高权限执行环代码的模块。虚拟机里面的 CPU 指令最终要落到宿主机物理 CPU 上中间这个翻译、调度、隔离的活全靠这几个模块在干。所以学习 KVM本质上就是在学习如何使用一组特定的内核模块。如果不了解模块的加载、卸载、参数配置、依赖关系你遇到 KVM 相关的问题时就是两眼一抹黑。1.2 这份笔记适合谁我整理这份笔记时心里默认的读者是两类人。一类是像我这样经常和虚拟化平台打交道的运维或 SRE需要快速定位为什么虚拟机起不来为什么迁移失败为什么性能不达标。另一类是做 Linux 底层开发的工程师需要系统理解模块机制如何支撑上层应用。如果你是刚接触 Linux 的新手这份笔记也能看但建议先弄懂几个基础概念再看比如内核态和用户态的区别系统调用的大致流程。如果你是做后端应用开发的平时只接触容器不接触虚拟机那这份笔记里更值得关注的是第一部分和第二部分——内核模块的加载机制跟 systemd 管理服务有很像的地方理解了模块的依赖、装载顺序、参数注入再回头看容器运行时的一些行为会有一通百通的感觉。1.3 我记录笔记时使用的环境为了后面提到的命令都能对上号先交代一下我长期测试用的环境x86_64 架构内核版本 5.x 系列不同章节用的机器略有差异发行版是带 systemd 的常见 Linux 发行版。KVM 用户态这边用的是 QEMU/KVM 加 libvirt 的组合。后面所有 lsmod、modprobe、dmesg 的输出格式在不同内核版本之间基本稳定但具体参数名可能会随内核升级而变化遇到差异以你本机的 modinfo 输出为准。这套环境并不特殊不需要特定硬件只要 CPU 支持硬件虚拟化Intel VT-x 或 AMD-V就行。测试虚拟化功能前务必先确认 CPU 虚拟化特性在 BIOS 里是打开的这一步很多人忽略。2. 内核模块的加载生命周期从 modprobe 到 /sys/module2.1 四条常用命令背后的逻辑内核模块的日常管理离不开 insmod、modprobe、rmmod、modinfo 这几个命令。很多人把 insmod 和 modprobe 混着用看到也能加载成功就以为它们是一样的。其实区别很大insmod 只是机械地把指定的 .ko 文件装载进内核不处理依赖关系modprobe 则会根据模块间的依赖关系自动先加载依赖模块再从标准模块目录里找到目标模块加载。举例来说如果你要加载一个依赖于内核密钥保留服务的模块直接 insmod 那个 .ko 文件大概率报错Unknown symbol原因就是依赖没有被先加载进来。用 modprobe 就不会有这个烦恼它会查 /lib/modules/$(uname -r)/modules.dep 这个依赖关系文件把前置模块一个个按顺序加载。rmmod 用来卸载模块但前提是这个模块没有被其他模块引用也没有被进程占用。如果需要强制卸载rmmod -f 可以做到但我不建议在生产环境这么干强制卸载很可能导致内核状态不一致轻则功能异常重则直接 panic。更稳妥的做法是先找出引用方把引用方停掉再卸载。modinfo 则是查看模块元信息的工具它显示的 license、description、depends、parm 等字段几乎是排查模块问题的第一手资料。特别是 parm 字段会列出这个模块支持哪些参数这直接影响你后面怎么做性能调优。2.2 从 lsmod 输出里你能读到的信息lsmod 命令的输出看起来就是一个简单的表格实际信息量比想象中大。第一列是模块名第二列是模块被多少个实例引用第三列是被哪个模块引用第四列是模块依赖的其他模块。举个例子当你执行 lsmod | grep kvm 时通常能看到 kvm_intel 和 kvm 两行kvm_intel 这一行的最后一列如果是 kvm就表示 kvm_intel 依赖了 kvm 这个基础模块。如果这里只有 kvm 而没有 kvm_intel那说明你当前 CPU 不是 Intel 的或者 kvm_intel 模块加载失败了。这种依赖信息能帮你快速定位一个问题为何某些模块被加载了某些没有。另外/proc/modules 文件里能看到比 lsmod 更原始的信息包括模块加载的内存地址、模块大小、加载状态等。在排查内存碎片化导致的模块加载失败时这个文件里的数据更有参考价值。dmesg 里如果有module verification failed这种关键字也跟模块加载过程直接相关后面我会专门展开。2.3 模块参数是怎么生效的模块参数是内核模块对外暴露的旋钮。加载时可以在 modprobe 命令行里以参数名值的方式传入也可以写在配置文件里。推荐的做法是写在配置文件中因为这样重启后依然生效手敲命令的方式重启就丢。配置文件通常放在 /etc/modprobe.d/ 目录下文件名后缀必须是 .conf例如 /etc/modprobe.d/kvm.conf。格式很简单一行一个配置。对于加载类参数用 options 关键字比如给 kvm_intel 模块设置嵌套虚拟化参数options kvm-intel nested1对于要在系统启动早期就加载的模块可以用 install 或 alias 关键字配合 systemd 的 modprobe.service 服务来实现。不过大多数场景下模块会按照依赖关系被自动加载你只需要写好参数配置然后在文件里加一行 softdep 声明依赖顺序即可。KVM 这种模块通常不需要自己手动加启动加载配置QEMU 进程起来的时候依赖链会自动把模块拉起来。参数生效后可以去 /sys/module/模块名/parameters/ 目录下检查。每个参数对应一个文件cat 即可读出当前值。需要注意的是有些参数是只读的在模块加载后无法修改只能在加载前通过 modprobe 配置。例如 kvm-intel 的 nested 参数虽然某些内核版本支持运行时修改但稳妥的验证方式还是重启后确认。3. 手写最小内核模块时容易忽略的三个细节3.1 入口函数不是 main内核模块代码跟普通 C 程序最大的不同是它没有 main 函数。模块的入口是通过 module_init 宏注册的出口通过 module_exit 宏注册。加载模块时内核执行入口函数卸载时执行出口函数。下面是最小可用的示例#include linux/init.h #include linux/module.h #include linux/kernel.h static int __init hello_init(void) { printk(KERN_INFO hello module loaded\n); return 0; } static void __exit hello_exit(void) { printk(KERN_INFO hello module unloaded\n); } module_init(hello_init); module_exit(hello_exit); MODULE_LICENSE(GPL); MODULE_DESCRIPTION(A minimal example module); MODULE_VERSION(1.0);这里 __init 和 __exit 是内核提供的属性标记带有 __init 的函数在模块加载完成后会释放占用的内存带 __exit 的函数在模块编译进内核而非以 .ko 形式加载时会被忽略。新手写模块经常忘记写 MODULE_LICENSE这会导致加载时出现 kernel taint 警告虽然不是致命错误但在生产环境看到 taint 标志会让人很不安。3.2 printk 的日志级别与 dmesg 对应关系内核模块里的 printk 和用户态的 printf 最大的区别在于日志级别。printk 可以带一个日志级别前缀常见的从 KERN_EMERG 到 KERN_DEBUG一共 8 级。如果没写级别会有默认级别。日志最终会进内核环形缓冲区用 dmesg 查看。这里有一个实践性很强的小技巧调试模块时别统一用 KERN_INFO最好在关键路径用 KERN_DEBUG在出错路径用 KERN_ERR。这样你在 dmesg 里过滤时非常方便比如 dmesg | grep KERN_ERR 就能把错误全捞出来。配合 printk 的速率限制接口还能防止调试信息刷爆 dmesg 缓冲区。调试时改代码要重新编译、重新加载模块效率比用户态调试低不少。我自己的习惯是先用 ftrace 或者 kprobe 看函数的调用路径确定大致范围后再加 printk 精确定位。盲打 printk 不是不行只是一次全路径打印到最后日志太多反而干扰判断。3.3 版本魔法与模块签名把模块从一台机器拷贝到另一台机器加载最常见的报错是version magic mismatch。这是因为 .ko 文件编译时记录的 vermagic 信息包括内核版本号、SMP、PREEMPT 等配置和当前运行内核不一致。普通的内核模块开发一般用本地编译本地加载的方式规避这个问题真要跨机器用最省事的办法是在目标机器上重新编译。模块签名则是一个更严肃的问题。开启内核安全启动Secure Boot的机器只允许加载经过签名的模块。自己编译的模块默认没有有效签名加载时会报 module verification failed。解决办法有几种给内核关闭安全启动要求、用自己的密钥签名模块并注册到内核密钥环、或者直接用发行版提供的 signed module 构建流程。测试环境下最省事的是关闭安全启动生产环境建议认真做签名。签名检查失败的特征很隐蔽模块可能不是完全加载不了而是加载后某些功能受限。我遇到过的情况是模块能加载但相关设备节点不工作排查半天才发现是签名问题导致模块被标记为 tainted。4. KVM 本身就是内核模块这点决定了它的性能边界4.1 用 lsmod 检查 KVM 模块的状态前面已经提到KVM 在工作时依赖三个关键词模块kvm、kvm-intel 或 kvm-amd。运行 lsmod | grep kvm结果应该是这样的kvm_intel 200000 12 kvm 700000 0如果没有任何输出说明 KVM 模块没加载虚拟机根本起不来。此时先别急着 modprobe而是检查 CPU 硬件虚拟化是否开启。可以执行以下命令确认grep -E (vmx|svm) /proc/cpuinfo有 vmx 表示 Intel 虚拟化有 svm 表示 AMD 虚拟化。如果这里什么都没有BIOS 里又没有开启 VT-x/AMD-V那你不管怎么 modprobe模块都会加载失败。这个问题的典型 dmesg 报错是kvm: no hardware support之类。模块加载成功后在 /dev/ 下面会出现 kvm 设备节点。执行 ls -l /dev/kvm 看到字符设备就说明内核态已经就绪。之后 QEMU 进程通过 open(/dev/kvm) 以及一系列 ioctl 调用跟内核模块通信。这部分是理解 KVM 架构的关键QEMU 负责模拟设备、管理内存、提供用户态接口而真正的 CPU 虚拟化也就是 vCPU 的创建、运行、中断注入都是通过 /dev/kvm 这个接口下发给内核模块执行的。4.2 vCPU 线程、内核模块与 /dev/kvm 的关系虚拟机每颗 vCPU 在宿主机上对应一个线程这个线程是 QEMU 进程的子线程。但线程在用户态执行的时候只是觉得我在跑一个普通线程一但执行到虚拟机相关的指令就会通过 KVM_RUN 这个 ioctl 进入内核态由 KVM 模块接管把物理 CPU 切换到虚拟化模式运行 guest 代码。整个流程用一个不太准确的比方就是QEMU 是经理KVM 模块是车间主任虚拟机的每个 CPU 是一个操作工。经理接到订单用户请求分配给操作工vCPU 线程操作工干活的动作执行 guest 指令实际上得车间主任KVM 模块批准并安排机器物理 CPU。为什么 KVM 性能比纯软件模拟高好几个数量级就是因为 guest 指令绝大多数直接跑在物理 CPU 上内核模块只在关键环节介入比如内存虚拟化、中断处理和退出事件处理。当你需要查某台虚拟机 vCPU 绑核、抢占等问题时你会发现所有信息都落在宿主机上跟内核模块的处理逻辑强相关。比如用 pidstat 看某个 vCPU 线程的 CPU 占用率异常高如果不是业务负载重就要考虑是不是频繁发生 VM EXIT也就是虚拟机指令执行经常被打断回到内核态处理某些事件。这种情况通常是某些虚拟设备中断频繁导致的解决思路是开启 irqbalance、调整虚拟中断的投递方式这在 KVM 里叫 posted interrupt。4.3 模块参数对虚拟化行为的影响KVM 模块之所以值得被当作内核模块来研究是因为它有一堆能直接影响虚拟机性能的参数。以 kvm-intel 模块为例modinfo kvm_intel 能看到很多参数最常用的几个包括参数名可选值作用我的建议nested0/1是否支持嵌套虚拟化测试用开启生产按需关ple_gap数值PLE 间隙避免 vCPU 空转默认即可ple_window数值PLE 窗口默认即可preemption_timer0/1是否使用抢占定时器建议保持默认max_tsc_khz数值约束 vCPU TSC 频率跨主机迁移要关注nested 参数是最常被问到的。1 表示允许在这个宿主机上再跑虚拟机。也就是说你要在“虚拟机里再装虚拟机”必须让宿主机的 kvm-intel/kvm-amd 模块带 nested1 参数加载。除此之外guest 内部的 QEMU 还需要把 CPU 模型设置成带 vmx 特性。两个条件缺一不可。而 max_tsc_khz 这个参数在混合 CPU 主频的集群里做虚拟机热迁移时非常关键。不同物理机的 TSC 频率不一致导致 guest 内部时钟漂移最终表现就是虚拟机里时间忽快忽慢。解决办法之一是把所有宿主机的 kvm-intel 模块加上 max_tsc_khz某个统一值强制 vCPU 的时间戳计数器频率对齐。注意这个值设置得过低会影响虚拟机的计算性能设置之前最好实际测一下各宿主机的 TSC 频率。4.4 嵌套虚拟化开启了但没生效的典型原因我曾经在测试环境里配置了 nested1但虚拟机里仍然看不到 vmx 标志位。排查到最后发现光有宿主机模块参数还不够guest 的 CPU 模型必须显式暴露虚拟化特性。libvirt 创建的虚拟机默认 CPU 模型可能不含 vmx需要修改 domain 配置里的 CPU 模型为 host-passthrough 或添加对应特性标记才能把物理 CPU 的虚拟化标志传进 guest。另外一个容易被忽略的点是nested1 加载后要确认当前值是否真正变成 Y。有的内核版本把这个参数编译成了只读运行时 echo 改不了必须通过 modprobe 参数加载。我遇到过开了嵌套虚拟化之后 reboot一切配置看起来都没变但 lsmod 显示模块重新加载后 nested 值自动回去了。这种时候就要看 /sys/module/kvm_intel/parameters/nested 的实际内容而不是只看配置文件里有没有写。5. 在虚拟化环境调试中遇到的模块级问题5.1 一次 kvm_intel 加载失败的排查有台机器跑着跑着突然创建不了新虚拟机了表现是 libvirt 报错说设备不存在。我顺手 lsmod | grep kvm结果只有一行 kvm没有 kvm_intel。也就是说 kvm_intel 模块没了。这很反常因为之前一直是能用的。查 dmesg看到了关键报文kvm_intel: disabled by firmware 或者 CPU 特性检查失败。这类问题的根源往往是 BIOS 固件更新后把 VT-x 关掉了或者机器的固件设置被重置。排查链路我给一个标准模板照着做基本能定位# 1. 检查 CPU 虚拟化标志 grep -E (vmx|svm) /proc/cpuinfo # 2. 查看模块加载失败日志 dmesg | grep -i kvm # 3. 尝试手动加载观察报错 modprobe kvm-intel # 4. 如果失败查看完整错误 dmesg | tail -n 30如果 /proc/cpuinfo 里没有 vmx/svm那就是固件层面关闭了。没有 vmx 标志的时候即使是 modprobe kvm-intel 也只会失败不会强制加载。把机器 BIOS 里的虚拟化选项打开重启后模块就会被依赖链自动加载起来。还有一次加载失败比较隐蔽内核模块文件和当前内核版本不匹配。原因是机器更新内核后没有重启导致 /lib/modules/ 下的目录是旧内核的。modprobe 会去找 /lib/modules/$(uname -r) 下的模块如果内核更新后没有同步模块文件就会出现module not found这类奇怪错误。解决方式是重新安装内核模块包或重启进入新内核。5.2 CPU 特性与模块加载的关系KVM 模块在加载时会做 feature check检查物理 CPU 是否具备虚拟化必需的特性。Intel 的 vmx、AMD 的 svm 只是最基础的还有 EPT/NPT 这种二级地址转换特性以及 VPID、VMFUNC 等加速特性。这些特性不同虚拟机性能差异就很大。比如没有 EPT 的机器跑内存密集型的虚拟机会频繁触发 shadow page table 的开销性能下降非常明显。检查特性的工具也不复杂lscpu 里会有 vmx/svm、ept 等 flag或者直接跑 grep vmx /proc/cpuinfo。你要在宿主机上看到 ept 这个 flag才说明内存虚拟化硬件加速可用。这些特性如果缺失除了换硬件基本无解唯一能做的就是尽量用 paravirtualized 驱动来缓解性能损耗。5.3 rmmod 失败模块正被使用当你试图卸载 kvm-intel 模块时大概率会遇到 rmmod: ERROR: Module kvm_intel is in use。这个很常见因为正在运行的虚拟机占用了模块。正确的卸载路径是先关闭所有虚拟机再执行 rmmod kvm_intel 和 rmmod kvm。如果你想看谁在占用模块可以执行 lsmod | grep kvm看到引用计数的数值大于 0 就知道有实例占用。同样的逻辑也适用于其他内核模块。生产环境里不要随意执行 rmmod -f 强卸模块尤其是网络、存储、虚拟化相关的模块。强卸可能导致内核崩溃或数据损坏。我曾经见过有人为了尝试更换驱动版本在生产机器上强卸了网卡驱动模块结果网络直接断掉最后只能强制重启。5.4 内核模块更新后与 QEMU 的兼容内核升级后kvm 模块的接口会跟随变化但 QEMU 用户态程序的更新节奏不一定同步。比如某些旧版本 QEMU 依赖的 KVM_CAP 能力位在新内核里变了就会出现kvm: unknown capability这一类的警告部分功能静默失效。这种兼容问题没有捷径只能同步升级 QEMU/libvirt 到与内核匹配的版本。在升级之前可以先创建一台不重要的测试虚拟机跑一遍创建、迁移、快照等操作确认没问题再放量。我自己的原则是内核小版本更新后超过一个月的稳定运行再大批量升级宿主机避免踩到刚引入的回归问题。6. 我整理这份笔记时沉淀下来的几个使用习惯6.1 排查问题先分清是用户态还是内核态虚拟化栈出问题时第一步不是立刻看日志而是确定问题出在哪个层级。QEMU 进程崩溃、libvirt 报配置文件错误这些是用户态问题模块加载失败、虚拟机指令执行异常、dmesg 里的内核报错这些是内核态问题。区分方法很简单dmesg 里有 KVM 相关的报错或者 /dev/kvm 不存在基本就是内核态模块问题dmesg 干净但 QEMU 进程异常退出则是用户态问题。这个习惯帮我节省了大量时间。因为用户态问题可以通过重启 libvirtd、用 qemu 命令行直接复现等方式快速测试内核态问题则要围绕模块、CPU 特性、固件设置来排查思路完全不同。如果不分层很容易被日志带偏。6.2 日常检查清单最后附一个我平时巡检宿主机时固定执行的命令集合全部跑完不超过一分钟# 确认 CPU 虚拟化硬件支持 lscpu | grep -i virtualization # 确认 KVM 模块已加载 lsmod | grep kvm # 查看当前生效的模块参数 cat /sys/module/kvm_intel/parameters/nested # 确认设备节点存在 ls -l /dev/kvm # 查看最近的内核模块相关错误 dmesg -T | grep -iE kvm|module | tail -n 20这套清单看着简单但它覆盖了硬件支持、模块状态、参数生效、设备节点、内核日志五个维度。任何一个环节异常后续的虚拟机问题基本都能从这里找到初步方向。我在实际使用中发现大部分虚拟化莫名其妙的问题最后都能追溯到模块加载异常和参数配置不对而不是 QEMU 本身有什么大毛病。这份笔记对我来说最大的价值就是把KVM 是内核模块这件事从概念变成了日常操作的一部分。
RELATED

相关推荐

Kali Linux虚拟机安装零基础教程:从镜像到环境配置

Kali Linux虚拟机安装零基础教程:从镜像到环境配置

如果让我列一个“Linux 折腾路上迟早要面对”的入门项目,把 Kali 装进虚拟机绝对能排前三。不管你是刚接触安全工具、想给自己搭一个随时能造的实验环境,还是单纯想在主力机器之外多体验一套预装了海量工具的 Linux 系统,虚拟机方案都比直接装…

📅 2026/10/20 4:44:27
新能源电动汽车EEA设计:从功能清单到域控制器与DBC验证

新能源电动汽车EEA设计:从功能清单到域控制器与DBC验证

简介:《新能源电动汽车电子电气架构设计》是一份面向新能源汽车电子电气工程师、车辆工程专业学生及相关技术研究人员的专业参考文献,聚焦电动汽车电子电气架构的设计理念与关键技术,帮助读者理解电池管理系统、电机控制系统、车身电子控制系…

📅 2026/10/20 4:44:27
FME在林权类不动产数据整合中的实战应用与避坑指南

FME在林权类不动产数据整合中的实战应用与避坑指南

1. 林权类不动产数据整合到底难在哪林权类不动产数据整合,说白了就是把分散在林业、国土、农业等多个部门的林地权属、林木权属、承包合同、地形图、宗地图等数据,统一到一个标准框架下,形成一套完整、准确、可追溯的不动产登记数据库。这件事…

📅 2026/10/20 4:39:27
MORE NEWS

更多资讯

📰

Git新手实战:从身份配置、SSH密钥到分支合并的完整流程

1. 为什么几乎所有团队都让新人在第一天先配好Git身份我以前带过不少新人,第一天到岗几乎都绕不开同一件事:配Git。你以为这就是敲两行命令的功夫,但实际问一圈就会发现,能卡住的点特别多——用户名是全拼还是中文、邮箱到底用哪个…

📰

Java SWT与JavaFX WebView深度整合实战指南

简介:本资源是一套面向Java桌面应用开发者的SWT与JavaFX混合GUI工程实践案例,聚焦于在原生级界面中嵌入高性能网页渲染能力,解决Java传统桌面程序调用ECharts动态图表、实现Web内容深度交互与大数据可视化刷新的痛点。项目已完整集成JxBrowse…

📰

函数栈帧深度剖析:从进程栈布局到崩溃排查实战

排查过栈被踩坏这类问题的人,多少都体会过那种诡异感:程序崩得毫无规律,有时候一跑就挂,有时候跑半天才挂,调试器里看函数调用栈,要么全是乱码,要么干脆连栈都回溯不了。追到最后一挖&#xff0…

📰

C51驱动CH452实现8位数码管硬件消隐显示

简介:本资源是一份面向嵌入式初学者与单片机课程实践者的C51单片机综合实验项目,聚焦CH452芯片驱动共阴数码管实现00–99循环显示,并深度结合定时器中断控制逻辑。项目完整覆盖硬件原理、C51编程、动态扫描消隐处理及定时器模式配置&#xff…

📰

强化学习数据集与环境全解析:从Gymnasium到D4RL实操指南

很多刚接触强化学习的同学,第一次听到“数据集”这个词的时候都会愣一下:强化学习的数据集到底长什么样?是像图像分类那样下载一堆图片,还是像NLP那样拿一批文本?我在带新人踩坑的过程中,几乎每次都要先花二…

📰

HF 热度榜从第 6 滑到第 24:全网围观后,N2.5-mini 的“冷静期”到了

HF 热度榜从第 6 滑到第 24:全网围观后,N2.5-mini 的“冷静期”到了 【免费下载链接】Nex-N2.5-mini 项目地址: https://ai.gitcode.com/hf_mirrors/nex-agi/Nex-N2.5-mini 前段时间,Hugging Face 的模型热度榜上出了一件怪事。 一款…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬