Skip to content

[暂不合并]fix(dde-dconfig-daemon): disable THP before service startup#150

Open
mhduiy wants to merge 1 commit into
linuxdeepin:masterfrom
mhduiy:thp
Open

[暂不合并]fix(dde-dconfig-daemon): disable THP before service startup#150
mhduiy wants to merge 1 commit into
linuxdeepin:masterfrom
mhduiy:thp

Conversation

@mhduiy
Copy link
Copy Markdown
Contributor

@mhduiy mhduiy commented May 25, 2026

  1. Added ExecStartPre to disable Transparent Huge Pages before dconfig daemon starts
  2. Uses dde-thp-disable script to prevent THP-related memory issues

Log: Disable THP before dde-dconfig-daemon startup

fix(dde-dconfig-daemon): 服务启动前禁用透明大页

  1. 新增 ExecStartPre 在 dconfig daemon 启动前禁用透明大页
  2. 通过 dde-thp-disable 脚本避免 THP 导致的内存问题

Log: 在 dde-dconfig-daemon 启动前禁用透明大页
PMS: TASK-390043

1. Added ExecStartPre to disable Transparent Huge Pages before dconfig daemon starts
2. Uses dde-thp-disable script to prevent THP-related memory issues

Log: Disable THP before dde-dconfig-daemon startup

fix(dde-dconfig-daemon): 服务启动前禁用透明大页

1. 新增 ExecStartPre 在 dconfig daemon 启动前禁用透明大页
2. 通过 dde-thp-disable 脚本避免 THP 导致的内存问题

Log: 在 dde-dconfig-daemon 启动前禁用透明大页
PMS: TASK-390043
Copy link
Copy Markdown

@sourcery-ai sourcery-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @mhduiy, you have reached your weekly rate limit of 500000 diff characters.

Please try again later or upgrade to continue using Sourcery

@mhduiy
Copy link
Copy Markdown
Contributor Author

mhduiy commented May 25, 2026

@deepin-ci-robot
Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: mhduiy

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@deepin-ci-robot
Copy link
Copy Markdown

deepin pr auto review

你好!我是CodeGeeX。我已仔细审查了你提供的 Git Diff 输入。本次修改是在 dde-dconfig-daemon.service 文件中添加了一行 ExecStartPre=-/usr/libexec/dde-thp-disable,意图在主服务启动前执行一个关闭 THP(Transparent Huge Pages,透明大页)的脚本。

以下是我从语法逻辑、代码质量、代码性能和代码安全四个维度提出的审查意见和改进建议:

1. 语法逻辑

  • 语法正确性:在 systemd 的 .service 文件中,ExecStartPre= 前面加上 - 符号是正确的语法,表示忽略该命令的退出状态码。如果该脚本不存在或执行失败,主服务 ExecStart 依然会被继续执行。这在处理可选依赖时是合理的。
  • 执行顺序逻辑ExecStartPre 会在 ExecStart 之前同步执行,逻辑上符合“在守护进程启动前准备环境”的意图。
  • 潜在逻辑风险:如果 /usr/libexec/dde-thp-disable 脚本执行时间过长,会阻塞主进程的启动。此外,如果该脚本意外崩溃(如收到 SIGKILL),systemd 默认会认为服务启动失败(除非使用了 - 前缀且 systemd 版本较新,或者配置了 FailureMode=)。

2. 代码质量

  • 可维护性与可读性:直接在 service 文件中硬编码绝对路径 /usr/libexec/dde-thp-disable 缺乏上下文注释。其他开发者或运维人员看到这行代码时,可能不清楚为什么要关闭 THP,以及这个脚本具体做了什么。
  • 改进建议
    • 添加注释:建议在 ExecStartPre 上方添加注释,说明为何需要禁用 THP(例如:是否因为 DConfig 守护进程在开启 THP 时存在内存访问延迟、Bug 或性能抖动?)。
    • 路径规范:确保该路径符合目标操作系统的 FHS (Filesystem Hierarchy Standard) 规范。/usr/libexec/ 在部分发行版中是合理的,但在 Debian/Ubuntu 等系统中,通常使用 /usr/lib/dde-dconfig-daemon/

3. 代码性能

  • 主服务启动延迟:如前所述,ExecStartPre 是同步阻塞的。每次服务启动(包括系统重启或服务崩溃重启),都会额外增加执行 /usr/libexec/dde-thp-disable 的时间开销。
  • THP 本身的性能影响:关闭 THP 通常是为了避免内存碎片导致的延迟抖动(这对于数据库或对延迟极度敏感的服务很常见)。但对于一个配置中心守护进程来说,关闭 THP 是否真的必要?如果是为了解决特定的性能抖动 Bug,这属于“Workaround(规避方案)”而非根本解决。
  • 改进建议
    • 评估是否可以通过修改内核参数(如 grub 配置中的 transparent_hugepage=never)在系统全局层面一次性关闭 THP,而不是每次服务启动时都去动态修改 /sys/kernel/mm/transparent_hugepage/enabled
    • 如果必须动态修改,确保 /usr/libexec/dde-thp-disable 脚本极其轻量,仅做必要的文件写入操作,避免在其中执行复杂的逻辑或循环。

4. 代码安全

  • 权限提升风险:systemd 在解析到 User=deepin-daemon 后,默认情况下 ExecStartPreExecStart 都会以 deepin-daemon 用户的身份执行。
    • 关键问题:修改系统的 THP 状态(通常是对 /sys/kernel/mm/transparent_hugepage/enabled 进行写操作)需要 root 权限。如果以普通用户 deepin-daemon 运行该脚本,大概率会因为 Permission denied 而失败(虽然加了 - 不会导致服务启动失败,但 THP 实际上并没有被关闭,导致这行配置形同虚设)。
  • 脚本篡改风险:如果 /usr/libexec/dde-thp-disable 的文件权限设置不当(如其他用户可写),攻击者可以替换该脚本,从而在服务启动前以 deepin-daemon 身份执行任意代码。
  • 改进建议
    • 解决权限问题:如果确实需要在此处关闭 THP,应在 ExecStartPre 前加上 + 符号(即 ExecStartPre=+-/usr/libexec/dde-thp-disable),这指示 systemd 以 root 用户身份运行该命令,而不受 User= 指令的影响。
    • 确保脚本安全:在打包和部署时,必须确保 /usr/libexec/dde-thp-disable 的属主为 root:root,权限为 0755 或更严格(如 0700),防止被恶意篡改。

综合修改建议

基于以上分析,建议将 Diff 修改如下:

[Unit]
Description=Deepin Dconfig Daemon
After=dbus.socket

[Service]
Type=dbus
User=deepin-daemon
BusName=org.desktopspec.ConfigManager

# Workaround: Disable THP to prevent potential performance latency spikes.
# The '+' prefix ensures this runs as root, as modifying THP requires admin privileges.
# The '-' prefix ignores errors if the script is missing or fails.
ExecStartPre=+-/usr/libexec/dde-thp-disable

ExecStart=/usr/bin/dde-dconfig-daemon
Environment=DSG_DATA_DIRS=/usr/share/dsg:/var/lib/linglong/entries/share/dsg

核心改动说明

  1. 添加了 + 前缀,确保脚本以 root 权限执行,否则修改 THP 的操作会因权限不足而静默失败。
  2. 增加了清晰的注释,解释了使用 +- 前缀的原因以及关闭 THP 的初衷,提高了代码的可维护性。

@mhduiy mhduiy changed the title fix(dde-dconfig-daemon): disable THP before service startup [暂不合并]fix(dde-dconfig-daemon): disable THP before service startup May 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants