Linux 系统新玩法:用 NVIDIA GPU 显存作交换空间,提升可寻址内存
突发:GitHub平台功能与项目介绍
GitHub平台提供了丰富的功能和多样的解决方案,涵盖AI代码创作、开发者工作流、应用程序安全等多个方面。
平台功能
在AI代码创作方面,有GitHub Copilot可借助AI编写更优质代码,GitHub Copilot应用能从问题到合并实现直接代理,MCP注册表新增集成外部工具。开发者工作流包括Actions可自动化任何工作流,Codespaces提供即时开发环境,Issues用于规划和跟踪工作,代码审查可管理代码更改。应用程序安全方面,GitHub高级安全可发现并修复漏洞,代码安全能在构建过程中保障代码安全,密钥保护可防患于未然,阻止信息泄露。探索板块可了解为何选择GitHub,查看文档、博客、更新日志和市场等。
解决方案
按公司规模划分,有企业版、中小型团队版、初创企业版和非营利组织版。按用例划分,包括应用现代化、DevSecOps、DevOps、CI/CD等,还可查看所有用例。按行业划分,涉及医疗保健、金融服务、制造业、政府机构等,也能查看所有行业。
资源
按主题探索有AI、软件开发、DevOps、安全等主题,还可查看所有主题。按类型探索包括客户案例、活动与网络研讨会、电子书与报告、商业洞察、GitHub技能等。支持与服务方面,有文档、客户支持、社区论坛、信任中心和合作伙伴等。
开源项目
社区方面有GitHub Sponsors可资助开源开发者。项目包括安全实验室、维护者社区、加速器、GitHub Stars和存档项目。仓库有主题、热门趋势和集合等。
企业版
企业解决方案有由AI驱动的开发者平台。可用附加组件包括GitHub高级安全的企业级安全功能、Copilot for Business的企业级AI功能和高级支持的企业级24/7支持。
nbd - vram项目介绍
nbd - vram项目可在Linux系统中,将NVIDIA GPU的显存(VRAM)用作交换空间,专为内存焊接且无法升级的笔记本电脑设计。
测试环境与效果
该项目已在RTX 3070笔记本电脑(GA104M,16GB物理内存,8GB显存),驱动版本580.159.03,内核版本6.17,Pop!_OS系统中测试,分配7GB用于交换空间,最终包括zram和SSD交换空间在内约46GB,可寻址内存增加了两倍。溢出顺序为先填满RAM,然后显存吸收溢出数据(速度快,通过PCIe),接着zram压缩剩余数据(使用CPU),只有在其他空间都耗尽时才使用SSD。
工作原理
一个小型守护进程通过CUDA驱动API分配显存,然后使用NBD(网络块设备)协议通过Unix套接字将其作为块设备提供服务。内核内置的 `nbd` 驱动连接到该设备,并将其暴露为 `/dev/nbdX`,之后它就是一个普通的交换设备。数据路径为:内核交换子系统 - /dev/nbdX - nbd内核驱动 - Unix套接字 - nbd - vram守护进程 - cuMemcpyHtoD/DtoH - GPU显存。此方法无需编写或维护内核模块,也无需使用NVIDIA内核符号,即使内核和驱动更新,也无需重新构建任何内容。
为何不使用NVIDIA P2P API
“显而易见”的方法是使用 `nvidia_p2p_get_pages_persistent`,它可以将显存页面固定在BAR1中,以便CPU可以通过 `ioremap_wc` 直接访问。但所有尝试此方法的现有项目都遇到了同样的问题:NVIDIA驱动在消费级GeForce GPU上返回 `EINVAL`。无论是持久还是非持久变体,以及两种标志值,情况都是如此。此功能仅在Quadro/数据中心SKU的RM级别可用,与驱动版本无关。另一种方法是不通过P2P API直接使用 `ioremap_wc` 映射BAR1物理地址,但这也不起作用。GPU的内部页表仅映射了约16 MiB的BAR1(仅显示帧缓冲区)。从其他部分读取数据返回零。`mkswap` 似乎成功了,但 `swapon` 失败,因为交换头实际上并不存在。NBD方法避免了所有这些问题。`cuMemcpyHtoD` 和 `cuMemcpyDtoH` 可以在任何支持CUDA的GPU上使用,无需任何特殊权限。
要求
该项目要求支持CUDA的NVIDIA GPU(任何消费级RTX/GTX显卡),包含 `libcuda.so.1` 的NVIDIA驱动(无需CUDA工具包),Linux内核3.0及以上版本(nbd模块,大多数发行版已内置),`nbd - client` 包,`gcc`、`make`。
安装
安装步骤为:git clone https://github.com/c0dejedi/nbd - vram;cd nbd - vram;sudo ./install.sh;sudo systemctl start vram - swap - nbd。验证命令为:swapon --show。安装时会启用该服务,因此每次启动时都会自动启动。
配置
编辑 `/etc/systemd/system/vram - swap - nbd.service`,可设置使用的显存大小和交换优先级。守护进程会先尝试请求的大小,如果GPU内存不足,则会以512 MiB为步长逐步减少。更改配置后,需运行 `sudo systemctl daemon - reload && sudo systemctl restart vram - swap - nbd`。
电源管理
安装程序在首次安装时会询问是否启用电源感知管理。如果启用,当拔掉电源(或电池电量低于阈值)时,服务会自动停止,电源恢复时会重新启动。手动执行 `systemctl stop` 始终有效,不会被覆盖。安装后若要更改设置,可编辑 `/etc/nbd - vram.conf`。更改将在下一次轮询(60秒内)生效,或者在下次插拔电源事件时立即生效。
冒烟测试
无需安装的冒烟测试命令为:sudo bash test - nbd.sh。此命令会分配显存,连接NBD设备,进行1 MiB的写入和回读检查,激活交换空间,然后打印拆除说明。如果测试实例正在运行,`install.sh` 会自动处理拆除操作。冒烟测试通过后,若要对整个分区进行压力测试,命令为:sudo bash test - fill.sh。此命令会用零填充整个显存分区,验证样本回读,然后在退出时自动恢复交换空间。
性能
通过 `test - fill.sh` 在RTX 3070笔记本电脑上进行测量(7 GiB顺序写入,4M块),顺序吞吐量约为1.3 GB/s,延迟低于NVMe,因为数据路径是通过PCIe连接到GPU,而非存储设备。对于已经使用zram的笔记本电脑,可将显存交换空间的优先级设置得更高,以便在数据溢出时先使用显存,再使用SSD。
卸载
卸载命令为:sudo bash uninstall.sh。
许可证与关于
该项目许可证为MIT - Sean Lobjoit (c0dejedi)。其功能是在Linux系统中,将NVIDIA GPU的显存用作交换空间,专为内存焊接且无法升级的笔记本电脑设计。
