您当前的位置:首页 > 美文分享

可编程芯片(可编程芯片,为人工智能和物联网而生)

时间:2022-05-05 19:09:00

可编程芯片(可编程芯片,为人工智能和物联网而生)

互联网已经深入生活,我们的衣食住行都与之相关。商业、工业以及政府的很多服务和应用已经搬到云端服务上面。这些服务和应用都是靠底层的覆盖全球的一个网络的基础设施来支撑的。约翰霍普金斯大学计算机系助理教授金鑫老师在YOSIA Webinar未来论坛青创联盟线上研讨会分享的就是他对计算机网络的研究心得。

可编程芯片怎么提升应用的服务质量?

金鑫教授以自己的研究NetCache为例,介绍了可编程网络芯片如何提高上层应用的性能。NetCache是一个基于键值存储的系统,在搜索引擎和社交网络里广泛应用。这些大型的互联网服务对低延迟和高处理速度要求很高。在NetCache中,可编程网络芯片作为一种网络中的缓存对传统的键值存储系统进行负载均衡。通常来讲,一个键值存储系统里可以有几十亿甚至上百亿的数据对象,但通常来讲用户对数据的访问是不均衡的。

这就造成了有的服务器要处理很多很多请求,而其他一些服务器的请求却很少很少,这种情况会造成不同的服务器的负载是不均衡的,也就造成了整个系统的处理速度降低,以及尾延迟非常高。对于用户的影响就是在访问某些网页时会出现卡顿的现象。更加复杂的一个问题是,服务器的负载不仅是不均衡的而且动态变化的,比如某个时刻这台服务器非常忙,下一个时刻另外一台服务器会非常忙。

解决这个问题的经典办法就是在后端存储器的前面放一个非常快的前端缓存(如上图)。很多研究已经证明前端的缓存只需要存非常少的数据对象,就可以保证整个存储系统的负载是均衡的。举例说明,比如我们后端可能有100台存储服务器,这100台服务器可能存储着成百上千亿个不同的数据对象。

但我们前端的数据缓存里面,只需要存几万个比较频繁被访问的数据对象,就可以保证整个后端的存储服务器的负载是比较均衡的。对于前端的缓存来讲,它唯一的要求就是前端负载的处理速度不低于后端所有服务器处理速度的总和。

用一个快速的数据缓存来对存储系统做负载均衡已经被广泛的应用在存储系统里面。像过去我们的存储系统主要用Flash和Disk来做数据缓存的,在这种情况下,我们只要在前面放一个非常快速的基于内存的缓存服务器就能够很好的提供整个服务器的负载均衡。

但随着各个互联网应用对低延迟以及高通量的要求越来越高,我们后端的存储系统已经从Flash和Disk移到了内存里面。对于我们这种非常非常快速的基于内存的存储系统来讲,就再也不能用以前基于内存的存储系统来做负载均衡。那么我们去哪里可以找这样快的一个缓存,来对我们基于内存的一个存储系统来做负载均衡呢?

NetCache的想法,就是把这个缓存放到内存非常有限的交换机芯片上。如此,用户的访问不必被发送到服务器上,直接在网络里面就可以处理用户对于数据对象的访问请求。

在最后的总结中,金鑫教授说道因为摩尔定律的终结过去几年出现了很多面向一些具体应用的专有处理器,可编程芯片也可以认为是专有处理器的一种,唯一的不同是可编程芯片的处理器是专门针对IO密集型的负载的。

讨论环节一同参加的第七期青创联盟线上研讨会的还有香港科技大学计算机科学与工程系副教授陈凯(兼任研讨会主持人)、中科院计算所先进计算机系统研究中心副研究员黄群、香港中文大学副教授李柏晴、清华大学副教授李丹。这几位老师都是计算机网络领域的专家,大家和现场观众一起对以下几个议题进行了讨论:

Q: 黄群:之前的网络研究认为所有的智能的应用都应该在端上,而现在网络变得更智能。那么哪些应用在网络上的处理比在端上要好的?

A: 金鑫:这个问题可以从网络芯片以及CPU的区别来考虑。CPU主要用于通用计算,而网络芯片是主要针对包处理进行优化的。包处理是一种IO密集型的计算。我觉得这种in-network processing是比较适合于IO密集型负载的,比如我前面提到的我们用网络来做caching,只需要做一个非常简单的读的操作。又比如计算神经网络,很显然计算神经网络computation intensive这种事情就不适合放在网络芯片上面来做,而是更适合放到我们终端上做。

Q:黄群:比如说在云计算里,一台服务器上可能同时跑多个应用,或者存在有多个客户把多个应用跑在一个服务器上的情况。这就使得服务器上的资源不足以支撑非常多的用户的应用这个问题应该怎么处理?

A: 金鑫:我觉得还是需要有一些底层的隔离机制,对多个用户的应用做个隔离。另一方面,我觉得还是需要一些资源管理以及优化方面的工作,可以很好地对网络交换机芯片上的资源比较好的对多个应用进行分配。这样的话,可以使得整个网络不会出现黄群老师提到的“工地悲剧”的情况出现。

Q: 李柏晴:除了可编程的网络芯片,网卡也是可编程的。如何比较可编程的交换机以及可编程的网卡,它们各有什么好处和坏处?

A: 金鑫: 首先从性能上讲,交换机的性能其实是远远高于网卡的。比如说现在一个交换机达到6.4T的处理速度,我们一个网卡可能只有40G或者是100G,这样比较的话一个交换机的处理速度可能就是一张网卡的几十倍或者是上百倍。一个应用如果可以off-load到交换机上是能够节省非常多的网卡以及服务器的。另外从功能角度来讲,现在很多可编程的网卡是基于ASIC的,还有基于FPGA的。

那基于FPGA的网卡在灵活性方面可能会比现在可编程的交换机要更加灵活一些。我们可以off-load一些更多的功能到网卡上去。此外,通过RDMA的方式,网卡可以直接跟主机上的内存进行通信的,这样可能就可以解决交换机芯片上面内存比较小的弊端。总而言之,可编程交换机在性能上讲是远远优于我们可编程网卡的,我们的可编程网卡是可以提供更加多的功能以及更加大的内存。

Q: 陈凯: 有很多应用都是需要可靠传输的,如果我们把应用offload交换机上去,当数据包在网络里被silent drop之后,offload到网络中的应用如何处理这种silent drop? 如何保证可靠性?

A: 金鑫: 这个问题和我们将什么应用off-load到网络中以及这个应用语义是很有关系的。以NetCache为例,它是把存储系统的Cache off-load到网络里面去,只提供读操作,不提供写操作。这种情况下用户端是可以感受到网络的silent drop。所以对于这种silent drop的问题还是要和具体的应用结合起来,根据具体应用的语义来设计机制,探测包是不是被网络丢掉,以及丢包后客户端如何对上层应用的可靠性做保证,以及提供一个相应的基于客户端解决的方案。

Q:黄群:当我们有多个用户都想把他们的应用部署到交换机上的时候,我们是否需要一个网络管理员这样的角色来帮助用户部署这些多个的网络应用?

A:金鑫:我觉得这个问题可以借鉴很多我们在系统方面的研究,比如在操作系统以及虚拟机上面也会遇到多个应用要在同一个OS上面,或者说我们有多个tenant他们希望部署好几个虚拟机到同一个服务器上的情况。当有多个用户想部署多个应用到交换机的时候这个情形是非常相似的。我们也可以借鉴像OS以及hypervisor那边的很多思路和方法来对多个c/用户部署应用到交换机上的情况,来做一个比较好的一个资源的分配,以及多个用用户之间的隔离。

Q:黄群:我们在广域网上可编程网络应用的场景是什么样的?在广域网上是否需要多个不同的ISP之间进行一个协调。在他们协调的过程中,我们国际的标准化组织发挥怎么样的作用。

A:金鑫:首先我觉得近期一个比较可行的方案就是ISP里面就只能管理自己的可编程的交换机而不能将自己的应用部署到其他ISP的交换机上面。比如说,中国移动就只能在自己拥有的广域网交换机上面部署中国移动自己的应用,而不能把应用部署到中国电信的交换机上面。这是近期比较可行的也是比较实际的方案。

从长期来讲,我们可以想象其实我们可以在交换机上面设计类似BGP那样的协议,可以让不同的ISP之间通过一个AS之间的协议进行negotiate,怎么把我自己的应用部署到对方ISP的交换机上去。同时也可以提供一定性能以及功能上的一些隔离,比如我的应用不会恶意的对其他的ISP的其他应用构成意想不到的损坏或者说不会降低其他ISP的网络性能的降低。

参与者提问环节

Q: 请问可编程芯片未来还有可能应用在哪些领域,能不能进行一些展望?

A: 金鑫: 主要有两方面,一方面是围绕在传统的网络功能方面,比如说in-network telemetry以及网络的diagnosis以及侧重于网络性能的提升,比如说load-balancing, multi-path routing。另外一方面是在如何将可编程网络更好与终端系统相结合来对网络和系统做一些协同设计。比如说,之前谈到的网络和存储系统之间的结合,还有大家非常关注的网络如何和一些数据处理系统结合。

比如说可以把可编程交换机和流处理系统结合起来,直接把流数据的处理off-load到网络里面去,这样可以极大的提高流处理系统以及降低处理的latency。其他还有很多关注我们在做分布式机器学习的时候是否可以在网络里面做一些数据的预处理,可以降低学习训练的时间。最后总结一下,一方面是关注于传统的网络功能,网络测量以及网络性能方面的应用,另一方面是用于数据分析和机器学习应用。

Q: 由于P4的可编程性有限(e.g. 无法支持队列调度的自定义、无法存储per-flow 的状态),它能否支持复杂的或者带状态的网络功能?

A: 金鑫: 这其实还是要和具体的网络功能结合起来,实际上现在有很多streaming algorithm可以用非常少的内存来带很多状态,基于这种streaming algorithm是可以近似的实现存储功能以及实现一些比较复杂的网络功能的。比如说最近一些工作其实就是在研究怎么样可以在可编程的芯片上对网络做这种per-flow QoS,这里面就可以用streaming algorithm,用很少的内存来保存网络状态。

Q:可编程的概念主要指的是卡表阶段的可编程性,那交换机上对管理以及调度重要的模块还是与传统的交换机调度模块基本相同,请问未来的可编程交换机有没有可能提供这一类功能的进展?

A: 金鑫: 这个问题非常好,虽然现在市面上可以买到的是能支持查表阶段的可编程芯片,其实通过工业界和学术界的很多研究来看,大家已经在考虑如何把队列管理与调度也可编程化。我相信未来的芯片也是可以支持队列管理与调度模块功能的。

演讲嘉宾

金鑫,约翰霍普金斯大学计算机系助理教授。2011年获得北京大学计算机学士和经济学学士学位,2016年获得普林斯顿大学计算机科学博士学位,2017年在加州伯克利大学的AMPLab/RISELab担任博士后研究员。主要从事计算机网络与系统研究,关注软件定义网络(Software-Defined Networking),可编程网络,软硬件协同设计,人工智能驱动的网络与系统设计,以及低延迟大数据分析系统的设计。在计算机网络和系统领域做出了许多有影响力的工作,发表于计算机网络和系统的顶级会议,包括SIGCOMM、SOSP、OSDI和NSDI。曾获得包括NSDI'18最佳论文奖,Facebook通信与网络奖,Siebel学者奖,中国政府杰出留学生奖,普林斯顿Charlotte Elizabeth Procter荣誉奖等在内的许多奖项和荣誉。

往期研讨会资料:

1.

百年暗物质探索,人类不能放弃的科学领域

2.

当遥感卫星遇到AI,想象力可以很大

3.

电池技术来自何方,走向何处?

可编程 网络 多个 交换机 芯片

最新文章