# timeclock_sync
**Repository Path**: hixs/timeclock_sync
## Basic Information
- **Project Name**: timeclock_sync
- **Description**: 根据控制器 进行时钟对齐
- **Primary Language**: C++
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-10-29
- **Last Updated**: 2026-02-03
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
#### timeclock_sync是一个用于单机/多节点时间对齐的轻量级 C++ 项目。核心思路是用逻辑时钟(slope+offset)把原始单调时钟(TSC/steady clock)映射为“更准、更稳”的本地时间;配合控制器对新到达的测量样本做更新(好轮/坏轮策略、窗口化拟合等)。
### 依赖
| | 版本 |
|---------|------------------------------------|
| C++17 编译器 | GCC ≥ 9 / Clang ≥ 10 / MSVC ≥ 2019 |
| cmake | 3.18 |
| CPU | 支持 Invariant TSC |
### 编译
g++ -std=c++17 -O2 -pthread \
-Iinclude \
-Iinclude/json/include \
-Iinclude/eigen \
src/sim.cpp \
src/controller.cpp \
src/time_source.cpp \
-o timesync_sim \
-lrt -lstdc++fs
### 运行
cd timeclock_sync
./timesync_sim \
--bind \
--tau-ns \
--recv-window-ms \
--listen-port \
--name
### neighbors邻居结构与控制量求解
各个节点会每隔tau s 周期性的向邻居节点发送对齐报文res,邻居节点接收报文后会返回resp,源节点接收报文后,根据两报文内涵盖的t1,t2,t3,t4时间戳推测时延delay,并根据dalay以及时间戳估算邻居节点与源节点的误差。
每个节点均需要配置neighbors.json,具体结构如下:
{
"groups": [
{
"name": "grp6",
"peers": [
{ "ip": "11.11.11.10", "port": 5001 },
{ "ip": "11.11.11.12", "port": 5001 },
{ "ip": "11.11.11.13", "port": 5001 },
{ "ip": "11.11.11.14", "port": 5001 },
{ "ip": "11.11.11.15", "port": 5001 }
]
},
{...}
]
}
考虑分布式大场景,timeclock_sync支持配置多个邻居组,若邻居组name为neighbors1,则需要配置kzneighbors1.json作为其控制器。一个邻居组对应一个控制器
请将控制器以及邻居信息放入timeclock_sync/data目录下
### 误差总结
timeclock_sync会将每次对齐的信息记录在data/metrics.csv目录下
### 逻辑时间参数写入
timeclock_sync周期性维护一个一次函数的映射,将CPU中TSC计时器所读取的值R映射为逻辑时间L,通过𝐿 ≈ 𝑎 𝑅+ 𝑏
因此timeclock_sync将𝑎以及𝑏写入共享内存,并提供reader代码进行读取,详见仓库reader
**祝您使用愉快!**