Page 490 - 《软件学报》2024年第4期
P. 490
2068 软件学报 2024 年第 35 卷第 4 期
率) 和一些日志系统的参数也是十分重要的因素. 基于对丢包的原理分析, 可能影响丢包的参数有 socket_input 服
务端的 Socket 缓冲区空间 S s_buffe 和 r hilog_buffer 的空间 S h_buffer .
为了使本实验设计的写日志速率范围更加合理, 本文统计了在 OpenHarmony 操作系统中日志的使用情况, 以
下平均速率由 60 s 内的写入数据量计算, 峰值速率由 1 s 内的写入数据量计算: ① 在操作系统重新启动后, 保持无
操作状态, 此时日志写入平均速率约为 10 KB/s, 峰值可达 31 KB/s. ② 在操作系统 UI 界面被频繁点击 (约 1 次/s),
此时日志的写入平均速率约为 230 KB/s, 峰值可达 330 KB/s. ③ 在操作系统 UI 界面被频繁点击, 并且开启了数个
应用及其后台服务 (新闻、视频播放、应用市场、系统管理), 此时日志写入平均速率约为 500 KB/s, 峰值速率可
达为 720 KB/s.
基于上述数据可以看出, 当前 OpenHarmony 操作系统的写日志需求一般不超过 500 KB. 但是在选取研究的
写日志速率范围时, 需要考虑以下几点: ① 采集以上数据使用的系统、应用和服务均为发行版. 事实上在系统、
应用的开发和调试过程中, 为了提供更加详细的信息, 开发者会写入更多的日志语句, 写日志速率会更高. ② 有必
要考虑软件生态快速发展的趋势带来的写日志需求增加, 作为面向未来设计的日志系统, 有必要保留余量. 综上,
本文选择 V input ⩾ 500 KB/s 的写日志速率区间作为研究范围.
图 10(a) 描绘了在 Hi3516 开发板上, 采用系统默认的参数 S s_buffer =64 KB、S h_buffer =256 KB, 日志写入速率对
丢包率的影响. 可以看出, 在日志写入速率小于 700 KB/s 时, 无日志丢包现象; 而当日志写入速率进一步提升时,
丢包率开始逐渐增长; 当写入速率达到 1 730 KB/s 时, 丢包率已达到 60%.
80 80
S h_buffer =256 KB
S s_buffer =64 KB
70 70 S h_buffer =512 KB
S s_buffer =96 KB
S h_buffer =1024 KB
60 S s_buffer =128 KB 60 S h_buffer =2048 KB
S s_buffer =160 KB S h_buffer =2048 KB (RPI3B)
50 50 S h_buffer =2048 KB (DAYU200)
S s_buffer =192 KB
L (%) 40 S s_buffer =224 KB L (%) 40
S s_buffer =256 KB
30 30
20 20
10 10
0 0
400 600 800 1 000 1 200 1 400 1 600 1 800 400 600 800 1 000 1 200 1 400 1 600 1 800
V input (KB/s) V input (KB/s)
(a) 探究 S s_buffer 的影响 (S h_buffer =256 KB) (b) 探究 S h_buffer 的影响 (S s_buffer =256 KB)
t
图 10 HiLog 丢包率 L 随 V inpu 增长的变化趋势, 并探究 HiLog 参数的影响
为了分析丢包的成因, 通过调整 Socket 缓冲区的大小, 发现当 S s_buffe 从 r 64 KB 逐渐增大到 256 KB 时, 如
图 10(a) 所示, 丢包率没有明显的变化, 说明丢包可能并不是由于 Socket 缓冲区挤占导致的. 接下来固定 S s_buffer
为 256 KB, 调整 S h_buffe 从 r 256 KB 逐渐增大到 2 048 KB, 如图 10(b) 所示, 发现随 S h_buffe 的增大丢包率有明显的
r
下降, 在写入速率为 1 730 KB/s 时, 丢包率为 41%, 降幅 31.67%, 说明丢包与 hilog_buffer 有关.
经过理论分析, 丢包现象应当和 hilog_buffer 的覆盖写操作有关. 当 hilog_buffer 的双向循环链表空间已满时,
需要执行覆盖写操作后才可以继续进行数据写入: 即选取最旧的 5% 日志数据进行删除、移动公读指针和部分读
者指针到指定节点. 因此, 当日志写入速率过快, 就会频繁触发覆盖写操作, 消耗 CPU 资源, 当覆盖写速度低于写
入速度时, 就会产生日志的丢包情况. 通过增大 hilog_buffer 的大小, 可以增加每次覆盖写删除的日志数据量, 事实
上增加了覆盖写的速率, 进而减少丢包率. 同理, 更大的 hilog_buffer 可以在面对相同的写入速率时, 降低覆盖写的
频率, 降低 CPU 资源的消耗, 但是会增加内存资源的占用.
随后, 使用 S s_buffer =256 KB、S h_buffer =2048 KB 的参数配置, 分别在 CPU 性能更强的 RPI3B 和 DAYU200 开
发板上测试了 HiLog 在各种负载下的丢包情况, 结果如图 10(b) 所示. 可以看出, 相比 Hi3516 开发板, RPI3B 和