V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
wniming
V2EX  ›  Linux

升级到 fedora 44 后在 konsole 里打字时 cpu 占用很高的问题有 v 友也遇到了吗?

  •  
  •   wniming · 11h 32m ago · 637 views

    fedora 42 在 konsole 打字时 konsole 进程的 cpu 占用是正常的,在按着按键不松的情况下连续输入同一个字符 konsole 进程的 cpu 占用只有百分之十几,升级到 fedora 44 后就变成将近百分之百了,我用 perf record 分析了一下 cpu 占用高的原因,结果如下:

    Samples: 12K of event 'cpu_core/cycles/P', Event count (approx.): 10384837753
      Children      Self  Command          Shared Object                  Symbol
    +   91.73%     0.00%  konsole          konsole                        [.] _start
    +   91.73%     0.00%  konsole          libc.so.6                      [.] __libc_start_main@@GLIBC_2.34
    +   91.73%     0.00%  konsole          libc.so.6                      [.] __libc_start_call_main
    +   91.73%     0.00%  konsole          konsole                        [.] main
    +   91.73%     0.00%  konsole          libQt6Core.so.6.10.3           [.] QCoreApplication::exec()
    +   91.71%     0.02%  konsole          libQt6Core.so.6.10.3           [.] QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>)
    +   91.70%     0.00%  konsole          libQt6Core.so.6.10.3           [.] QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)
    +   91.39%     0.00%  konsole          libglib-2.0.so.0.8800.0        [.] g_main_context_iteration
    +   91.38%     0.01%  konsole          libglib-2.0.so.0.8800.0        [.] g_main_context_iterate_unlocked.isra.0
    +   91.25%     0.01%  konsole          libglib-2.0.so.0.8800.0        [.] g_main_context_dispatch_unlocked.lto_priv.0
    +   91.05%     0.02%  konsole          libQt6Core.so.6.10.3           [.] QCoreApplication::notifyInternal2(QObject*, QEvent*)
    +   90.96%     0.01%  konsole          libQt6Widgets.so.6.10.3        [.] QApplicationPrivate::notify_helper(QObject*, QEvent*)
    +   89.40%     0.02%  konsole          libQt6Widgets.so.6.10.3        [.] QWidget::event(QEvent*)
    +   89.35%     0.00%  konsole          libQt6Core.so.6.10.3           [.] postEventSourceDispatch(_GSource*, int (*)(void*), void*)
    +   89.35%     0.02%  konsole          libQt6Core.so.6.10.3           [.] QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*)
    +   89.09%     0.00%  konsole          libKF6XmlGui.so.6.25.0         [.] KXmlGuiWindow::event(QEvent*)
    +   88.94%     0.01%  konsole          libQt6Widgets.so.6.10.3        [.] QWidgetRepaintManager::paintAndFlush()
    +   64.37%    63.13%  konsole          libQt6Gui.so.6.10.3            [.] qt_memfillXX_avx2(unsigned char*, long long __vector(4), long long)
    +   64.37%     0.00%  konsole          libQt6Gui.so.6.10.3            [.] QPainter::fillRect(QRect const&, QColor const&)
    +   64.37%     0.00%  konsole          libQt6Gui.so.6.10.3            [.] QRasterPaintEngine::fillRect(QRectF const&, QSpanData*)
    +   55.10%     0.00%  konsole          libQt6Widgets.so.6.10.3        [.] QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, QFlags<QWidgetPrivate::DrawWidgetFlag>,
    +   54.99%     0.02%  konsole          libQt6Widgets.so.6.10.3        [.] QWidgetPrivate::sendPaintEvent(QRegion const&)
    +   48.05%     0.03%  konsole          libkonsoleprivate.so.26.04.0   [.] Konsole::TerminalDisplay::paintEvent(QPaintEvent*)
    +   32.81%     0.03%  konsole          libQt6Gui.so.6.10.3            [.] QBackingStore::beginPaint(QRegion const&)
    +   32.78%     0.00%  konsole          libQt6WaylandClient.so.6.10.3  [.] QtWaylandClient::QWaylandShmBackingStore::beginPaint(QRegion const&)
    +   16.03%     0.57%  konsole          libkonsoleprivate.so.26.04.0   [.] Konsole::TerminalPainter::drawContents(Konsole::Character*, QPainter&, QRect const&, bool, int, bool, QList<Konso
    +   11.89%     0.07%  konsole          libkonsoleprivate.so.26.04.0   [.] Konsole::TerminalPainter::drawTextCharacters(QPainter&, QRect const&, QString const&, Konsole::Character, QColor
    +   11.30%     0.12%  konsole          libQt6Gui.so.6.10.3            [.] QPainter::drawText(QPointF const&, QString const&, int, int)
    +    7.77%     0.00%  Thread (pooled)  libc.so.6                      [.] __GI___clone3
    +    7.77%     0.00%  Thread (pooled)  libc.so.6                      [.] start_thread
    +    7.77%     0.00%  Thread (pooled)  libQt6Core.so.6.10.3           [.] QThreadPrivate::start(void*)
    +    7.70%     0.24%  Thread (pooled)  libQt6Core.so.6.10.3           [.] QThreadPoolThread::run()
    +    6.72%     0.02%  konsole          libQt6Widgets.so.6.10.3        [.] QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList<QObject*> const&, int, QRegion const&, QPoint const&,
    +    6.48%     0.02%  konsole          libkonsoleprivate.so.26.04.0   [.] Konsole::TerminalScrollBar::paintEvent(QPaintEvent*)
    +    6.38%     0.01%  konsole          libQt6Widgets.so.6.10.3        [.] QScrollBar::paintEvent(QPaintEvent*)
    +    6.13%     0.01%  konsole          breeze6.so                     [.] Breeze::Style::drawComplexControl(QStyle::ComplexControl, QStyleOptionComplex const*, QPainter*, QWidget const*)
    +    6.10%     0.04%  konsole          breeze6.so                     [.] Breeze::Style::drawScrollBarComplexControl(QStyleOptionComplex const*, QPainter*, QWidget const*) const
    +    5.43%     0.03%  konsole          libQt6Widgets.so.6.10.3        [.] QCommonStyle::drawComplexControl(QStyle::ComplexControl, QStyleOptionComplex const*, QPainter*, QWidget const*) c
    +    5.40%     0.10%  konsole          libQt6Gui.so.6.10.3            [.] QPainterPrivate::drawTextItem(QPointF const&, QTextItem const&, QTextEngine*)
    +    5.31%     0.00%  konsole          breeze6.so                     [.] Breeze::Style::drawControl(QStyle::ControlElement, QStyleOption const*, QPainter*, QWidget const*) const
    +    5.28%     0.00%  konsole          breeze6.so                     [.] Breeze::Style::drawScrollBarSliderControl(QStyleOption const*, QPainter*, QWidget const*) const
    +    5.23%     0.02%  konsole          breeze6.so                     [.] Breeze::Style::drawScrollBarSliderControl(QStyleOption const*, QPainter*, QWidget const*) const [clone .part.0]
    +    5.12%     0.10%  konsole          libQt6Gui.so.6.10.3            [.] QRasterPaintEngine::drawTextItem(QPointF const&, QTextItem const&)
    +    4.93%     0.00%  konsole          libQt6Gui.so.6.10.3            [.] QPaintEngineEx::drawRoundedRect(QRectF const&, double, double, Qt::SizeMode)
    +    4.91%     0.18%  Thread (pooled)  libQt6Gui.so.6.10.3            [.] QRunnable::QGenericRunnable::Helper<blend_color_argb(int, QT_FT_Span_ const*, void*)::{lambda()#1}>::impl(QRunnab
    

    发现 qt_memfillXX_avx2 这个函数的 cpu 占用有 63.13%,而在 fedora 42 上用 perf record 分析 cpu 占用压根就没采集到这个函数,感觉应该是 fedora 44 的 bug ,我想给 fedora 反馈这个 bug 但不知道要怎么搞,有 v 友能帮我给 fedora 反馈一下吗?

    7 replies    2026-05-03 17:29:25 +08:00
    1una0bserver
        1
    1una0bserver  
       11h 13m ago via Android
    要不先清理下 config 再试试,有时是版本迁移配置没做好
    wniming
        2
    wniming  
    OP
       10h 48m ago
    @1una0bserver 应该不是配置的问题,我的 macbook air m2 前两天全新安装了 fedora 44, 也遇到一样的问题,用 perf record 分析发现下面这个函数的 cpu 占用有 11.78%

    qt_memfill32(unsigned int*, unsigned int, long long)

    不过和 x86 台式机有个区别,台式机是只要一开始按某个按键 cpu 就将近百分之百占用,但在 macbook 上 cpu 占用率是逐渐升高的,比如我按着 a 按键不松,屏幕上出现的 aaaaaaaaaaaaaaa 越多 cpu 占用越高,退回到 fedora 42 就没这个问题。
    wniming
        3
    wniming  
    OP
       10h 35m ago
    @1una0bserver 刚刚又测试了一下,在 macbook 上输入的 a 的数量达到 7000 个左右时 cpu 占用也 100%了,我是把 konsole 绑定到性能核心上测试的,在这种情况下用 perf record 得到的 cpu 占用高的函数和之前有点变化:

    + 18.95% 18.94% konsole libc.so.6 [.] __memset_zva64
    + 14.31% 14.30% konsole libQt6Gui.so.6.10.3 [.] qt_alphargbblit_argb32(QRasterBuffer*, int, int, QRgba64 const&, unsigned int const*, int, int, int, QClipData const*, bool)
    + 4.47% 4.46% konsole libQt6Gui.so.6.10.3 [.] qt_memfill32(unsigned int*, unsigned int, long long)

    仍然有 qt_memfill32 ,但占用没有 qt_alphargbblit_argb32 高
    wniming
        4
    wniming  
    OP
       10h 25m ago
    在 fedora 42 上,不管是 x86 台式机还是 macbook 都不会因为按的 aaaaaaaaaaaaaaaa 太多导致 cpu 占用率升高。
    1una0bserver
        5
    1una0bserver  
       10h 17m ago via Android   ❤️ 1
    @wniming 我是做客户端的,没写过 qt 。不过看上面的日志,有点像渲染时色彩计算的性能问题。
    根据我的经验,ui 上的性能问题很多时候不一定是最直接的这个函数问题,而更多的是调用这个函数的父 widget 逻辑编写有问题。当然也可能和新内核的性能优化有关,但一般不会影响特别大。所以我偏向于是 ui 布局或者渲染逻辑出了问题,造成高频重复渲染类似的问题了。
    建议你调整下背景透明度设置试试,还有拉下 konsole 最新 commit 编译下,再看看有没有这个问题。一般提 issue 还是以主线为准的,万一上游已经修复了呢。
    dxatgp02
        6
    dxatgp02  
       6h 25m ago via iPhone
    楼主我也是主用 kde-fc ,为什么不换 gpu 的终端?有什么说法吗?
    wniming
        7
    wniming  
    OP
       6h 7m ago
    @dxatgp02 konsole 的配置非常多,能满足我的全部需求,而且升级到 fedora 44 之前啥问题都没有,所以我没有需求去用 gpu 加速的终端,而且 konsole 是 kde 的默认终端,用 kde 桌面的人用 konsole 应该是最多的。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2372 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 15:37 · PVG 23:37 · LAX 08:37 · JFK 11:37
    ♥ Do have faith in what you're doing.