1.开机时间优化方法
1.优化 uboot : uboot,boot-loader 减少按键等待时间, 动画加载
2.优化 kernel: 内核裁剪,功能裁剪, 减少kernel文件大小, 启动时间, 不需要的功能
3.优化 system: 系统与应用裁剪, 应用启动优化
项目方案使用: nvidia_jetson_orin开发板 + ubuntu20.04
本文主要优化ubuntu系统部分开机时间, 主要通过systemd service关闭不必要的自启动服务
2.查看自启动服务
sudo systemctl list-unit-files --type=service|grep enabled
accounts-daemon.service enabled enabled
alsa-restore.service static enabled
alsa-state.service static enabled
alsa-utils.service masked enabled
anacron.service enabled enabled
apache-htcacheclean.service disabled enabled
apache-htcacheclean@.service disabled enabled
apache2.service enabled enabled
apache2@.service disabled enabled
apparmor.service enabled enabled
apport-autoreport.service static enabled
apport-forward@.service static enabled
apport.service generated enabled
apt-daily-upgrade.service static enabled
apt-daily.service static enabled
apt-news.service static enabled
auth-rpcgss-module.service static enabled
autovt@.service enabled enabled
avahi-daemon.service enabled enabled
binfmt-support.service enabled enabled
bluetooth.service enabled enabled
bolt.service static enabled
brltty-udev.service static enabled
brltty.service disabled enabled
camera_link.service enabled enabled
chrony-dnssrv@.service static enabled
chrony.service enabled enabled
chronyd.service enabled enabled
clean-mount-point@.service static enabled
colord.service static enabled
configure-printer@.service static enabled
console-getty.service disabled disabled
console-setup.service enabled enabled
container-getty@.service static enabled
containerd.service enabled enabled
cpufrequtils.service generated enabled
cron.service enabled enabled
cryptdisks-early.service masked enabled
cryptdisks.service masked enabled
cups-browsed.service enabled enabled
cups.service enabled enabled
dbus-fi.w1.wpa_supplicant1.service enabled enabled
dbus-org.bluez.service enabled enabled
dbus-org.freedesktop.Avahi.service enabled enabled
dbus-org.freedesktop.hostname1.service static enabled
dbus-org.freedesktop.locale1.service static enabled
dbus-org.freedesktop.login1.service static enabled
dbus-org.freedesktop.ModemManager1.service enabled enabled
dbus-org.freedesktop.nm-dispatcher.service enabled enabled
dbus-org.freedesktop.resolve1.service enabled enabled
dbus-org.freedesktop.timedate1.service static enabled
dbus-org.freedesktop.timesync1.service masked enabled
dbus.service static enabled
debug-shell.service disabled disabled
dial5g.service enabled enabled
dial5gpre.service enabled enabled
display-manager.service static enabled
dmesg.service enabled enabled
docker.service enabled enabled
e2scrub@.service static enabled
e2scrub_all.service static enabled
e2scrub_fail@.service static enabled
e2scrub_reap.service enabled enabled
emergency.service static enabled
esm-cache.service static enabled
eth_rename.service enabled enabled
fio.service disabled enabled
fprintd.service static enabled
frpc.service enabled enabled
fstrim.service static enabled
fwupd-offline-update.service static enabled
fwupd-refresh.service static disabled
fwupd.service static enabled
gdm.service static enabled
gdm3.service static enabled
geoclue.service static enabled
getty-static.service static enabled
getty@.service enabled enabled
gpsd.service enabled enabled
gpsdctl@.service static enabled
grub-common.service enabled enabled
grub-initrd-fallback.service enabled enabled
haveged.service enabled enabled
hddtemp.service generated enabled
hdmi_io.service enabled enabled
hibraincentersync.service enabled enabled
hwclock.service masked enabled
iio-sensor-proxy.service static enabled
initrd-cleanup.service static enabled
initrd-parse-etc.service static enabled
initrd-switch-root.service static enabled
initrd-udevadm-cleanup-db.service static enabled
ippusbxd@.service static enabled
irqbalance.service enabled enabled
isc-dhcp-server.service disabled enabled
isc-dhcp-server6.service disabled enabled
jtop.service enabled enabled
kerneloops.service enabled enabled
keyboard-setup.service enabled enabled
kmod-static-nodes.service static enabled
kmod.service static enabled
l4t-rootfs-validation-config.service enabled enabled
lightdm.service static enabled
limit_rustdesk_cpu.service enabled enabled
lm-sensors.service enabled enabled
loadcpufreq.service generated enabled
man-db.service static enabled
mcp2518_ctrl.service enabled enabled
ModemManager.service enabled enabled
modprobe@.service static enabled
mosquitto.service enabled enabled
motd-news.service static enabled
network-manager.service enabled enabled
networkd-dispatcher.service enabled enabled
NetworkManager-dispatcher.service enabled enabled
NetworkManager-wait-online.service disabled enabled
NetworkManager.service enabled enabled
nfs-common.service masked enabled
nfs-config.service static enabled
nfs-idmapd.service static enabled
nfs-utils.service static enabled
nv-l4t-bootloader-config.service enabled enabled
nv-l4t-usb-device-mode-runtime.service linked enabled
nv-l4t-usb-device-mode.service enabled enabled
nv-late-init.service enabled enabled
nv-oem-config-debconf@.service disabled enabled
nv-oem-config-gui.service disabled enabled
nv-oem-config.service enabled enabled
nv-tee-supplicant.service enabled enabled
nv.service enabled enabled
nv_nvsciipc_init.service enabled enabled
nvargus-daemon.service enabled enabled
nvfancontrol.service enabled enabled
nvfb-early.service enabled enabled
nvfb-udev.service enabled enabled
nvfb.service enabled enabled
nvgetty.service enabled enabled
nvmemwarning.service enabled enabled
nvphs.service enabled enabled
nvpmodel.service enabled enabled
nvpower.service enabled enabled
nvramoopsconfig.service enabled enabled
nvs-service.service enabled enabled
nvweston.service enabled enabled
nvwifibt.service static enabled
nvzramconfig.service enabled enabled
ondemand.service disabled enabled
openvpn-client@.service disabled enabled
openvpn-server@.service disabled enabled
openvpn.service enabled enabled
openvpn@.service disabled enabled
packagekit-offline-update.service static enabled
packagekit.service static enabled
periodic_sweeper_task.service enabled enabled
plymouth-halt.service static enabled
plymouth-kexec.service static enabled
plymouth-log.service static enabled
plymouth-poweroff.service static enabled
plymouth-quit-wait.service static enabled
plymouth-quit.service static enabled
plymouth-read-write.service static enabled
plymouth-reboot.service static enabled
plymouth-start.service static enabled
plymouth-switch-root.service static enabled
plymouth.service static enabled
polkit.service static enabled
portmap.service enabled enabled
pppd-dns.service enabled enabled
procps.service static enabled
pulseaudio-enable-autospawn.service masked enabled
quotaon.service static enabled
rc-local.service static enabled
rc.service masked enabled
rcS.service masked enabled
rescue.service static enabled
resolvconf-pull-resolved.service static enabled
resolvconf.service enabled enabled
rospowerup.service disabled enabled
rpc-gssd.service static enabled
rpc-statd-notify.service disabled enabled
rpc-statd.service disabled enabled
rpc-svcgssd.service static enabled
rpcbind.service enabled enabled
rsync.service enabled enabled
rsyslog.service enabled enabled
rtkit-daemon.service disabled enabled
rustdesk.service enabled enabled
saned.service masked enabled
saned@.service indirect enabled
serial-getty@.service indirect enabled
setvtrgb.service enabled enabled
smartd.service enabled enabled
smartmontools.service enabled enabled
snapd.aa-prompt-listener.service enabled enabled
snapd.apparmor.service enabled enabled
snapd.autoimport.service enabled enabled
snapd.core-fixup.service enabled enabled
snapd.failure.service static enabled
snapd.recovery-chooser-trigger.service enabled enabled
snapd.seeded.service enabled enabled
snapd.service enabled enabled
snapd.snap-repair.service static enabled
snapd.system-shutdown.service enabled enabled
speech-dispatcher.service disabled enabled
speech-dispatcherd.service disabled enabled
spice-vdagent.service indirect enabled
spice-vdagentd.service indirect enabled
ssh.service enabled enabled
ssh@.service static enabled
sshd.service enabled enabled
sudo.service masked enabled
switcheroo-control.service enabled enabled
syslog.service enabled enabled
sysstat.service enabled enabled
system-update-cleanup.service static enabled
systemd-ask-password-console.service static enabled
systemd-ask-password-plymouth.service static enabled
systemd-ask-password-wall.service static enabled
systemd-backlight@.service static enabled
systemd-binfmt.service static enabled
systemd-bless-boot.service static enabled
systemd-boot-check-no-failures.service disabled enabled
systemd-boot-system-token.service static enabled
systemd-exit.service static enabled
systemd-fsck-root.service enabled-runtime enabled
systemd-fsck@.service static enabled
systemd-fsckd.service static enabled
systemd-halt.service static enabled
systemd-hibernate-resume@.service static enabled
systemd-hibernate.service static enabled
systemd-hostnamed.service static enabled
systemd-hwdb-update.service static enabled
systemd-hybrid-sleep.service static enabled
systemd-initctl.service static enabled
systemd-journal-flush.service static enabled
systemd-journald.service static enabled
systemd-journald@.service static enabled
systemd-kexec.service static enabled
systemd-localed.service static enabled
systemd-logind.service static enabled
systemd-machine-id-commit.service static enabled
systemd-modules-load.service static enabled
systemd-network-generator.service disabled enabled
systemd-networkd-wait-online.service disabled enabled
systemd-networkd.service disabled enabled
systemd-poweroff.service static enabled
systemd-pstore.service enabled enabled
systemd-quotacheck.service static enabled
systemd-random-seed.service static enabled
systemd-reboot.service static enabled
systemd-remount-fs.service enabled-runtime enabled
systemd-resolved.service enabled enabled
systemd-rfkill.service static enabled
systemd-suspend-then-hibernate.service static enabled
systemd-suspend.service static enabled
systemd-sysctl.service static enabled
systemd-sysusers.service static enabled
systemd-time-wait-sync.service disabled enabled
systemd-timedated.service static enabled
systemd-timesyncd.service masked enabled
systemd-tmpfiles-clean.service static enabled
systemd-tmpfiles-setup-dev.service static enabled
systemd-tmpfiles-setup.service static enabled
systemd-udev-settle.service static enabled
systemd-udev-trigger.service static enabled
systemd-udevd.service static enabled
systemd-update-utmp-runlevel.service static enabled
systemd-update-utmp.service static enabled
systemd-user-sessions.service static enabled
systemd-volatile-root.service static enabled
ua-reboot-cmds.service enabled enabled
ua-timer.service static enabled
ubiquity.service enabled enabled
ubuntu-advantage.service enabled enabled
ubuntu-fan.service enabled enabled
udev.service static enabled
udisks2.service enabled enabled
upower.service disabled enabled
usb_modeswitch@.service static enabled
usbmuxd.service static enabled
user-runtime-dir@.service static enabled
user@.service static enabled
videofailedcheck.service enabled enabled
wacom-inputattach@.service static enabled
whoopsie.service enabled enabled
wpa_supplicant-nl80211@.service disabled enabled
wpa_supplicant-wired@.service disabled enabled
wpa_supplicant.service enabled enabled
wpa_supplicant@.service disabled enabled
x11-common.service masked enabled
xrdp-sesman.service enabled enabled
xrdp.service enabled enabled
3.部分服务service分析
accounts-daemon.service
用户登录和注销,会话管理,组管理 --使能自启动
bluetooth.service
蓝牙服务 --无蓝牙通信, 关闭自启动
wpa_supplicant.service
1.无线网络连接管理, wifi连接, 认证, 扫描等
2.支持多种安全协议,如 WPA、WPA2、WEP 等 — 无wifi模块,关闭自启动
ua-reboot-cmds.service
ubiquity.service
ubuntu-advantage.service
ubuntu-fan.service
whoopsie.service
ubuntu高级服务, 补丁更新, 错误报告 – 不需要, 关闭自启动
snapd.aa-prompt-listener.service
snapd.apparmor.service
snapd.autoimport.service
snapd.core-fixup.service
snapd.recovery-chooser-trigger.service
snapd.seeded.service
snapd.service
snapd.system-shutdown.service
snapd安装更新 – 使用apt命令即可, 关闭自启动
nv-l4t-bootloader-config.service
nv-l4t-usb-device-mode.service
nv-late-init.service
nv-oem-config.service
nv-tee-supplicant.service
nv.service
nv_nvsciipc_init.service
nvargus-daemon.service
nvfancontrol.service
nvfb-early.service
nvfb-udev.service
nvfb.service
nvgetty.service
nvmemwarning.service
nvphs.service
nvpmodel.service
nvpower.service
nvramoopsconfig.service
nvs-service.service
nvweston.service
nvzramconfig.service
jtop.service
nvidia jentson orin驱动与服务程序 --不做修改,保持原样
frpc.service
rustdesk.service
项目安装程序,用于远程调试 – 开发阶段需要; 正式版默认关闭,通过hmi UI开关使能
自启动详细分析
看文章顶部下载资源xlsx
4.停止开机服务service
1.批量禁止自启动服务
disable_service.list
apache2.service
binfmt-support.service
bluetooth.service
cups-browsed.service
cups.service
dbus-fi.w1.wpa_supplicant1.service
dbus-org.bluez.service
dial5g.service
dial5gpre.service
gpsd.service
ModemManager.service
mosquitto.service
openvpn.service
portmap.service
pppd-dns.service
rpcbind.service
rsync.service
snapd.aa-prompt-listener.service
snapd.apparmor.service
snapd.autoimport.service
snapd.core-fixup.service
snapd.recovery-chooser-trigger.service
snapd.seeded.service
snapd.service
snapd.system-shutdown.service
syslog.service
ua-reboot-cmds.service
ubiquity.service
ubuntu-advantage.service
ubuntu-fan.service
videofailedcheck.service
whoopsie.service
wpa_supplicant.service
2_disable_service.sh
#!/bin/bash
# 定义要处理的文件名
filename="disable_service.list"
# 读取文件并用 for 循环处理每一行
for line in $(cat "$filename"); do
echo "disable: $line"
sudo systemctl disable "$line" 2>/dev/null
done
文件结构: ls
2_disable_service.sh disable_service.list
停止服务 sudo ./2_disable_service.sh
disable: apache2.service
disable: binfmt-support.service
disable: bluetooth.service
disable: cups-browsed.service
disable: cups.service
disable: dbus-fi.w1.wpa_supplicant1.service
disable: dbus-org.bluez.service
disable: dial5g.service
disable: dial5gpre.service
disable: gpsd.service
disable: ModemManager.service
disable: mosquitto.service
disable: openvpn.service
disable: portmap.service
disable: pppd-dns.service
disable: rpcbind.service
disable: rsync.service
disable: snapd.aa-prompt-listener.service
disable: snapd.apparmor.service
disable: snapd.autoimport.service
disable: snapd.core-fixup.service
disable: snapd.recovery-chooser-trigger.service
disable: snapd.seeded.service
disable: snapd.service
disable: snapd.system-shutdown.service
disable: syslog.service
disable: ua-reboot-cmds.service
disable: ubiquity.service
disable: ubuntu-advantage.service
disable: ubuntu-fan.service
disable: videofailedcheck.service
disable: whoopsie.service
disable: wpa_supplicant.service
5.测试数据: 开机时间对比测试
测试1: systemd service记录开机时间
开机服务: /etc/systemd/system/liuj_uptime.service
[Unit]
Description=My custom script service
# 如果没有安装rustdesk, 去除下面这一行 After=rustdesk.service
After=rustdesk.service
[Service]
ExecStart=/workdir/uptime_test/liuj_uptime.sh
[Install]
# 在桌面程序服务启动之后, WantedBy=default.target 或 graphical.target
WantedBy=default.target
记录时间脚本 /workdir/uptime_test/liuj_uptime.sh
#!/bin/bash
uptime > /tmp/uptime.log
cat /proc/uptime >> /tmp/uptime.log
注: cat /proc/uptime
可以获取到毫秒级别的开机时间戳
目录结构: ls
/etc/systemd/system/liuj_uptime.service
/workdir/uptime_test/liuj_uptime.sh
使能liuj_uptime.service 开机自启
service="liuj_uptime.service"
cp $service /etc/systemd/system
sudo systemctl daemon-reload
sudo systemctl restart $service
sudo systemctl enable $service
使用nvidia_jetson_orin 开发板测试结果
重启: sudo reboot
重启之后: 查看开机时间 cat /tmp/uptime.log
01:54:12 up 0 min, 0 users, load average: 1.16, 0.25, 0.08
17.30 177.21
对比测试数据
默认开机时间
18.85
19.14
18.86
优化之后
17.50
17.90
17.61
测试2: 桌面启动程序记录时间
说明: 项目使用 HMI 显示机器人状态, 故项目统计的开机时间, 是HMI启动所需要时间
如果没有使用UI, HMI, 桌面管理, 测试仅做参考
ubuntu20.04 gnome桌面管理器, 在登录桌面之后, 启动程序配置如下
~/.config/autostart/my_test.desktop
[Desktop Entry]
Type=Application
Name=My Application
Exec=/workdir/uptime_test/liuj2_uptime.sh
Comment=Start My Application at startup
Terminal=false
Hidden=false
X-GNOME-Autostart-enabled=true
/workdir/uptime_test/liuj2_uptime.sh
#!/bin/bash
uptime > /tmp/uptime2.log
cat /proc/uptime >> /tmp/uptime2.log
登录桌面之后, 查看桌面启动需要时间cat /tmp/uptime2.log
01:54:20 up 0 min, 2 users, load average: 2.28, 0.52, 0.17
25.92 253.04
测试数据
未优化 | 优化自启动 | |||
---|---|---|---|---|
systemd 开机时间 | 桌面程序 开机时间 | systemd 开机时间 | 桌面程序 开机时间 | |
第1次 | 18.88 | 27.72 | 17.15 | 26.27 |
第2次 | 19.32 | 27.79 | 17.05 | 25.92 |
第3次 | 17.81 | 26.44 | 17.30 | 25.92 |
原始数据
cat /tmp/uptime.txt
cat /tmp/uptime2.txt
---------------------------------------->
默认开机数据
---------------------------------------->
第1次
01:54:12 up 0 min, 0 users, load average: 2.68, 0.56, 0.18
18.88 191.37
15:28:33 up 0 min, 2 users, load average: 4.32, 0.99, 0.33
27.72 260.06
第2次
01:54:13 up 0 min, 0 users, load average: 3.88, 0.81, 0.26
19.32 189.54
01:54:21 up 0 min, 3 users, load average: 4.35, 1.02, 0.34
27.79 260.07
第3次
01:54:12 up 0 min, 0 users, load average: 1.72, 0.36, 0.12
17.81 177.78
01:54:21 up 0 min, 2 users, load average: 2.66, 0.62, 0.20
26.44 252.18
---------------------------------------->
自启动服务优化之后
---------------------------------------->
第1次
01:54:12 up 0 min, 0 users, load average: 1.54, 0.33, 0.11
17.15 175.65
15:45:48 up 0 min, 2 users, load average: 2.36, 0.55, 0.18
26.27 253.13
第2次
01:54:12 up 0 min, 0 users, load average: 1.00, 0.21, 0.07
17.05 174.55
15:49:08 up 0 min, 2 users, load average: 2.13, 0.49, 0.16
25.92 249.97
第3次
01:54:12 up 0 min, 0 users, load average: 1.16, 0.25, 0.08
17.30 177.21
01:54:20 up 0 min, 2 users, load average: 2.28, 0.52, 0.17
25.92 253.04
测试结论
- 开机时间由1-2s优化
- 系统平均负载有0.50优化