云端服务器的架设与开发技术 胡晓菡, GRID DevTech
GRID SDK 简介 渲染, 捕获和编码游戏画面 快速 Streaming 现有游戏 注册使用亚马逊 AWS 服务
GRID SDK 简介 渲染, 捕获和编码游戏画面 快速 Streaming 现有游戏 注册使用亚马逊 AWS 服务
GPU Flops 10,00 0 1,000 PC GPU Console GeForce Titan PS4 3x Xbox 720 GeForce 8800 Xbox 360 100 PS3 GeForce 7800 8 years 10 Xbox 2x 5 years 1 GeForce3 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 Jon Peddie Research
客户端 用户的客户程序 网络客户端输入 音频流 + 视频流 服务器端 应用或者游戏
对游戏供应商 对游戏玩家 防止盗版 移动性 便于帐户管理 普及性 实时更新 无需安装包
客户端 服务器端 渲染 Kybd/Mse 解码 网络 NIC CPU 编码 渲染 图像捕获 GRID 客户端 <16ms 网络传输 30 ms/2 帧 GRID 服务器 30 ms
运行在 GRID 硬件上的服务器组件 运行在 NV 硬件上的客户端组件 NvFBC 低延迟桌面捕获 API NvIFR 低延迟 RenderTarget 捕获 API 可在 Geforce 和 Tegra 上运行的解码 API NvENC 低延迟硬件编码器 Sample 代码 (NvIFR & NvFBC) GRID Programming Guide GRID Server Setup Guide Amazon G2 Getting Started Guide
独立的硬件编码单元, 低功耗 (<2W) 接近 x264 的编码质量 每个 GPU 可建立 16 个编码 context High profile 支持 每个 GPU 可同时编码 4~6 路高质量实时 (30fps)720p 视频流 可控大小的 VBV Buffer 输出可实时递送的网络包 CBR, VBR, MinQP, 2Pass-CBR 等多种码率控制 可与 CUDA 互通 按需插入 I 帧
Target Actual 10 5 0 1 101 201 301
Target Actual 15 10 5 0 1 101 201 301 401 501 601 701
GRID SDK 简介 渲染, 捕获和编码游戏画面 快速 Streaming 现有游戏 注册使用亚马逊 AWS 服务
如何把一个游戏移植到云端? 使用虚拟机 这种情况非常简单, 就像运行普通的桌面程序, 使用 NvFBC 捕获并 streaming 使用 baremetal 系统 比较复杂, 后续会给出一些常见解决法案 GRID SDK 提供了足够的捕获和编码 API
Windows Windows NVEnc 3D DX CSC Shader 3D DX Windows NvFBC GPU GPU 游戏独占进程 Streamer VM VM XEN One stream per VM, one VM per GPU
全屏运行游戏 抓取游戏画面, 编码成 H264 流并传送到服务器 音频类似 从客户端获取用户输入,inject 进系统 所有这些都可以通过一个和系统打交道的 Session 服务完成 此方法适用于几乎所有的游戏 OS GeForce 驱动 GRID SDK GPU 游戏 VM 音频驱动 Session 服务 输入驱动
在一个 Windows 上运行多个游戏进程 GPU GPU
运行游戏 OS 游戏 GeForce 驱动 音频驱动 输入驱动 GPU VM
运行游戏 对游戏进程进行 DLL 注入 强制游戏运行在指定 GPU 上 OS 游戏 GRID SDK GeForce 驱动 Session 服务 音频驱动 输入驱动 GPU VM
运行游戏 对游戏进程进行 DLL 注入 OS 游戏 强制游戏运行在指定 GPU 上 然后 抓取游戏画面, 编码成 H264 流并传送到服务器 音频类似 从客户端获取用户输入,inject 到游戏进程 需要处理各种特殊情况 ( 不同 DX 版本, 系统输入或者 directinput,etc ) GRID SDK GeForce 驱动 GPU Session 服务 VM 音频驱动 输入驱动
游戏可以完全利用服务器的全部资源, 而不受到虚拟机的限制 同时运行多个游戏 session 图像引擎可使用所有 GPU, 并共享通用资源 游戏引擎可使用所有 CPU 核 渲染并传输尽可能多的游戏 session( 如 1 个服务器上运行 100 个游戏 session) 已经有合作伙伴在开发 Baremental 环境下的云服务器 Square Enix 的 Project Flare
渲染线程? Hz R R+1 R+2 游戏的帧率通常不是固定的 如果在每次渲染的时候进行捕获并编码并不是个好选择 因为视频流需要固定帧率 R+3
所以通常会建立一个单独的编码线程, 按固定帧率进行编码 然后把编码后的 H264 流广播到客户端 每个线程有独立的 D3D Device/OpenGL Context 30 Hz E-1 E E+1 编码线程
渲染线程 30 Hz 编码线程? Hz E-1 R
渲染线程 30 Hz 编码线程? Hz E-1 R copy to Shared Surface R
渲染线程 30 Hz 编码线程? Hz R copy to Shared Surface R E-1 E
渲染线程 30 Hz 编码线程? Hz E-1 R Shared Surface R E copy from R
渲染线程 30 Hz 编码线程? Hz E-1 R R+1 Shared Surface R E R
渲染线程 30 Hz 编码线程? Hz E-1 R copy to R+1 Shared Surface R+1 E R
渲染线程 30 Hz 编码线程? Hz E-1 R E R+1 R Shared Surface copy to R+2
渲染线程 30 Hz 编码线程? Hz E-1 R E R+1 R Shared Surface R+2 E+1
渲染线程 30 Hz 编码线程? Hz E-1 R E R+1 R Shared Surface R+2 E+1 copy from R+2
渲染线程 30 Hz 编码线程? Hz E-1 R E R+1 R+2 Shared Surface E+1 R+3
渲染线程 30 Hz 编码线程? Hz 可以尽可能的隐藏住编码延迟 R 不会阻塞物理引擎的计算和键鼠 / 手柄输入 不会阻塞游戏进程 两个额外的 Render Target( 或 Frame Buffer), R+1 一个作为 shared surface, 一个作为编码器输入 可以选择在注入 dll 的时候钳制住渲染线程, 使 其帧率和编码保持一致 R+2, 这样就能避免多余的渲 E+1 Shared Surface 染计算了 R+3 E-1 E
D3D9 可用 NvIFR 提供的 NvIFR_CopyToSharedSurfaceEXT_fn 和 NvIFR_CopyFromSharedSurfaceEXT_fn 在不同 D3D Device 之间进行资源共享 D3D9Ex/D3D10/D3D11 D3D 提供了在不同 Device 间共享资源的 API, 使用时通常要配合 KeyMutex OpenGL 使用 OpenGL 的 sharelist 在不同 GL Context 间共享资源
专为低延迟 ( 控制在 1 帧 ) 设计的解码 API 低功耗的硬件解码器 GRID SDK 示例程序包括 : Windows 上的 DX9CUDAGPUDecode NVIDIA Shield (Android) 上的 TegraH264HWDecode
GRID SDK 简介 渲染, 捕获和编码游戏画面 快速 Streaming 现有游戏 注册使用亚马逊 AWS 服务
产品名 GRID K340 GRID K520 GPUs 4 x GK107 2 x GK104 Total shader (SMs) 8 16 Core Clocks 900 MHz 800 MHz Memory Size 4GB 8GB 720p30 编码路数 ~40 ~20 1080p30 编码路数 ~16 ~8 驱动 GeForce 驱动和 Game Profiles GeForce 驱动和 Game Profiles 目标应用高并发游戏高性能游戏 下一代 GRID 将能达到 2 倍编码性能和 2 倍 3D 图像性能
专用的 GRID 服务器 位于电信网络的数据中心 拥有专用带宽, 网络延迟很低 租用亚马逊的 AWS 服务 灵活 节省前期投入, 按需租用 服务器和骨干网间有巨大延迟
Dual Xeon E5 2x10 core 2.5 GHz CPUs SuperMicro, ASUS 最多可插 5 片卡, 即 20 个 GPU Xeon E3 systems 4x 4-core 3.5 GHz CPUs 最多可插两片卡, 即 8 个 GPU 支持 Cirrascale 和 CARRI/GIGABYTE
需要什么? 基于 GRID SDK 的中间件 服务器捕获视频帧, 编码成 H264 视频流并传送到网络 费用每小时 $0.78-$0.82 可以根据实际负载情况启用或关闭部分 instance http://aws.amazon.com/ec2/ 第三方中间件解决方案 Amazon G2 instance: g2.2xlarge 一颗 NVIDIA GRID GK104 ( 等同于 GeForce GTX 670) 4 核 CPU 15GB 内存 60GB 硬盘 ( 可付费增加容量 )
原因 游戏开发者希望能有一个快速 stream 现有游戏的方法, 而不是花大力开发一整套解决方案 同时提供可以处理游戏输入, 音频 / 视频流的客户端 租用 AWS 的 G2 服务器, 按小时收费, 而不用实际购买硬件 NVIDIA 的 Streaming 测试工具 ( 非 GRID SDK 组件 ) 可以快速 onboard 一个游戏到云端 测试运行在云端的游戏体验
如何开始? 我们把 streaming 组件打包成专门的亚马逊 AMI 联系 NVIDIA (GRID-devtechsupport@nvidia.com) 以得到这些组件 然后使用它们对游戏做原型开发
GRID Streaming 服务器 Streaming 客户端 NvFBC 视频捕获 音频捕获 在 Geforce 或 Tegra 上解码视频和音频 NvENC H.264 硬件编码器 键盘 鼠标 手柄输入
GRID SDK 简介 渲染, 捕获和编码游戏画面 快速 Streaming 现有游戏 注册使用亚马逊 AWS 服务
注册 AWS 帐号 (http://aws.amazon.com)
从 EC2 控制面板选择 GPU Instance (g2.2xlarge) 配置并运行这个 Instance
VNC 或 TeamViewer 远程连接 在 Instance 上安装游戏 启动 Streaming Server 并等待客户端
本地运行 NVIDIA Streaming 客户端, 连接到服务器 IP Play Games!
测试游戏体验 编码后的视觉效果 端对端的游戏性 为游戏开发者提出额外要求 如果您想把自己的游戏 onboard 到 GRID Beta 平台上, 请联系我们 (GRID-devtechsupport@nvidia.com)
https://developer.nvidia.com/grid-app-game-streaming http://www.nvidia.com/object/cloud-get-started.html GRID-devtech-support@nvidia.com