PCI Express学习篇---链路层(三)Timer及Replay Buffer计算

声明:此文章为原创,转载请注明 转自https://blog.csdn.net/weixin_48180416/article/details/117396469

ACK Latency Timer


计算公式如下:

Max_Paylaod_size:最大的Payload Size;

TLPOverhead:包含TLP Prefix, header, LCRC, Sequence Number, STP, END,共28B;

AF如下表,(其他速率下的AF见Spec Table H-4 Table H-5)

LinkWidth:链路宽度;

Internal Delay: 19 Symbol Times for 2.5 GT/s mode operation, 70 Symbol Times for 5.0 GT/s mode operation, and 115 Symbol Times for 8.0 GT/s and 16.0 GT/s modes of operation.

计算后得到的ACK Latency Timer如下表:(其他速率见Table 3-7 Table 3-8)

REPLAY_TIMER


PCIe 3.1中规定的计算公式如下,实际上为ACK Latency Timer的三倍:

Base Spec 5.0提到Simplified REPLAY_TIMER Limit:

16GT/s及以上的速率时,必须用Simplified REPLAY_TIMER。只支持16GT/s以下速率时,强烈建议采用Simplified REPLAY_TIMER,也可以采用上述PCIe 3.1规定的方法。

 Replay Buffer Depth(以Synopsys IP为例)


Buffer深度和以下因素有关

 

1. 先收到一个TLP包,AckNak_LATENCY_TIMER开始计数;

2. AckNak_LATENCY_TIMER expire;

3. remote device发送一个TLP,local device处理TLP,local device随后发送ACK DLLP,remote device处理DLLP,还有retimer的latency。

Buffer深度计算公式:

 

data_size{1}: receiver需要先接收一个TLP再开始启动AckNak_LATENCY_TIMER,至少需要一个TLP大小,payload+header(28B);

ack_lat_limit{2}: timer开始计时到超时,需要存多少包;

5.b+5.c: 是spec规定的19 Symbol Times for 2.5 GT/s mode operation, 70 Symbol Times for 5.0 GT/s mode operation, and
115 Symbol Times for 8.0 GT/s and 16.0 GT/s modes of operation;

5.a+5.d: the sum of the controller and PHY delays (Tx and Rx) of the local device, 由实现决定实际的延时;

cx_nb:为PIPE接口处理Symbol的数目,比如32bit PIPE, cx_nb为4 symbol for GEN2;

l0s_adj:退出L0s需要4 symbols的FTS序列。

 

 

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
mssql-jdbc-shared-timer-core线程是Microsoft SQL Server JDBC Driver中的一个核心线程,它用于检查和清理连接池中的无效连接。通常情况下,建议不要直接关闭该线程,否则可能会导致连接池中的连接得不到及时的清理和释放,进而影响应用程序的性能和稳定性。 如果您确实需要关闭mssql-jdbc-shared-timer-core线程,可以考虑使用以下两种方法之一: 1. 通过配置文件禁用定时器 在Microsoft SQL Server JDBC Driver的配置文件中,可以通过设置以下属性来禁用定时器: ``` <property name="disableConnectionPoolTimer" value="true" /> ``` 这样一来,定时器就会被禁止,连接池中的连接也就不会被自动清理和释放了。需要注意的是,禁用定时器可能会导致连接池中的连接资源得不到及时的回收和释放,从而影响应用程序的性能和稳定性。 2. 通过编写代码手动关闭连接池 如果您需要在应用程序中手动关闭连接池,可以调用连接池的close()方法,例如: ``` DataSource dataSource = new SQLServerDataSource(); ((SQLServerDataSource) dataSource).setURL("jdbc:sqlserver://localhost:1433;databaseName=test"); ((SQLServerDataSource) dataSource).setUser("user"); ((SQLServerDataSource) dataSource).setPassword("password"); Connection connection = dataSource.getConnection(); // 使用连接执行数据库操作 connection.close(); // 关闭连接 ``` 在关闭连接之后,连接池中的连接也就会被自动清理和释放,定时器也就不再需要执行了。需要注意的是,手动关闭连接池可能会影响到应用程序中其他部分对数据库的访问,因此建议谨慎操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值