Skip to content

[暂不合并]chore(service): add dde-thp-disable as ExecStartPre for all services#86

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

[暂不合并]chore(service): add dde-thp-disable as ExecStartPre for all services#86
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=-/usr/libexec/dde-thp-disable to disable THP before service startup
  2. Applied to deepin-service-manager, deepin-service-group@, and deepin-service-plugin@ services

Log: Add dde-thp-disable pre-start hook to all deepin service manager units

chore(service): 所有服务添加 dde-thp-disable 预启动命令

  1. 在所有 service 文件中添加 ExecStartPre=-/usr/libexec/dde-thp-disable,启动前关闭透明大页
  2. 同时作用于 deepin-service-manager、deepin-service-group@ 和 deepin-service-plugin@ 服务

Log: 为所有 deepin service manager 单元添加 dde-thp-disable 预启动钩子
PMS: TASK-390043

1. Added `ExecStartPre=-/usr/libexec/dde-thp-disable` to disable THP before service startup
2. Applied to deepin-service-manager, deepin-service-group@, and deepin-service-plugin@ services

Log: Add dde-thp-disable pre-start hook to all deepin service manager units

chore(service): 所有服务添加 dde-thp-disable 预启动命令

1. 在所有 service 文件中添加 `ExecStartPre=-/usr/libexec/dde-thp-disable`,启动前关闭透明大页
2. 同时作用于 deepin-service-manager、deepin-service-group@ 和 deepin-service-plugin@ 服务

Log: 为所有 deepin service manager 单元添加 dde-thp-disable 预启动钩子
PMS: TASK-390043
@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。

本次修改主要在三个 systemd 服务单元文件(.service.in)中增加了 ExecStartPre=-/usr/libexec/dde-thp-disable,目的是在启动 deepin-service-manager 之前执行一个禁用 THP(Transparent Huge Pages,透明大页)的脚本。

以下是我对该修改在语法逻辑、代码质量、代码性能和代码安全方面的审查意见及改进建议:

1. 语法逻辑

  • 语法正确性ExecStartPre=-/path/to/command 的语法是完全正确的。前缀 - 表示即使该命令执行失败(返回非零退出码),systemd 也不会中止服务的启动,这通常用于非关键的前置准备任务。
  • 逻辑重复与执行时机:三个服务文件都添加了相同的 ExecStartPre。如果这三个服务在同一个系统启动周期内被并发或依次拉起,dde-thp-disable 脚本可能会被重复执行多次。虽然这通常不会导致致命错误,但属于逻辑上的冗余。

2. 代码质量

  • 关注点分离:禁用 THP 属于系统级别的内核参数调整(全局性修改),而 .service 文件通常只应关注自身服务的启动逻辑。将系统级配置的修改散落在具体的业务服务中,违反了“关注点分离”的原则。
  • 可维护性:如果未来有其他服务也需要禁用 THP,或者不再需要禁用 THP,开发者需要去修改多个服务文件,容易遗漏,增加了维护成本。

3. 代码性能

  • 启动延迟ExecStartPre 是同步执行的,systemd 会等待其执行完毕后才继续执行 ExecStart。如果 dde-thp-disable 脚本执行较慢(例如包含网络请求、复杂的磁盘IO或长时间等待),会直接拖慢这三个服务的启动时间,进而影响系统的整体启动性能。
  • 并发启动受阻:如果这三个服务本可以并发启动,但由于都要执行同一个写磁盘(修改内核参数)的脚本,可能会导致磁盘IO冲突或脚本锁等待,降低并发效率。

4. 代码安全

  • 权限与攻击面:修改 THP 状态通常需要写入 /sys/kernel/mm/transparent_hugepage/enabled 或修改 sysctl 配置,这需要 root 权限。需确保 /usr/libexec/dde-thp-disable 脚本的权限被严格设置为仅 root 可写(如 0755 或更严格),防止被恶意篡改导致提权攻击。
  • 环境依赖:硬编码绝对路径 /usr/libexec/dde-thp-disable 是个好习惯(systemd 不依赖 PATH),但需确保该路径在所有部署环境中均存在,否则虽然前缀 - 保证了服务不会启动失败,但 THP 未被禁用可能会导致服务运行时出现隐蔽的性能问题(如内存延迟抖动)。

💡 改进建议

建议一:将系统级配置下沉到专用的 systemd 服务或 tmpfiles/snippet 中(强烈推荐)

禁用 THP 这种全局性的系统调优,最佳实践是创建一个独立的、最早启动的 systemd 服务,或者使用 systemd 的配置片段。这样只需维护一处代码,且不会阻塞业务服务的启动。

方案 A:创建独立的 early-boot 服务

# misc/dde-thp-disable.service
[Unit]
Description=Disable Transparent Huge Pages (THP) for DDE
DefaultDependencies=no
After=sysinit.target
Before=basic.target

[Service]
Type=oneshot
ExecStart=/usr/libexec/dde-thp-disable
RemainAfterExit=yes

[Install]
WantedBy=sysinit.target

然后在三个业务 service 文件中添加依赖关系,而不是直接执行脚本:

# 在 deepin-service-manager.service.in 等文件中修改
[Unit]
After=dde-thp-disable.service
Wants=dde-thp-disable.service

方案 B:通过 systemd 临时文件机制修改内核参数(更轻量)

# /etc/tmpfiles.d/dde-thp-disable.conf
# Path               Mode UID  GID  Age Argument
w /sys/kernel/mm/transparent_hugepage/enabled - - - - never

建议二:如果必须保留当前方案,请优化脚本使其幂等且高效

如果因为某些打包或架构原因必须采用当前的 ExecStartPre 方案,请确保 /usr/libexec/dde-thp-disable 脚本:

  1. 幂等性:多次执行不会报错或产生副作用。
  2. 极速返回:如果检测到 THP 已经是 disabled 状态,应立即退出,不消耗启动时间。
  3. 安全加固:在打包脚本(如 spec 或 debian rules)中,确保该脚本权限为 0755 且属主为 root:root

总结:当前的 Diff 在语法上没有问题,但在架构设计和性能考量上存在优化空间。推荐采用方案 A将“禁用 THP”与“启动业务服务”解耦,这更符合 systemd 的设计哲学,也能提升系统的启动性能和可维护性。

@mhduiy mhduiy changed the title chore(service): add dde-thp-disable as ExecStartPre for all services [暂不合并]chore(service): add dde-thp-disable as ExecStartPre for all services 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