initial commit
This commit is contained in:
commit
429a176559
59 changed files with 4097 additions and 0 deletions
5
content/2013/11/13/_index.md
Normal file
5
content/2013/11/13/_index.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
+++
|
||||
transparent = true
|
||||
sort_by = "date"
|
||||
paginate_by = 5
|
||||
+++
|
152
content/2013/11/13/fedora-boot-optimization.md
Normal file
152
content/2013/11/13/fedora-boot-optimization.md
Normal file
|
@ -0,0 +1,152 @@
|
|||
+++
|
||||
title = "Fedora Boot Optimization"
|
||||
date = 2013-11-13T10:12:04+00:00
|
||||
+++
|
||||
This article shows how to reduce boot time for Fedora 17, but the recipe can also be applied to 18, 19 and 20.
|
||||
|
||||
The target is to get a fast booting system with NetworkManager running and gdm displaying the login
|
||||
screen as fast as possible.
|
||||
|
||||
<!-- more -->
|
||||
|
||||
The system I use here is a Lenovo T420s (2x2x Intel(R) Core(TM) i5-2540M CPU @ 2.60GHz)
|
||||
with an INTEL SSDSA2BW160G3L harddrive.
|
||||
|
||||
First we choose a manual disk layout and use primary partitions and format them with ext4.
|
||||
In my case this results in:
|
||||
```sda1 ext4 /boot
|
||||
sda2 swap
|
||||
sda3 ext4
|
||||
```
|
||||
|
||||
After the first boot, setup of the user, etc. and 2 reboots (always reboot 2 times,
|
||||
before taking the measurement, because readahead needs to adapt to the changed boot process).
|
||||
First we update everything.
|
||||
```console
|
||||
$ sudo yum update
|
||||
```
|
||||
After the reboots, I get:
|
||||
```console
|
||||
$ systemd-analyze
|
||||
Startup finished in 1413ms (kernel) + 2911ms (initramfs) + 10593ms (userspace) = 14918ms
|
||||
```
|
||||
|
||||
Because I don't use any LVM, RAID or encrypted devices, I can safely turn off all nearly all
|
||||
`fedora-\*storage\*` services. To turn off these services, we use the `systemctl mask` command.
|
||||
A bonus with that mechanism is, that no rpm %post script turns them on automatically.
|
||||
```console
|
||||
$ cd /lib/systemd/system
|
||||
$ for i in fedora*storage* lvm2-monitor.* mdmonitor*.*; \
|
||||
do sudo systemctl mask $i; \
|
||||
done
|
||||
```
|
||||
On Fedora 17, it seems there are still some SysV initscripts left, so we turn them off:
|
||||
```console
|
||||
$ for i in livesys livesys-late spice-vdagentd;\
|
||||
do sudo chkconfig $i off;\
|
||||
done
|
||||
```
|
||||
|
||||
Seems like we saved half of the time in userspace:
|
||||
```console
|
||||
$ systemd-analyze
|
||||
Startup finished in 1640ms (kernel) + 6556ms (userspace) = 8197ms
|
||||
```
|
||||
|
||||
From now on, you really have to know what you are doing and how to revert your actions.
|
||||
To compare Fedora with e.g. Ubuntu, I will now turn off all services except NetworkManager.
|
||||
The result will be a Linux system without mail, firewall, printing, the abrt tools, avahi,
|
||||
some mountpoints, rsyslog, irqbalance, and selinux security.
|
||||
```console
|
||||
$ cd /lib/systemd/system
|
||||
$ for i in abrt*.service auditd.service avahi-daemon.* \
|
||||
bluetooth.* dev-hugepages.mount dev-mqueue.mount \
|
||||
fedora-configure.service fedora-loadmodules.service \
|
||||
fedora-readonly.service ip6tables.service \
|
||||
iptables.service irqbalance.service mcelog.service \
|
||||
rsyslog.service sendmail.service sm-client.service \
|
||||
sys-kernel-config.mount sys-kernel-debug.mount; do \
|
||||
sudo systemctl mask "$i"; \
|
||||
done
|
||||
```
|
||||
|
||||
To disable selinux (only for measurements!), edit `/etc/selinux/config` and add `selinux=0`
|
||||
to the kernel command line.
|
||||
|
||||
My `/etc/grub2.cfg` now looks like this:
|
||||
```
|
||||
linux /vmlinuz-3.3.7-1.fc17.x86_64 root=/dev/sda3 rootfstype=ext4 libahci.ignore_sss=1 raid=noautodetect selinux=0
|
||||
initrd /initramfs-3.3.7-1.fc17.x86_64.img
|
||||
```
|
||||
|
||||
Now we are really fast!
|
||||
```console
|
||||
$ systemd-analyze
|
||||
Startup finished in 1329ms (kernel) + 1596ms (userspace) = 2926ms
|
||||
```
|
||||
|
||||
I also like the idea of automounting (systemd's automount feature was an idea of mine :-).
|
||||
So I turn /boot in a "mount on demand" mountpoint. Also having /tmp as a tmpfs is one way to reduce
|
||||
disk activity (useful for e.g. a slow flash disk). My resulting /etc/fstab looks like this:
|
||||
```
|
||||
/dev/sda3 / ext4 defaults 1 1
|
||||
/dev/sda1 /boot ext4 noauto,comment=systemd.automount 1 2
|
||||
/dev/sda2 swap swap defaults 0 0
|
||||
tmpfs /tmp tmpfs defaults 0 0
|
||||
```
|
||||
|
||||
This only saved a little bit of time, but still:
|
||||
```console
|
||||
$ systemd-analyze
|
||||
Startup finished in 1342ms (kernel) + 1426ms (userspace) = 2769ms
|
||||
```
|
||||
|
||||
Because NetworkManager is started also by the graphical login target,
|
||||
I can remove it from the multi-user target and it will be started in parallel to the gdm login screen.
|
||||
```console
|
||||
$ sudo rm /etc/systemd/system/multi-user.target.wants/NetworkManager.service
|
||||
```
|
||||
|
||||
This will shave of a few milliseconds:
|
||||
```console
|
||||
$ systemd-analyze
|
||||
Startup finished in 1323ms (kernel) + 1279ms (userspace) = 2603ms
|
||||
```
|
||||
|
||||
To see the difference readahead makes for the system, I turn it off temporarily and reboot
|
||||
```console
|
||||
$ cd /lib/systemd/system
|
||||
$ for i in *readahead*; do sudo systemctl mask $i;done
|
||||
```
|
||||
|
||||
Which will give us:
|
||||
```console
|
||||
$ systemd-analyze
|
||||
Startup finished in 1336ms (kernel) + 1210ms (userspace) = 2547ms
|
||||
```
|
||||
|
||||
This time is a little bit misleading. Although it seems faster, the real time until the login screen
|
||||
is displayed is taking longer. So a fair comparison would involve a **stopwatch**.
|
||||
|
||||
To turn off plymouth, because we want speed and not eye candy, I remove plymouth completely
|
||||
and regenerate the initramfs to get rid of it.
|
||||
```console
|
||||
$ sudo yum remove 'plymouth*'
|
||||
$ sudo dracut -f
|
||||
```
|
||||
|
||||
After a reboot we get the stunning result of:
|
||||
```console
|
||||
$ systemd-analyze
|
||||
Startup finished in 612ms (kernel) + 499ms (initramfs) + 1330ms (userspace) = 2443ms
|
||||
```
|
||||
|
||||
The nice thing about `systemctl mask` is, that you can always unmask it via `systemctl unmask`
|
||||
and only enable those default services, which you really need.
|
||||
|
||||
Now, **turn selinux back on**, edit `/etc/selinux/config` and remove `selinux=0` from the kernel command line.
|
||||
You really don't want to trade some seconds for security!
|
||||
|
||||
Have fun and happy rebooting!
|
||||
|
||||
And don't forget to reboot twice to let the readahead optimization kick in!
|
17
content/2013/11/13/linux-howto-get-the-number-of-cpus.md
Normal file
17
content/2013/11/13/linux-howto-get-the-number-of-cpus.md
Normal file
|
@ -0,0 +1,17 @@
|
|||
+++
|
||||
title = "Linux: HOWTO get the number of CPUs"
|
||||
date = 2013-11-13T12:13:04+00:00
|
||||
+++
|
||||
```console
|
||||
$ getconf _NPROCESSORS_ONLN
|
||||
```
|
||||
returns the number of CPUs online.
|
||||
|
||||
<!-- more -->
|
||||
|
||||
Internally it is parsing
|
||||
`/sys/devices/system/cpu/online`, which can have the contents: `0-3,5,7-9`.
|
||||
|
||||
Better let getconf [do all the counting for you](https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/getsysstats.c#l127).
|
||||
|
||||
This is very useful, if you want to optimize the number of threads.
|
Loading…
Add table
Add a link
Reference in a new issue