# 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
**祝您使用愉快!**