WangShuXian6 / blog

FE-BLOG
https://wangshuxian6.github.io/blog/
MIT License
46 stars 10 forks source link

更便宜的3D MMO服务器:GPGPU #167

Open WangShuXian6 opened 1 year ago

WangShuXian6 commented 1 year ago

更便宜的3D MMO服务器:GPGPU

https://www.researchgate.net/publication/228994213_GPGPU_for_cheaper_3D_MMO_servers?enrichId=rgreq-d84458fb911b8ea62778427f97fc5ece-XXX&enrichSource=Y292ZXJQYWdlOzIyODk5NDIxMztBUzo5ODg0MjU1MjgzMjAwNkAxNDAwNTc3MzA5MjU3&el=1_x_2&_esc=publicationCoverPdf

ASAVEI VICTOR, MOLDOVEANU ALIN DRAGOS BOGDAN, MOLDOVEANU FLORICA, MORAR ANCA, EGNER ALEXANDRU 自动控制与计算机学院 布加勒斯特“POLITEHNICA”大学 Splaiul Independentei 313, 布加勒斯特 罗马尼亚 victor.asavei@cs.pub.ro, alin.moldoveanu@cs.pub.ro, florica.moldoveanu@cs.pub.ro, anca.morar@cs.pub.ro, alexandru.egner@cs.pub.ro http://csite.cs.pub.ro

摘要:

在过去的几年中,大型多人在线(MMO)应用程序变得非常受欢迎,这导致了3D MMO服务器需要应对的用户数量增加。目前大多数MMO使用的客户端-服务器架构在虚拟空间的性能和可扩展性方面引入了一个严重的瓶颈。为了达到3D MMO服务器所需的性能水平,这些虚拟世界的运营商面临着维护系统基础设施的高昂财务成本。在本文中,我们描述了3D MMO服务器面临的挑战,分析了3D MMO服务器的通用架构,确定了可以作为GPGPU(图形处理单元上的通用计算)程序进行优化的关键操作,并提出了服务器架构运行GPGPU任务的适应性。我们使用原型实现进行的测试显示了令人鼓舞的结果,证明了3D MMO服务器可以将任务卸载为GPGPU程序,从而降低了总体成本。 关键词:GPGPU,大型多人在线,CUDA,虚拟世界,并行处理。

1 引言

大型多人在线(MMO)游戏以及其他类型的虚拟空间,如虚拟博物馆、虚拟展览等,已经吸引了大量用户。这些应用的技术和数量正在不断发展,很有可能在不久的将来,3D虚拟空间将成为互联网上通信的标准,取代或整合当前的技术(如网页浏览器、即时通讯工具等)。 MMO应用程序通过互联网在线部署,并支持一个持久的虚拟世界,该世界同时被数百甚至数千名用户访问。 持久的世界是一个在线虚拟世界,即使用户断开连接,它仍然“运行”,不再参与世界的事件。用户可以在任何时候重新连接,并从他离开的地方继续他的互动。 3D MMO应用的主要目标之一是为虚拟空间的用户创造高度的沉浸感。许多MMO实现了现代的3D实时图形引擎、立体声和空间音频,创造了一个非常互动和沉浸的虚拟空间。MMO提供的主要优势和特点是它可以容纳并允许大量用户同时互动,这使得MMO与其他模拟虚拟世界的单用户/多用户应用有所不同。 然而,提供这一特性也带来了所有3D MMO虚拟空间必须面对的主要问题,那就是虚拟世界必须能够应对的巨大负载。 这种负载不仅仅是由在线用户数量直接成比例的任务数量给出的,还有任务的复杂性,这在很大程度上受到虚拟世界的特性的影响。 在本文中,我们首先描述3D MMO服务器必须克服的挑战,给出一个通用的3D MMO服务器架构的概述,确定可以从GPGPU实现中受益的操作,并提议对服务器架构进行调整以支持GPGPU。

2 3D MMO服务器的挑战

尽管为了在最佳环境中使用MMO应用程序而需要的一些必要条件,如高带宽、低延迟,对于普通用户来说越来越容易获得,但这还不足以解决MMO在尝试容纳尽可能多的用户时面临的可扩展性问题。 可扩展性问题主要是由于需要维护虚拟世界的一致性。打破一致性要求可能导致例如视觉艺术品(例如:用户的化身进入建筑墙壁)这样的问题,这些问题没有长期后果,但也可能导致更严重的问题,如在金融交易过程中物品的丢失或重复。 传统上,大多数MMO应用程序使用客户端-服务器架构实现,该架构具有以下主要优势: • 集中控制 • 增强安全性 • 实现相对简单 尽管这种广泛传播的架构适用于许多分布式应用程序,但在谈到MMO时,它也带来了以下缺点/挑战:

  1. 可扩展性:模拟虚拟世界的中央服务器系统的性能可能成为瓶颈,从而为可以访问虚拟世界的用户总数设定了上限。
  2. 冗余:为确保某个服务器能够处理高峰使用期,有必要为设备提供高度的硬件冗余。
  3. 可靠性:这种架构的可靠性不高,因为服务器代表了系统的可能故障/中断节点。
  4. 成本:通常,一个常规的MMO应用程序的开发需要2-3年,启动的初始成本很高。另一个需要考虑的方面是,MMO应用程序需要模拟具有大的地理区域的虚拟世界,这导致了雇佣大量的服务器(有时甚至达到数百台)来完全托管虚拟媒体和它必须提供的设施。这意味着,在MMO启动后,维护成本高达总收入的80%[4]。 考虑到上述所有挑战,很明显为什么有必要探索3D MMO使用的架构的新思路和解决方案,以及找到优化虚拟世界内部使用的操作的新方法,以消除或至少在一定程度上减少当前MMO面临的问题。虚拟世界具有大的物理范围。这导致了开发方法将虚拟空间分割成几个不同的子空间。

3.1 分区

目前有两种不同的方法将虚拟世界分割成子空间。从实现的角度来看,最简单的方法是将整个世界严格划分为静态区域,这些区域足够小,可以由单个服务器管理。 这些区域的边界非常明确,逻辑上相连,当用户进入另一个区域时,也会连接到管理目标区域的服务器。 这种方法有明显的缺点,所有这些都导致现实性的降低: • 当用户切换区域时,会有一个加载时间 • 无法看到区域间的对象 第二种方法从一开始就旨在提供一个“无缝”的模拟,其中边界和服务器区域对用户是透明的。这将为用户创造一种他身处一个“连续”的世界的感觉,这个世界可以无“中断”地运作。 尽管用户并没有明确地看到,但虚拟世界的逻辑分区仍然存在。与之前的方法一样,重要的相邻区域由不同的服务器管理。当用户退出由区域1服务器管理的区域时,将有一个与相邻区域同步的过渡区域。区域2服务器的用户管理不会立即发生,只有当用户穿越过渡区域时才会发生。 image 图1:“无缝”虚拟世界的分区 这种方法的缺点是复杂性,从实现的角度来看,以及当过渡区域中有大量事件时,数据流量可能会增加,这两者都导致区域服务器需要执行大量的操作。

3.2 基本功能

MMO应用程序的架构需要提供以下基本功能/特性: • 用户认证/账户 • 管理用户在虚拟世界内的访问权限 • 虚拟世界的一致性 • 事件顺序管理 • 将事件分派到虚拟世界的实体 • 安全存储用户的角色及其财产 • 计划计算操作 • 低延迟 • 为防止可能的欺诈尝试提供虚拟世界的安全性 我们可以识别出一般3D MMO服务器架构的以下主要组件: 1) 认证组件:负责虚拟空间的访问控制 2) 通信组件:负责消息交换和事件管理。这个组件的主要任务是保持整个虚拟空间事件的正确顺序,实现尽可能低的延迟,并提供安全机制以防止作弊尝试 3) 存储组件:提供虚拟世界数据的长期持久存储 4) 计算组件:计划和执行与虚拟空间逻辑相关的计算操作 5) 控制组件:此组件提供高级决策机制,并负责管理、监督以及为系统的其他组件执行的所有操作充当仲裁者。

3.3 客户端-服务器模型

大多数MMO应用程序使用客户端-服务器架构。客户端首先通过连接服务器访问虚拟空间,该服务器将它们重定向到一个分片服务器。 image

图2:MMO服务器的客户端-服务器分片架构 分片代表相同虚拟世界的独立版本,它们用于提高应用程序的可扩展性。通常,独立的分片之间不进行同步,一个分片的用户不能与另一个分片的用户互动。 尽管这种解决方案为MMO提供了一定程度的可扩展性,但它也限制了现实感,阻止了大量用户的互动。有一些MMO应用程序试图寻找新的解决方案,不使用分片,将虚拟空间分割成许多独立的世界,并允许所有用户在一个巨大的虚拟模拟中互动[6]。然而,这些尝试目前非常依赖虚拟世界的特性。

4 可作为GPGPU移动的计算

MMO应用程序需要处理的信息和数据量在不断增长。通常,高端MMO在高峰使用期监控并执行的任务数量超过每秒1百万次操作[3]。 很明显,对于MMO应用程序,处理的事件数量的可扩展性是必要的。 MMO事件处理系统的第一代是集中式的,但最近有些解决方案试图通过使用分布式方法来实现这种可扩展性。 然而,由于进程之间以及管理它们的代理之间存在许多依赖关系,进程的划分被证明是非常困难的。 通常,划分是垂直进行的,有一套单独的本地划分数据,然后使用集中式的分发机制。

4.1 低级虚拟空间逻辑 MMO应用程序的核心是一个与固定帧速率同步执行的模拟循环。 从概念上看,MMO内的虚拟世界的状态可以看作是一个数据表,包含虚拟空间的“对象”,包括用户和他们互动的实体。 为了满足实时模拟的严格要求,虚拟空间的活动状态直接保存在虚拟世界的核心服务器的内存中。物理磁盘通常用于持久性和存储辅助数据。 在模拟循环的每次迭代(通常称为tick)中,虚拟世界模拟逻辑会更新这个状态的部分内容。这些更新可以由用户操作、计时器或其他虚拟世界事件触发。 接下来,我们介绍了在模拟逻辑层面完成的一些关键操作,这些操作通常使用分布式机制执行,因此容易使用GPGPU进行优化。

4.1.1 碰撞检测 碰撞检测是MMO虚拟空间服务器执行的最频繁的操作之一,它们需要很高的计算时间。 虚拟空间需要确保填充世界的实体之间的物理互动的正确性,因此它需要执行大量的碰撞检测计算。 通常,每次在虚拟空间内移动/更新角色的位置时,都会执行计算来确保移动/更新是有效的。 因为碰撞检测计算非常昂贵,所以在实践中对支持碰撞检测的实体的数量和类型有所限制(与地形的角色,与某些建筑的角色等)。

4.1.2 分区操作 如前所述,分区是3D MMO服务器架构的最重要机制之一。分区系统为虚拟世界的地理区域内的用户管理执行大量操作。 此外,还执行了另一类操作,以确保虚拟空间的持久性,因为相邻区域/过渡区域之间需要完美的同步,这导致了信息和数据流的增加。

4.1.3 实例化 在MMO应用程序中,实例代表一个特殊区域,为希望访问它的某个用户组创建自己的副本。用户组访问副本,因此与虚拟空间的其他用户隔离,因为他们所在的实例的内容只在这些用户的上下文中可见。 通常,实例有专用的服务器,因为它们代表不适合大量用户的特殊区域。 使用实例的一些优点是: • 需要由虚拟世界服务器处理的一些操作被转移到实例服务器 • 用户的网络流量减少,实际上被隔离到实例内的事件,这导致延迟减少 • 为固定数量的用户专门设计用户体验 • 消除竞争,这有时会导致虚拟空间的对象/资源出现问题。

5 为支持GPGPU调整架构

GPGPU(图形处理单元上的通用计算)是使用图形处理单元处理通常由CPU执行的计算/程序的方法。这得益于GPU增加的可编程阶段以及供应商的库和开发工具包。 5.1 GPU与CPU 近年来,计算硬件,CPU和GPU,在计算能力和架构方面都发生了巨大的变化。[5] 现代GPU已经转变为使用并行多核架构的非常通用的硬件。这些架构包括GPU、Intel和AMD的多核CPU、CELL处理器、SUN UltraSparc处理器,与经典的CPU架构有所不同:它们被设计为优先执行可以在大量数据上并行执行的操作,而不是具有低延迟的单任务操作。 image

图3:现代CPU和GPU架构。

尽管供应商之间存在实现差异,但所有现代GPU都试图通过使用硬件多线程和SIMD处理的多核设计保持尽可能高的效率。 这些技术不仅适用于图形处理单元,但与CPU相比,GPU的设计将这些架构推向了极致。 例如,NVIDIA GeForce 280GTX总共有240个流处理器,运行频率为1.3 GHz,并且峰值速率为933 GFLOPS。相比之下,Intel的高端处理器Core2Quad,运行频率为3.0 GHz,有4个核心,峰值速率为96 GFLOPS [1]。 image

图4:NVidia GPU与Intel CPU之间的比较。来源:NVidia CUDA SDK 2.0

5.2 CUDA 对于我们的实现,我们使用了带有CUDA开发的NVidia GPU硬件。 CUDA(计算统一设备架构)是一个GPGPU程序的硬件和软件平台,使图形单元可用作开发人员的并行计算设备,无需使用图形API。 CUDA使用三个重要的抽象: • 线程组的层次结构 • 共享内存 • 屏障同步 使用CUDA,可以将计算问题划分为可以并行独立处理的不同子问题。 使用这种划分,线程组可以合作解决每个子问题,实现自然的可扩展性,因为每个子问题的计算都可以安排在任何可用的流多处理器上运行。 5.3 实现和结果 对于我们的解决方案,我们决定将以下操作作为GPGPU程序实现:

图5:调整服务器架构以运行GPGPU任务

使用上述原型架构和模块,我们取得了令人鼓舞的结果,在单个GPU NVidia卡(9600M GT)上实时响应地运行模拟,模拟了4096名用户。 image

图6:服务器为4096名用户模拟为球体运行GPGPU物理任务。

6 结论

3D MMO虚拟空间的日益普及也导致了访问这些空间的用户数量的增加。这极大地增加了这些空间的架构所面临的负载。 目前,客户端-服务器架构为MMO应用提供了所需的功能,但由于高昂的成本实际上限制了虚拟空间的可扩展性,因此被迫将世界分割成几个实例/分片。 为了达到满足大量用户的性能水平,虚拟空间背后的生产者面临着维护系统基础设施的巨大财务成本。 另一个需要考虑的方面是,目前GPU的发展速度比CPU快,关于未来的可扩展性,我们可以提到以下事实:

参考文献:

[1] Fathalian K., Houston M., 更深入地了解GPU,ACM通讯,ACM出版社,2008 [2] Chris Chambers, Wu-chang Feng, Wu-chi Feng, 朝公共服务器MMO,第5届ACM SIGCOMM网络和系统支持游戏的研讨会论文集,2006 [3] Geetika T. Lakshmanan, Yuri G. Rabinovich, Opher Etzion, 支持高吞吐量事件处理应用程序的分层方法,第三届ACM国际分布式事件系统会议论文集,2009 [4] J. Kesselman, 大型多人在线游戏的服务器架构,Javaone会议的TS-1084会议,SUN,2005 [5] Breitbart J., GPU使用和数据结构设计的案例研究,计算机科学和电气工程系,卡塞尔大学,2008 [6] Eve Online。可在:http://www.eveonline.com。 [7] Leigh Achterbosch,Robyn Pierce,Gregory Simmons, 大型多人在线角色扮演游戏:过去、现在和未来,娱乐计算机(CIE),第5卷第4期,2008。