我们正在分析用于控制系统软件的 PTP,并使用 2 台个人计算机的小型设置来测量 PTP 时钟同步的准确性,其中一台作为主机,另一台作为从机。我们目前的设置非常粗糙,我们还没有特级大师。问题是我们的准确度数字(正如我们目前测量的那样,可能不正确)与 PTP 协议声称的标准数字不匹配,并且变化幅度为 10。
作为分析的一部分,我们正在尝试硬件和软件时间戳,并尝试衡量两者的准确性。
我们正在使用 ptp4l 和 ph2sys v1.8 工具。我们当前的准确度测量基于 ptp4l 进程报告的主从偏移。(ptp4l 还报告路径延迟,我们目前不使用这些数字。这些数字在精度测量中是否有任何意义?)
在硬件时间戳中,我们从主设备获得了 >1000 纳秒的偏移量,这远大于 PTP H/W 时间戳约 50 ns 的预期值。
对于软件时间戳,我们从主设备获得预期的偏移量 <100 ?s。

设置和执行的详细信息:
主控: Dell Latitude E6220(Intel 82579LM 千兆以太网控制器)- CentOS7
从机: Dell Latitude E6320(Intel 82579LM 千兆以太网控制器)- CentOS7
网络:速度为 1 GBPS 的以太网电缆
Ethtool 输出:
能力:
hardware-transmit (SOF_TIMESTAMPING_TX_HARDWARE)
software-transmit (SOF_TIMESTAMPING_TX_SOFTWARE)
hardware-receive (SOF_TIMESTAMPING_RX_HARDWARE)
software-receive (SOF_TIMESTAMPING_RX_SOFTWARE)
software-system-clock (SOF_TIMESTAMPING_SOFTWARE)
hardware-raw-clock (SOF_TIMESTAMPING_RAW_HARDWARE)
Run Code Online (Sandbox Code Playgroud)
PTP 硬件时钟:0
硬件传输时间戳模式:
off (HWTSTAMP_TX_OFF)
on (HWTSTAMP_TX_ON)
Run Code Online (Sandbox Code Playgroud)
硬件接收过滤器模式:
none (HWTSTAMP_FILTER_NONE)
all (HWTSTAMP_FILTER_ALL)
ptpv1-l4-sync (HWTSTAMP_FILTER_PTP_V1_L4_SYNC) …Run Code Online (Sandbox Code Playgroud) 我们正在使用RedisPubSubReactiveCommands并调用Lettuce 的subscribe和observeChannels方法。
如果发布者速度快而订阅者速度慢,则如何处理背压?\n由于发布者和订阅者在 Redis 中是独立的,因此无法减慢生产者的速度。鉴于这一事实,以下哪种理解是正确的?
\n\n数据是否会在应用程序端被丢弃(生菜会丢弃它),具体取决于 所OverflowStrategy采取的方式observeChannels? \n如果是这种情况,则效率非常低,因为数据从 Redis 服务器一路传输到应用程序,从而产生不必要的网络流量。
Lettuce是否向客户端的TCP层传递反压,那么应用程序\xe2\x80\x99不会收到任何东西,但TCP缓冲区将满。看看这个Github 提交,这似乎是实现。\n但我不明白的是,OverflowStrategy提供的内容做了什么?
是否将背压一路传递到Redis服务器,从而减少网络流量。在我看来,这是最有效的解决方案。\n我不\xe2\x80\x99不认为这是Redis/Lettuce的行为。不这样的原因可能是什么?
任何人都可以帮助我们形成正确的理解吗?
\n我正在使用kafka-clients库来集成Kafka和Scala应用程序.并且发现很难理解,如何以及何时在经纪人和生产者/消费者之间建立TCP连接.
请核实我对以下几点的理解 -
(1)在初始化KafkaProducer实例时没有建立TCP连接.
val producer = new KafkaProducer[String, String](properties)
Run Code Online (Sandbox Code Playgroud)
对于KafkaConsumer来说也是如此.
val consumer = new KafkaConsumer[String, String](properties)
Run Code Online (Sandbox Code Playgroud)
(2)在向Broker生成记录时建立第一个TCP连接(Broker和Producer之间).
producer.send(record1)
Run Code Online (Sandbox Code Playgroud)
(3)send()从同一个Producer到同一个Broker的后续调用将共享相同的TCP连接,而不管主题如何.
producer.send(record2)
Run Code Online (Sandbox Code Playgroud)
(4)对于Consumer,在轮询主题(而不是订阅)时建立第一个TCP连接.
val records = consumer.poll(timeout)
Run Code Online (Sandbox Code Playgroud)
(5)同一个消费者对同一个Broker的后续调用共享相同的连接.
apache-kafka ×1
backpressure ×1
ieee ×1
lettuce ×1
measurement ×1
ptp ×1
reactive ×1
redis ×1
scala ×1
tcp ×1
time ×1