多计算机
多计算机是紧耦合CPU,不共享存储器,每台计算机都有自己的存储器。
多计算机硬件
互联技术
在多计算机中可采用两种减缓机制。在第一种机制中,每个消息首先被分解(由用户软件或网络接口进行)称为有最大长度限制的快,称为报。该交换机制称为存储转换包交换,由愿节点的网络接口卡注入到第一个交换机的报组成。
当整个包到达一个一个输入缓冲区时,它被复制到沿着其露肩通向下一个交换机的队列当中,当包到达目标节点所连接的交换机时,该包被i 复制进入目标节点的网络接口卡,并能最终到达其RAM。
尽管存储转发包交换灵活而有效,但是存在增加延迟的问题。
另一种交换机制是电路交换,它包括由第一个交换机建立的,通过所有交换机而到达目标交换机的一条路径。一旦露肩建立,比特流就从源到目的地通过整个露肩不停的传输。在所设计的交换机汇总,没有中间缓存,电路交换需要有一个建立阶段,它需要一点时间。但是一旦建立完成,速度就很快。在包发送结束后,该路径必须被删除。
电路交换的一个白内障是虫孔路由,它把每个包拆成子包,并允许第一个子包在整个路径还没有完全建立起来之前流动。
网络接口
在多计算机中,所有节点里都有一块插卡板,它包含节点与互连网络的连接,这使得多计算机连城一体。这些板的构造方式以及它们如何同主CPU和RAM连接对操作系统有重
要影响。事实上在所有的欧计算机中,接口板上都有一些用来存储进出的RAM。这样设计的原因是许多互连网络是同步的,所以一旦一个包传送开始,比特流级必须以恒定的速率连续进行。如果包在主RAM中,无法保证稳定。
网卡通常插在PCI总线上,
接口板上课以有一个或多个DMA通道,甚至板上可以有一个完整的CPU。通过请求在系统总线上的块传送,DMA通道可以在接口板和主RAM之间以非常高的速率复制包。不过,正式这种块传送(占用系统总线的多个周期)是接口板的RAM的需要总是第一位的。
很多接口板上有一个完整的CPU,可能另外还有一个或多个DMA通道。它们被称为网络处理器,并且其功能日趋强大。这种设计一位这主CPU将一些工作分给网卡。
有两个CPU则意味这它们必须同步,以避免竞争条件的发生,浙江增加额外的开销,并且意味着操作系统要承担更多的工作。
低层次通信软件
在多计算机系统中高性能通信的敌人是对包的过度复制。
如果说进出RAM的复制是性能瓶颈,那么进出内核的额外复制会将端到端的延迟加倍 ,并把吞吐量降低一半。不少多计算机把接口板映射到用户空间,并允许用户进程直接把包送到卡上,而不需要内河参与。
一个解决方法是将接口板映射到所有需要它的进程中去,但是这样做就需要有一个机制来避免竞争。
但是那些注入互斥信号量一类的机制需要在进程彼此协作的前提下才能允许。
最多简单的设计是使用凉快网络接口板,一块映射到用户空间供应用程序使用,另一块映射到内核空间供操作系统使用。
节点至网络接口通信
最快的方法是使用板上的DMA芯片直接将他们从RMA复制到板上,这种方法的问题上,DMA使用物理地址。而用户进程通常不知道有关的物理地址。
为避免上述问题,可采用一类将页面钉住和释放的系统调用。但是这样代价太大。
用户层通信软件
再多计算机中,不同CPU上的进程通过互相发送消息来实现通信。在简单的情况下,这种调用上暴露给用户进程的;在较复杂的情况下,远程通信看起来像过程调用的办法,将实际的消息传递对用户隐藏起来。
发送和接收
一个问题上如何编制,一般而言上由两部分组成,一部分上CPU编号,另一部分上这个已编程的CPu上一个进程或端口的编号。在这种方式中,每个CPU可以管理自己的地址而不会由任何冲突。
阻塞调用和非阻塞调用
通常是由系统设计者作出在阻塞原语和非阻塞原语之间的选择。当然少数系统两种都可以使用。
非阻塞原语的性能优点被其缺点抵消了——直到消息被i 送出发送者才能修改消息缓冲区。进程在传输过程中重写消息的后果十分严重,更糟的是,发送进程不知道传输何时结束,所以根本不知道什么时候重用缓冲区是安全的。
有三种可能解决的方法
- 让内核复制消息到内河缓冲区,然后让进程继续
- 当消息发送之后中断发送这,告知缓冲区又可以使用来(用户级中断引发编程问题,而且可能引发竞争条件)
- 让缓冲区写时复制。在消息发送出去之前,若有修改,则进行复制(会引发不必要的复制)
中断方式编程困难,而且速度很慢,所以也许对于接受者而言,更好的方法是使用一个过程poll轮询进来的消息。
还有一个选择,使用弹出式线程。
这一方法的变种是,在中断处理程序中直接允许接受者代码,从而避免来创建弹出线程的麻烦。要使这个方法更快,消息自身可以嗲又该处理程序的句柄。这种方式称为主动消息。主动消息只能在双方完全信任的情况下工作。
远程过程调用
狗仔所有通信的反省都是输入暑促好。
远程过程调用以及称为来大量计算机如那句的基础。习惯上,称发出调用的过程为客户机,而被调用的称为服务器。
RPC背后的思想是尽可能得使远程过程调用像本地调用。客户程序必须被绑定在客户端桩上,而服务器程序也绑定在服务器桩上。这些过程隐藏了这样一个实时,级从客户机到服务器的过程调用并不是本地调用。
用户编写的客户机过程,至进行对客户端桩的正常调用。
实现相关的问题
由于客户机和服务器在不同的地址空间,所以用RPC传递指针是不可能的。
通过引用调用的标准调用序列被复制-恢复替代可以解决,但是并不总是奏效。(比如指向一些复杂的数据结构)
因此对于参数要作出某些限制。
此外,对于弱类型语言,无法判断参数有多大。
而参数类型并不总是能被推导出来的。全局变量也无法使用了
分布式共享存储器
采用一种分布式共享存储器可以很好得保留共享存储器的感觉,尽管这个共享存储器实际上不存在。
操作系统只是从远程RAM而不是从本地磁盘中满足了这缺页异常。对用户而言,机器看起来拥有共享存储器。
在DSM系统中,地址空间被互粉为页面。这些页面分布在系统中国年的所有节点。当一个CPU引用一个非本地地址时,就产生了一个陷阱,DSN会调用包含改地址的页面并重新指向错误命令。
复制
对基本系统的一个改进是复制只读页面,可以显著提高性能。
另一种可能是,不仅复制只读页面,而且复制所有页面。
伪共享
大页面有其优点也有其缺点,过大的页面会引起伪共享问题。
伪共享是指两个无关的变量处于同一个页面中,其中的修改会让进程得到另一个。
实现顺序一致性
如果不对科协页面进行复制,那么实现一致性不难。
DMS在对一个共享页面进行写入之前, 先先所有持有该页面副本的CPU发出一条消息,通知他们解除映射并丢弃该页面。在其所有解除映射等工作完成之后,该CPU便可以进行写操作了,
一种方法是允许一个进程获得在虚拟地址空间上的锁,用来保证写时唯一。
另一种方法是修改变化部分。
多计算机调度
将进程分配到工作节点的工作十分重要。
因为每个节点都拥有自己的进程,因此可以应用任何本地调度算法,但是仍有可能使用多处理机调度。
负载平衡
一旦将进程被i 制定给了某个节点,就不再可控,因此,将哪个进程分配给哪个节点是非常重要的。
从事分配工作的算法恶化启发则是所谓的处理器算法。
图论确定算法
将节点分为子网,寻找子网之间流量最小的组合
发送者发起的分布式启发算法
当进程创建时,他就允许在创建它的节点傻姑娘,出非节点裹在,该节点则随机选择一个节点并询问其负载情况。探查工作不会永远进行,在N次探查之后,如果没有合适的主机,算法就终止。且进程继续在原有机器上运行。
在负载重的情况下,所有机器都会持续得对其他机器进行探查没徒劳地试图找到一台愿意接收工作的机器,这样的尝试会导致巨大的开销
接受者发起的分布式启发算法
由接受者要求更多的工作