在本节中,我们描述了 PSPP 方案的具体思路。首先,我们将输出端口分为活动端口和非活动端口。如果输出端口 i 的队列长度大于平均缓冲区大小,即 B/W ,则输出端口 i 称为活动端口;否则称为非活动端口。 B 是总缓冲区大小,N 是输出端口的数量。对于非活动端口,PSPP 的操作类似于 CS,称为部分共享 (PS) 缓冲区。对于活动端口,PSPP 的作用类似于 CP,称为部分分区 (PP) 缓冲区。 PS 缓冲区的大小根据以下标准确定:一是应该为所有非活动端口分配足够的 PS 缓冲区以提供公平访问;另一个是PS缓冲区的大小应尽可能小,以便将更多的缓冲区空间分配给活动端口以减少丢包。因此,如何确定 PS 缓冲区的大小对于提高 faimes 和整体损失性能非常重要。
假设在时间 t 为所有非活动端口分配的 PS 缓冲区大小由下式给出,
:PSPP阈值因子
:t时刻非活动端口的数量。
:t时刻分配给所有非活动端口的缓存。
如果在t时刻发往所有非活动端口的到达数据包数量大于,则丢弃多余的数据包;否则,允许这些数据包进入 PS 缓冲区。 PS缓冲区大小确定后,PSPP计算每个活动端口的缓存控制阈值,即PP缓冲区大小。假设t时刻的控制阈值为T(t),则下式可给出,
:t时刻的非活动端口集合。
:t时刻输出端口i的队列长度。
如果,则在t时刻已到达的去往活动端口 i 的数据包将被丢弃。发往此活动端口的已到达数据包将被丢弃,直到队列长度低于控制阈值T(t)或T(t)上升到队列长度以上,PSPP 可以动态适应流量变化。每当流量负载发生显着变化时,系统将经历一个瞬态。例如,当一个非活动端口突然开始获取缓存空间时,它的队列长度和总缓存占用率都会增加,导致控制阈值降低。如果队列长度超过控制阈值,则所有到达的数据包将在它们排出时暂时被阻止,从而为新的活动端口释放更多缓冲区。稳定后,所有活动端口,无论是旧的还是新的,都将具有相同的队列长度。
当参考稳态符号时,我们只需从所有变量中删除时间参数 t。例如,Qi 表示活动端口 i 的最大允许队列长度,T 表示 T(t) 的稳态值。如果有S个非活动端口,那么我们可以得到T如下式:
这里表示S个非活动端口申请的共享缓存。