[System Monitor] 网络实时速率/累计流量显示单位错误
Tofloor
poster avatar
150******85
deepin
2026-10-18 04:27
Author

摘要

最新正式版中,网络实时速率与累计流量在多处入口显示单位/数值错误:基于字节的速率被 ×8 后按 bit 单位(b/Kb/Mb/s)显示,导致显示数值比真实字节速率放大 8 倍;而顶栏插件按钮/悬浮提示按字节(KB/s)显示,两处入口口径互相矛盾。

详情见:https://github.com/linuxdeepin/deepin-system-monitor/issues/585

网络实时速率/累计流量显示单位错误:字节值×8 按 bit 显示(数值放大8倍),且顶栏与主窗口口径不一致

用户实测现象

  • 真实下载速率约 128 KB/s 时,界面显示约 1.0 Mb/s;约 1 MB/s 时显示约 8.0 Mb/s(即"本应 KB 级却显示 MB 级")。
  • 主窗口 / 顶栏弹窗显示 Kb/s、Mb/s(bit),而顶栏插件图标+悬浮提示显示 KB/s(byte),同一速率两处不一致。

根因(v6.5.47 代码证据)

数据层单位正确(字节/秒,且采样间隔除法正确):

  • deepin-system-monitor-main/system/net_info.cpp:157-158
    m_recvBps = rxdiff / interval;   // Bps
    m_sentBps = txdiff / interval;
    
  • deepin-system-monitor-main/system/netif_info_db.cpp:98-99
    qreal recv_bps = rxdiff / interval;   // Bps
    

展示层把字节值 ×8 后交给 bit 单位格式化函数:

  • deepin-system-monitor-main/common/common.cpp:379-401 formatUnit_net() —— 输入按 bit 处理,后缀 b/Kb/Mb/…,1024 进制。
  • deepin-system-monitor-main/common/common.h:112-126 —— SizeUnit(字节语义)与 UnitSuffixnet[]={"b","Kb","Mb",…}(bit 后缀)并用,语义错位。

调用点(字节×8 → bit 显示):

  • network_monitor.cpp:217,219,222,224
  • compact_network_monitor.cpp:159,161,164,166
  • datadealsingleton.cpp:74-77(顶栏弹窗)
  • netif_item_view_widget.cpp:186-187
  • netif_summary_view_widget.h:342,372
  • process_table_model.cpp:300,303
  • user_page_widget.cpp:233,235,249,251

口径不一致:顶栏插件反而用字节(KB/s):

  • deepin-system-monitor-plugin/gui/monitor_plugin.cpp:267-276(autoRateUnits,1024 进制,字节单位;悬浮提示 systemmonitortipswidget.cpp 显示 KB/s)。

走势图坐标轴错位(字节值配 bit 后缀):

  • chart_view_widget.cpp:52,85,128 —— 坐标轴用 formatUnit_net(m_maxData,…)(bit 后缀),而数据点是字节(netif_item_view_widget.cpp:181-182)。

复现(算法级)

复刻 formatUnit_net 并应用 byte×8:

真实 128 KB/s  -> 显示 "1024.0 Kb/s"(量级变 MB)
真实 500 KB/s  -> 显示 "3.9 Mb/s"
真实 1 MB/s    -> 显示 "8.0 Mb/s"

预期

实时速率与累计流量应使用统一、一致的单位(建议字节/s,即 KB/s,与顶栏插件、磁盘/内存分区一致)。若确有意展示 bit,则应使用正确基数(1000)且全入口一致。

修复方向(供确认)

统一为字节/s:去除各调用点 *8 并改用字节口径(formatUnit_memory_disk(...) 或新增字节型网络格式化函数),同时修复走势图坐标轴单位。(备选:保留 bit 但全入口用 1000 进制。)

版本说明

该问题在 6.0.24 / 6.5.40 / 6.5.47 均存在(非最新正式版新引入,属长期存在的展示层单位换算缺陷)。


(本报告为只读代码审计 + 算法级复现,未对源码做任何修改。)

Reply Favorite View the author
All Replies

No replies yet