代码之家  ›  专栏  ›  技术社区  ›  randomeval

数据包计数和数据包中字节总数计数之间的间隔

  •  0
  • randomeval  · 技术社区  · 7 年前

    我在看书 perfbook

    快速测试5.2:网络数据包计数问题。假设你需要 收集有关网络数据包数量(或总数)的统计信息 传输和/或接收的字节数)。数据包可能是 由系统上的任何CPU发送或接收。进一步假设 这台大型机器每天能处理一百万个数据包 每五秒钟计数一次。您将如何实施这一统计方法 柜台

    有一个快速测验询问数据包计数和数据包中字节总数计数之间的区别。

    在“查看此”一段中的示例中,如果将数字3和5更改为1,会有什么区别?

    快速问答5。26: 计数和计算有什么根本区别 数据包和计数数据包中的总字节数,给定 包的大小不同?

    答复: 计数器仅按值1递增。另一方面,当 计数字节时,计数器可能会以较大的数字递增。

    为什么这很重要?因为在增量为1的情况下 在某个时间点,即使是 不可能确切地说那一点是什么时候发生的。相反 计数字节时,两个不同的线程可能返回 与任何全局操作顺序不一致。

    要了解这一点,假设线程0将值3添加到其计数器, 线程1将值ve添加到它的计数器中,线程2和3将值相加 柜台。如果系统是弱序的,或者如果编译器使用 如果进行积极的优化,线程2可能会将总和设为3和 线程3可能会将总和设为ve。唯一可能的全球订单 这两个顺序都与得到的结果不一致。

    如果您错过了>这一次,你并不孤单。迈克尔·斯科特用过这个 保罗·E·麦肯尼在保罗博士答辩时被问到的问题。

    0 回复  |  直到 6 年前
        1
  •  1
  •   Alexis Wilke    6 年前

    我可能是错的,但假设其背后的想法如下:假设有两个单独的进程收集它们的计数器并求和为总值。现在假设在两个过程中都有一些同时发生的事件序列,例如,大小为10的分组同时进入第一处理,大小为20的分组同时进入第二处理,并且在一段时间之后,大小为30的分组在大小为60的分组进入第二处理的同时进入第一处理。下面是事件的顺序:

               Time point#1  Time point#2
    Process1:  10            30
    Process2:  20            60
    

    现在让我们为弱序系统建立一个时间点#1和#2之后可能的总反态向量,考虑到之前的总值为0:

    Time point#1
    0 + 10 (process 1 wins) = 10
    0 + 20 (process 2 wins) = 20
    0 + 10 + 20 = 30
    
    Time point#2
    10 + 30 = 40 (process 1 wins)
    10 + 60 = 70 (process 2 wins)
    20 + 30 = 50 (process 1 wins)
    20 + 60 = 80 (process 2 wins)
    30 + 30 = 60 (process 1 wins)
    30 + 60 = 90 (process 2 wins)
    30 + 90 = 110
    

    现在假设两者之间可能有一段时间 time point#1 和 time point#2 时间点#1 可以被视为有效,因为当接收到的总大小为10、20或30时,存在某个精确时刻(我们忽略了最终值可能不是实际值的事实-至少它包含在系统运行的某个时刻是实际的值)。对于在 Time point#2 情况略有不同。例如,系统从未处于40、70、50和80状态,但我们面临着在第二次收集后获得这些值的风险。

    现在让我们从数据包的角度来看情况。我们的事件矩阵是:

               Time point#1  Time point#2
    Process1:  1             1
    Process2:  1             1
    

    可能的总数为:

    Time point#1
    0 + 1 (process 1 wins) = 1
    0 + 1 (process 1 wins) = 1
    0 + 1 + 1 = 2
    
    Time point#2
    1 + 1 (process 1 wins) = 2
    1 + 1 (process 2 wins) = 2
    2 + 1 (process 1 wins) = 3    
    2 + 1 (process 2 wins) = 3
    2 + 2 = 4
    

    在这种情况下,所有可能的值(1、2、3、4)都反映了系统在某个时间点的状态。