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  和
   485   486   487   488   489   490   491   492   493   494   495