NVIDIA vGPU官方文档又臭又长,挑点有用的知识点来讲。这期内容来讲讲NVIDIA vGPU性能调度策略这块,如果你看不懂以下内容,可以回看官方的文档:vGPU19的调度行为说明和使用为啥是vGPU19版本呢?因为这个版本是最后一个支持老架构的显卡了,穷鬼买不起万元卡。

三种调度策略

NVIDIA给出了3种 vGPU 调度策略,用于控制 GPU 处理周期的分配:

调度器人话默认帧速率限制器
Best Effort(尽力而为)动态抢占,谁忙谁就用的多默认策略A\Q系列限制60帧 B系列限制45帧
Equal Share(均等份额)以当前开机的VM数量平均分手动切换该策略下,帧率限制器失效,不限制帧率
Fixed Share(固定份额)按Profile预设值固定比例手动切换该策略下,帧率限制器失效,不限制帧率

严格轮询 (ARR) 执行

NVIDIA为了确保调度公平性,【均等份额】 和 【固定份额】调度器默认启用 严格轮询 (Adaptive Round Robin, ARR) 的执行行为。不要问我为啥没有【尽力而为】调度器,vGPU就是这样设置的。


ARR 开启时:
默认就是开启状态,调度器会根据调度频率 和平均因子 动态调整时间片,主动补偿超时,保证公平性。

ARR 关闭时:
关闭后,需要手动设置固定的时间片长度 (1-30 毫秒)。
注意:NVIDIA vGPU 19 是最后一个支持关闭 ARR 的版本,未来版本将移除此功能。

如何改变调度行为

方法一:立即生效,不持久

使用 nvidia-smi vgpu set-scheduler-state 命令来改变调度行为。使用前必须关闭所有在运行的vGPU资源的虚拟机。此方法重启后需要重新设置,要永久生效请使用方法2。


关键参数:
-p {1,2,3}: 1=尽力而为,2=均等份额,3=固定份额。

-a {0,1}: 0=关闭 ARR,1=启用 ARR(默认)。

-ts <纳秒数>: 仅在 ARR 关闭时设置时间片 (1,000,000 ~ 30,000,000 ns)。

-asf <频率>: 仅在 ARR 启用时设置调度频率 (63-960 Hz)。

-aavg <因子>: 仅在 ARR 启用时设置平均因子 (1-60)。


示例:

# 为指定的显卡设置固定份额调度器,关闭ARR,设置24ms时间片
nvidia-smi vgpu set-scheduler-state -i 0000:86:00.0 -p 3 -a 0 -ts 24000000

# 为所有GPU设置均等份额调度器,启用ARR,使用默认参数
nvidia-smi vgpu set-scheduler-state -p 2 -a 1

# 恢复所有GPU到默认的尽力而为调度器
nvidia-smi vgpu set-scheduler-state -p 1

方法二:持久生效,需重启

通过设置注册表项 RmPVMRL 来持久化配置,修改后需要重启宿主机。

调度策略ARR模式说明
0x00尽力而为默认值
0x01均等份额启用使用默认参数
0x00030003均等份额禁用时间片=3ms
0x11固定份额启用使用默认参数
0x00180011固定份额禁用时间片=24(0x18) ms
0x3c3c0001均等份额启用平均因子=60,频率=960Hz

示例:
如果你宿主机是PVE:

# 将 所有 vGPU 调度策略设置为均等份额调度器,并采用默认时间片长度
echo "options nvidia NVreg_RegistryDwords="RmPVMRL=0x01"" > /etc/modprobe.d/nvidia.conf
# 更新initramfs
update-initramfs -u -k all
# 重启
reboot

如果你宿主机是ESXI:

# 将 所有 vGPU 调度策略设置为均等份额调度器,并采用默认时间片长度
esxcli system module parameters set -m nvidia -p "NVreg_RegistryDwords=RmPVMRL=0x01"
# 重启Esxi,即可生效
reboot

如何查看调度状态

# 查看调度器策略和状态(需要 VM 运行才能看到完整信息)
nvidia-smi vgpu -ss
# 查看硬件支持的调度器能力(如最大/最小时间片等)
nvidia-smi vgpu -sc
# 每隔1秒刷新 vGPU 资源占用情况
nvidia-smi vgpu -l 1

所以用哪个策略好

这里拿游戏多开挂机的场景,我的建议:放弃NVIDIA默认的【尽力而为】调度器,果断切换到【均等份额】调度器。之所以这么建议,是因为默认的【尽力而为】调度器很像一个“抢跑”机制——哪个虚拟机任务重、抢得凶,GPU就把资源多分给它。这在你多开挂机时,会导致明显的“一个号吃肉,其他号喝汤”的不公平现象,甚至可能让后台的号卡顿、掉线。而【均等份额】调度器就像“平分大锅饭”:当前有多少个窗口在跑,GPU算力就平均分给它们。关掉一个窗口,剩下的窗口会自动平分释放出的算力,整体利用率更高。

特别提醒:【均等份额】调度器会禁用帧率限制器 (FRL)。这意味着游戏帧数不会再被人为限制在60、45帧,可以跑满,如果你想限制帧率可以给虚拟机安装个微星小飞机RTSS显卡锁帧工具,就可以自定义锁定帧率了。比如30帧,100帧等等。

操作指南:(PVE为例)

立即生效

# 为所有GPU设置均等份额调度器,启用严格轮询(默认就是开启的,推荐保持)
nvidia-smi vgpu set-scheduler-state -p 2 -a 1

永久生效

# 为所有GPU设置均等份额调度器,启用严格轮询(默认就是开启的,推荐保持
echo "options nvidia NVreg_RegistryDwords="RmPVMRL=0x01"" > /etc/modprobe.d/nvidia.conf
# 更新initramfs
update-initramfs -u -k all
# 重启
reboot

高级调优:调整时间片(可选)

时间片可以看作是GPU给每个窗口的“连续工作时间”。
短时间片 (~1-5ms):切换更频繁,交互响应快,适合需要即时操作的游戏窗口。
长时间片 (10-30ms):减少切换开销,适合纯挂机的后台窗口,理论上能略微提升整体帧数。
默认值通常就足够了。如果你挂机的窗口完全不操作,想榨干最后一点性能,可以尝试调长时间片。
示例:

# 关闭严格轮询策略-a 0,并设置30ms时间片-ts
nvidia-smi vgpu set-scheduler-state -p 2 -a 0 -ts 30000000

注意:关闭严格轮询(-a 0)19版本后会被移除,后续版本只支持开启状态下的参数调整。

参考文献

NVIDIA vGPU文档:vGPU19的调度行为说明和使用

广告:PROXMOX-VE 技术支持,疑难解答,有需要可以闲鱼与我联系↓↓↓

PVE技术支持
最后修改:2026 年 05 月 02 日
如果觉得我的文章对你有用,请随意赞赏