ppcc800330 发表于 2015-12-23 18:21

请教伙伴算法的问题

请问下我看资料说 伙伴算法的每次调用都会“弄脏”硬件高速缓存,一直不太明白,
请问是为什么呢?

谢谢

yjh777 发表于 2015-12-24 08:45

啥资料?原话是怎么写的?

ppcc800330 发表于 2015-12-24 09:37

深入理解linux内核 中讲到slab分配器时写到:

硬件高速缓存的高性能又是尽可能地限制对伙伴系统分配器调用的另一个理由,因为对伙伴系统函数的每次调用都“弄脏”硬件高速缓存,所以增加了对内存的平均访问时间。内核函数对硬件高速缓存的影响就是所谓的函数“足迹(footprint)”,其定义为函数结束时重写高速缓存的百分比。显而易见,大的“足迹”导致内核函数刚执行之后较慢的代码执行,因为硬件高速缓存此时填满了无用的信息

yjh777 发表于 2015-12-24 08:45 static/image/common/back.gif
啥资料?原话是怎么写的?

yjh777 发表于 2015-12-24 14:44

哦,没太明白具体原因;

不知道伙伴系统的函数 为什么会导致写很多无用信息到 硬件高速缓存,,
上网查查去,,

nswcfd 发表于 2015-12-24 15:56

是指每次分配一个page,并且需要清零的情况下zero掉整个page,会invalid掉整个hw cache么?
(相对的,slab每次只分配一个object,初始化最多invalid几个cache line,或者通过批量初始化来抵消掉这种开销?)

ppcc800330 发表于 2015-12-24 17:32

你是假设要zero掉整个page,分配并不一定要zero吧?
nswcfd 发表于 2015-12-24 15:56 static/image/common/back.gif
是指每次分配一个page,并且需要清零的情况下zero掉整个page,会invalid掉整个hw cache么?
(相对的,sla ...

瀚海书香 发表于 2015-12-24 20:07

ppcc800330 发表于 2015-12-24 17:32 static/image/common/back.gif
你是假设要zero掉整个page,分配并不一定要zero吧?


1、buddy system 是基于page的,相比于slab 每次操作的foot print过大,而且大部分情况下会导致TLB失效。
2、很多时候大家说的劣势都是指最坏情况下的场景。

参考资料:
https://people.kth.se/~roand/half_fit.pdf
http://www.cs.uky.edu/~raphael/courses/CS585/chap07.refs.txt

ppcc800330 发表于 2015-12-25 09:37

1:buddy system 是基于page的,但如果分配页面,但只访问很小一部分,应该只会导致所操作的很小一部分数据cache失效。
2:TLB miss确实会增加。但描述好像跟这个无关。
3:这里的“foot print” 具体是什么含义,有点不太明白。

瀚海书香 发表于 2015-12-24 20:07 static/image/common/back.gif
1、buddy system 是基于page的,相比于slab 每次操作的foot print过大,而且大部分情况下会导致TLB失 ...

nswcfd 发表于 2015-12-25 10:24

foot print简单的说就是touch的memory范围的大小,一个page的footprint通常比一个object要大得多。(除非是page-size级别的大object).

讨论fooprint的潜台词就是对 cache/tlb的影响,这么大的memory range全部被cache起来需要消耗多少cache line/tlb entry等。

如果只访问一个page的一小部分(当然是种严重浪费),那就跟只访问一个object的开销差不多,实际上slab object本身就是page的一部分。

yjh777 发表于 2015-12-26 14:50

明白了,谢谢 @nswcfd 解释!

    所以系统在伙伴基础上又有了 slab slub... 来减轻副作用,,
页: [1] 2
查看完整版本: 请教伙伴算法的问题