Patterns in network system design (5)

Sina WeiboBaiduLinkedInQQGoogle+RedditEvernote分享




21) SMP

Pattern Name and Classification: Symmetric multiprocessing
Intent: 合理分配计算资源
Also Known As: cluster(parallel) model
Motivation (Forces):

SMP/AMP主要关注在多核环境中核的分配。multiple processor是和single processor相对应。
而symmetric和asymmetric相对应。不管symmetric还是asymmetric,它们都面临相同的问题:
在多核下编程。从字面意义来讲,symmetric就是说所有的core做的事情是一样的,这并不是说在
任何时刻,每个核的状态都是一样的,而是说,每个core完成的功能是相同的,不存在差别。而
asymmetric与之相反,每个core完成的功能是不同的。当然在实际使用时,应该是两种模式混合
使用,也就是说,可能从整体来看,系统是AMP,而从某个局部来看,系统是SMP。
使用SMP还是AMP,与系统所面临的任务相关。比如在一个包处理过程中,可能包含以下步骤
a) dequeue,把包从网卡的buffer里面取出来,并放到系统buffer里面。
b) parse,parse这个包,取出感兴趣的信息。
c) classify,包分类。
d) process,处理包。
e) enqueue, 把包放到发送队列。
可以在一个core上把这些事都做了,也可以一个core或者一些core做某一个步骤。分配的原则是

a) 每一个stage的cpu load是平衡的,也就是说,复杂的事情,可以多用几个核,而简单的事情可以
少用几个核。如果是SMP,也就是说,每个核做的事情一样,那么会出现这种情况:所有的核都在忙着
处理某一种事情,而不能处理其他事情,这样会导致丢包。所以要避免某一个任务耗费时间过长,而导致
整个系统处于忙等待状态。这里的任务是协作式的,所以要在设计时避免长任务。

b) core与core之间有共享的数据结构,因此要使用锁。但是某些任务使用SMP会增加难度,比如收包,
发包和保序等。一个core收包和多个core收包,哪个更好需要测试才能确定。并不是核越多就越好,需要
在复杂度和功能,速度几个方面来权衡。

Known Uses:
Related Patterns: run-to-completion, pipe line, AMP
References:

1: http://en.wikipedia.org/wiki/Symmetric_multiprocessing
2: http://en.wikipedia.org/wiki/Asymmetric_multiprocessing
3: Hard Real-Time Performances in Multiprocessor-Embedded Systems Using ASMP-Linux

22) AMP
Pattern Name and Classification: Asymmetric multiprocessing
Intent: 合理分配计算资源
Also Known As: pipe model
Motivation (Forces):

具体的讨论可以参见SMP。真实环境里面用到的一般都是AMP和SMP的混合体,所以这两个模式不是竞争,
而是合作的关系。AMP一般用于划分control plane和data plane,但是在data plane,也会同时用到AMP
和SMP,而在control plane,会用SMP (单核就是退化的SMP)。总之,具体问题具体对待。
Known Uses:
Related Patterns: run-to-completion, pipe line, AMP
References:

1: http://www.windriver.com/products/platforms/network-acceleration/

(没有打分)

雁过留声

“Patterns in network system design (5)”有6个回复

  1. xwill 于 2011-01-13 10:02 下午

    AMP 用在data plane该比较少见, 多个core之间的通信开销(一个报文在多个core之间流动)可能会很大。

  2. kernelchina 于 2011-01-13 10:52 下午

    multicore应该是share memory的啊,local cpu和remote cpu通讯有开销,但这个也是depends,corecore和cpucpu应该不是同一个概念。

  3. xwill 于 2011-01-14 12:53 上午

    我说的核分配指的是两种情况,一种是CP/FP,比如38XX有16个核,CP可以用4个核,FP可以用12个核。第二种是FP内核分布,比如在FP的12个核中,可以有两个核专门收发包,4个核只用于3层处理,其余的核做4+层处理,如果一个报文必须要到7层,那就会涉及到同一个包在不同核间的流动开销。
    shared memory可用用来在core间共享配置,路由表,连接表等,除非要做包拷贝,否则shared memory只负责管理的操作。
    不知道你说的local cpu和remote cpu是什么意思?

  4. kernelchina 于 2011-01-14 1:49 上午

    16个核看到的memory不一样吗?是多个process?而不是多个thread?如果是这样,在同一个process里,core与core通信消耗小一点;不同的process,会大一点。local cpu就是和内存在一起的cpu,而remote cpu是指可以remote访问本地内存的cpu,不过也可能有其他叫发。在NUMA里面好像叫local和remote,需要查一下。

  5. awkward 于 2011-01-14 6:20 下午

    俺觉得kernelchina不是一般的银啊,膜拜啊,Patterns in network system design (1-5)写出来,并且有自己的体会,很强大,把这些东西弄明白,用cavium cpu也就差不多了。

  6. kevin 于 2011-01-14 9:04 下午

    NUMA的local和remote指的是memory。。不过反过来理解指CPU也没错。。。

    膜拜pattern