Flit Performance Measurement Extended Capability

目录
    ⇦

    Flit Performance Measurement Extended Capability

    该 capabilities 是可选的,允许在 Downstream Port,Upstream Port 的 Function 0 和RCRBs 中实现,在其它 function 中不允许实现。由于是 Gen6 新增的,该 capability 只在Flit Mode 中使用,在 Non-Flit Mode 中使用无效。并且该 capability 中的 LTSSM Performance Status 1 到 LTSSM Performance Status 5 是可选的,具体支持的个数在该capability 的 Flit Performance Measurement Capability 寄存器的 LTSSM Tracking Register Count 字段指示。没有实现的寄存器是不存在的。该capability的结果如下图所示:
    Flit_Performance_Measurement_Extend_Capability

    Flit Performance Measurement Extended Capability Header (Offset 00h)

    Flit Performance Measurement Extended Capability Header

    比特位置 寄存器描述 属性
    bit[15:0] Flit Performance Measurement Extended Capability ID – PCI-SIG 定义的ID号,用以标志是什么能力
    Flit Performance Extend Capability 的 Extended Capability ID 是0033h
    RO
    bit[19:16] Capability Version, PCI-SIG 组织定义的 Capability 结构版本号,对于 pcie6,该字段必须是 1h RO
    bit[31:20] Next Capability Offset 下一个 Capablity 的偏移,该字段表明下一个 PCI Express Capability 结构的偏移地址,如果在 Capabilities 链表中,后面不存在其他的 capability,则该字段为 000h
    如果在配置空间中实现了 Extended Capabilities,该偏移是相对于PCI-兼容的配置空间,该值要么是 000h (capabilities的结束) 或者大于 0FFh (传统的PCI配置空间最大地址)
    RO

    Flit Performance Measurement Capability Register (Offset 04h)

    Flit Performance Measurement Capability Register

    比特位置 描述 属性
    bit[9:0] Flit Performance Interrupt Vector ,中断向量,包含 MSI 或者 MSI-X 向量号
    如果 MSI 和 MSI-X 都实现了,基于哪一种使能,该字段允许改变其值。此外,当使能 MSI 时,基于 Multiple Message Enable 的值(Message Control 寄存器的比特 6:4,决定分配向量的个数) ,该字段允许改变其值。
    RO
    bit[12:10] LTSSM Tracking Register Count, 表明支持允许追踪的LTSSM变化事件。其值在 0 到 5 Hwinit

    Flit Performance Measurement Control Register (Offset 08h)

    该寄存器的字段分布如下图
    Flit Performance Measurement Control

    比特位置 描述 属性
    bit[0] Flit Latency Measurment Enable – 使能位,当把该比特设置为1时,开始测试一个发送一个 Flit 到收到该 Flit 对应的Ack/Nak/Replay 的延时。当在测试时,把该比特写 0 会停止测试并且会把 Flit Latency Tracking Status 字段设置为 10b。当该比特已经是 1,在写 1 是无效的
    测试延迟的单位是 8ns,默认值为0
    RW
    bit[3:1] Flit Response Type – Flit 响应类型,设置相应的比特为 1,可以开始测试一个 Flit 到收到该笔 Flit ack 的延迟或者 Flit 到收到该笔 Flit 的 Nak 延迟或者 Flit 到说到该笔 Flit replay 的延迟。如果在测试过程中,该字段发生了变化,其行为是未定义的,如果 Flit Latency Measurement Enable 已经为 1,并且该字段的编码为保留,其行为也是为定义的。
    001b   Flit to Ack Latency, 在相同的链路宽度下,测试发送一笔原始的Flit到接收到该笔 Flit 的 Ack 的延时。重传的Flit 不包含测试范围内,隐式的 Ack 也不算在测试范围内(不是每一笔 Flit 都需要回 Ack)
    010b   Flit to Nak Latency, 在相同的链路宽度下,测试发送原始 Flit 到接收到该笔 Flit 的 Nak 之间的延时。同样不包含重传的 Flit 或者隐式的 Nak
    100b   Nak to Replay Latency – 在相同的链路宽度下,对应特定的 sequence number,测试发送第一个包含 Nak的 Flit 到收到第一笔对应 replay FLit 的延迟
    其它   保留
    默认值为0
    RW
    bit[5:4] 保留,该比特允许实现为RsvdP或者无任何效果的RW,如果实现为RW,则默认值为0,pcie 6.0协议是有的,在6.2时删了 RsvdP/RW
    bit[10:6] Number Of instance to track, 追踪的数量
    0 0000b   追踪最坏情况下的延迟,一直测试,直到Flit Latency Measurement Enable被清除
    其它   追钟该比特指示数量 Flit 的累计延迟
    在测试过程中,该比特的值如果发生了变化,其行为是未定义的
    当该比特为 0 时,当 Flit Latency Measurement Enable 被清掉时,测试完成
    当该比特非 0 时,测试的 Flit 个数等于该值时,测试完成
    RW
    bit[13:11] Interrupt if delay for any tracked Flit exceeds this encoded value, 如果任何一个追踪的 Flit 的延迟超过该编码的值,就产生中断
    000b  000b – 不产生中断
    001b  100ns
    010b  200ns
    011b  300ns
    其它 保留
    在测试过程中,如果该字段的值发生了该变,行为是未定义的,默认值为 0
    RW
    bit[18:14] LTSSM State Transition Tracker,用于追踪 LTSSM 的变化,每一比特表示追钟一个独立的事件.
    bit[14]  L0 到 Recovery,Framing Error或者在L0时软件发起
    bit[15]  L0p, 在 upconfig 中,在 lane 上从Electrical Idle 到开始传输数据流。NOTE : 降 lane 不会追踪
    bit[16]  L1.0 到 L0
    bit[17]  L1.1 到 L0
    bit[18]  L1.2 到 L0
    如果该字段得值大于 LTSSM Tracking Register Count 的值,则行为是未定义的,默认是0
    RW
    bit[23:19] Number of Instance to track for LTSSM transition,追踪 LTSSM 转换的次数.
    0 0000b 追踪最坏情况的延迟,一直追踪,直到关闭测试
    其它值 该字段表示的总的延迟
    默认值是0
    RW
    bit[26:24] LTSSM State Transition Tracker Interrupt 如果bit[16:14] 的指示的任意一个事件的延迟超过了该编码字段编码的值,就产生中断
    000b 不产生中断
    001b 6.4ms
    010b 12.8ms
    011b 19.2ms
    其它 保留
    默认值为0
    RW
    bit[29:27] LTSSM State Transition Tracker L12 PM Substate Interrupt – 如果bit[18:17] 指示的任意一个事件的延迟超过了该字段编码表示的延迟,就产生中断
    000b 不产生中断
    001b 1s
    010b 2s
    011b 3s
    100b 4s
    101b 5s
    110b 10s
    111b 保留
    默认值为0
    RW

    Flit Performance Measurement Status Register (Offset 0Ch)

    Flit Performance Measurement Status

    比特位置 寄存器描述 属性
    bit[1:0] Flit Latency Tracking Status,Flit Latency追踪状态
    00b 未开始
    01b 开始了
    10b 完成
    11b 完成了但是有错误(计数溢出)
    默认值为0
    RO
    bit[6:2] Flit Latency Tracking, 该字段表示已跟踪并记录在 Flit 延迟跟踪计数器中的 Flit 的确切数量。记录到最大值后不会从0开始
    当 Number of instances to track 是非 0 值时,该值小于等于 Number of instances to track 字段
    当 Number of instances to track 是 0 时,该字段可能包含任何值
    如果 Flit Latency Tracking Status 是 11b ,该字段是未定义的
    默认值为 0
    RO
    bit[7] Interrupt generated based on trigger event, 基于触发事件的中断,如果 Flit Latency 大于设置的值后产生了中断,则该比特设置 1,当该比特设置为 1 后,不允许再次基于触发事件产生中断 RW1C
    bit[23:8] Flit Latency Tracking Counter
    如果 Number of instances to track 是非 0 值,该字段表示所有追踪过的 flit 的总延迟值,软件可以用该值除以 Flit Latency Tracking 字段来获得平均延迟
    如果 Number of instance to track 是 0,该字段表示最大延迟值,即只要还在测试期间,该值会一直加。
    如果 Flit Latency Tracking Status 是11b,该字段是未定义的。
    测量的单位是8ns(pcie7.0正式版以修改为8ns,其它版本不一定是这个值),默认值是0
    RO

    LTSSM Performance Measurement Status Register (Offsets 10h to 20h)

    下面的寄存器最多支持 5 个。每个寄存器支持追踪一种 LTSSM 状态转变。如果支持多个事件,则关联顺序基于控制寄存器中启用的位。在对某一类事件进行测量时,软件不能在使能其它测试 LTSSM 状态转变的位(也就是说需要测试的 LTSSM 状态跳转要在测试前就配置好,测试后不允许在更改)。

    可以追踪多少个状态机变化事件,就需要实现多个寄存器,寄存器的先后顺序来源于 LTSSM State Transition Tracker 中比特使能情况,而不是固定第几个状态寄存器就记录第几个事件

    ig 如果需要追踪 L0 到 Recovery 和 L1.0 到 L0 ,那么需要实现两个寄存器来记录,10h 就是记录 L0 到 Recovery 跳转相关信息的。14h 地址的寄存器就是记录 L1.0 到 Recovery 跳转相关信息的

    pcie6.2 LTSSM Performance Measurement Status

    比特位置 寄存器描述 属性
    1:0 LTSSM State Transition Tracking Status
    00b 未开始
    01b 开始了
    10b 完成了
    11b 有错(包括计数器溢出)
    当 Flit Latency Measurement Enable 从 0 到 1 转变时会清掉改比特
    默认值是 0
    ROS
    6:2 LTSSM State Transition Tracking – 在当前测试追踪类型下, LTSSM 状态跳转的次数
    该值达到最大后,不会变为 0
    当 Flit Latency Measurement Enable 从 0 到 1 时清掉
    默认值是 0
    ROS
    7 Interrupt generated based on trigger event count due to LTSSM State Transition Tracking – 当状态跳转的时间超过设定编码对应的值后,就触发中断。当该值已经设置后,不允许基于触发事件产生新的中断
    默认值是 0
    RW1CS
    23:8 LTSSM State Transition Tracking Counter
    测量单位是 64us
    当 Flit Latency Measurement Enable 从 0 变为 1 时,清掉该值
    默认是 0
    ROS

    如果在这个过程中遇到了其它问题,欢迎在评论区留言,如果你已解决,也欢迎把具体的解决方法留在评论区,以供后来者参考
    ×

    感谢您的支持,请扫码打赏

    微信打赏 支付宝打赏
    guest

    0 评论