Windows Server 远程桌面服务 (RDS) 中的资源公平共享

Jacki

托管多个用户的终端服务器的一个常见问题是单个用户可以启动资源密集型进程,这会对其他用户会话的性能产生负面影响。例如,如果一个用户启动了一个占用主机CPU 90%以上的进程,其他用户将无法正常工作。

为了防止这种情况,具有远程桌面服务 (RDSH) 角色的 Windows Server 以及 Windows 10/11 Enterprise 多会话支持动态公平份额调度 (DFSS)特征。 DFSS 在用户会话之间公平地动态分配可用的服务器计算资源,确保任何单个会话都无法独占 CPU、磁盘或网络资源,从而为所有用户保持平衡的性能。 DFSS 可以管理以下主机计算资源的使用:

  • CPU 公平份额– 用于在会话之间动态分配可用的 CPU 时间(同时考虑活动会话的数量和每个会话的 CPU 时间使用情况)。这可以防止单个用户通过运行繁重的进程来独占 RDS 主机上的 CPU。
  • 磁盘公平份额– 它允许在用户之间分配 I/O 操作的可用存储带宽。
  • 网络公平份额– 允许使用循环机制在会话之间分配可用网络接口带宽。

DFFS 不控制 RAM 的分配,也不用于在用户会话之间分配内存。

DFSS 首次在 Windows Server 2008 R2 中引入,当时它最初仅可用于调度 CPU 资源。从 Windows Server 2012 开始,公平共享调度已扩展到 CPU 之外,包括动态网络吞吐量和磁盘 I/O 平衡

安装远程桌面会话主机 (RDSH) 角色后,Windows Server 2016 及更高版本上会启用公平共享功能。默认情况下应用远程桌面服务中的公平负载平衡仅CPU资源。 CPU 公平共享功能在用户会话之间动态均匀地分配可用的 CPU 时间。如果用户消耗太多 CPU 周期,DFSS 会自动减少分配给该用户的 CPU 资源,从而为其他用户释放处理能力。

运行 PowerShell 命令检查 DFSS 是否已启用:

(gwmi win32_terminalservicesetting -N "rootcimv2terminalservices").enabledfss

1– 启用 DFSS

0– 禁用

一个单独的组策略选项称为关闭公平共享 CPU 调度可用于启用或禁用 RDS 主机上 CPU 资源的公平分配(计算机配置 -> 管理模板 -> Windows 组件 -> 远程桌面服务 -> 远程桌面会话主机 -> 连接)

默认情况下,Windows Server RDS 和 Windows Enterprise 多会话版本启用了 CPU 公平共享,而动态磁盘公平共享和动态网络公平共享处于禁用状态,除非由管理员手动启用。检查的值启用CPU配额注册表参数来确认:

有关的:在 RDS Windows Server 上启用单点登录 (SSO) 身份验证

Get-Itemproperty -Path "HKLM:SYSTEMCurrentControlSetControlSession ManagerQuota System" -name EnableCpuQuota

还有启用公平共享参数值为0(禁用)磁盘和网络(它们没有单独的 GPO 参数):

Get-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetServicesTSFairShareDisk" -name EnableFairShare
Get-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetServicesTSFairShareNetFS" -name EnableFairShare

获取所有三个选项的值:

Get-WmiObject -Class win32_terminalservicesetting -Namespace rootcimv2terminalservices | FL EnableDFSS,EnableDiskFSS,EnableNetworkFSS

您只能通过注册表更改网络和磁盘的 Fairy 共享的值“启用公平共享”您只能通过注册表将“EnableFairShare”键的值更改为 1 来启用网络和磁盘的 Fairy 共享。

或者使用以下 PowerShell 命令:

使能够公平共享CPU调度:

$temp = (gwmi win32_terminalservicesetting -N "rootcimv2terminalservices")
$temp.enableDFSS = 1
$temp.put()

使能够动态磁盘公平份额:

$temp = (gwmi win32_terminalservicesetting -N "rootcimv2terminalservices")
$temp.enableDiskFSS = 1
$temp.put()

使能够网络公平份额:

$temp = (gwmi win32_terminalservicesetting -N "rootcimv2terminalservices")
$temp.enableNetworkFSS = 1
$temp.put()

因此,要禁用每个 DFSS 功能,请将其值更改为0

在某些情况下,如果动态公平共享调度显着影响 RDS 主机上的用户应用程序的性能,建议禁用它。虽然 DFSS 有助于确保 CPU、磁盘和网络带宽等资源在用户之间公平分配,但某些工作负载可能会受到限制,从而导致应用程序性能下降。