본문 바로가기

Study Information Technology

시스템 부팅 속도를 최적화하기 위한 systemd 병렬 부팅 활용법

728x90
반응형

시스템 부팅 속도를 최적화하기 위한 systemd 병렬 부팅 활용법

Overview

systemd는 리눅스 시스템에서 서비스 및 프로세스의 초기화와 관리를 담당하는 시스템 및 서비스 관리자입니다. systemd는 기존의 초기화 시스템을 대체하며, 병렬 부팅(parallel booting)을 통해 시스템 시작 시간을 크게 단축시킬 수 있는 강력한 기능을 제공합니다. 이 글에서는 systemd를 활용하여 병렬 부팅을 설정하고 최적화하는 방법에 대해 자세히 설명하겠습니다. 병렬 부팅을 활성화하면 여러 서비스가 동시에 시작되어 시스템의 부팅 속도가 빨라지기 때문에, 이를 최적화하는 방법은 시스템 성능을 향상시키는 데 매우 중요합니다.

systemd와 병렬 부팅

1. systemd란 무엇인가?

systemd는 리눅스 시스템의 부팅 과정에서 발생하는 각종 초기화 작업을 관리하는 데 사용됩니다. 리눅스 시스템에서는 부팅 시 여러 서비스가 순차적으로 시작되며, 이로 인해 시간이 많이 소요됩니다. systemd는 이러한 서비스들을 병렬로 시작할 수 있도록 설계되어 있어, 시스템 부팅 시간을 단축할 수 있습니다. 또한, 서비스 의존성을 정의하고, 실패한 서비스에 대한 처리를 자동으로 할 수 있는 강력한 기능을 제공합니다.

2. 병렬 부팅(parallel booting)의 개념

일반적으로 리눅스 시스템은 여러 서비스들이 순차적으로 실행됩니다. 예를 들어, 네트워크 서비스가 시작된 후에야 다른 서비스들이 네트워크를 사용할 수 있게 되는 식이죠. 이런 순차적인 처리 방식은 부팅 시간이 길어지는 주된 원인 중 하나입니다. systemd는 각 서비스의 의존성을 분석하고, 서로 독립적인 서비스는 병렬로 실행할 수 있도록 최적화할 수 있습니다.

병렬 부팅을 통해 여러 서비스가 동시에 시작되기 때문에, 부팅 속도가 개선됩니다. 예를 들어, 네트워크 서비스와 로그 서비스가 서로 의존하지 않다면, 이 두 서비스를 병렬로 실행할 수 있습니다.

3. 병렬 부팅 활성화 방법

리눅스 시스템에서 systemd를 사용하여 병렬 부팅을 활성화하려면, 먼저 몇 가지 설정을 확인하고 수정할 필요가 있습니다. 기본적으로 systemd는 병렬 실행을 지원하지만, 그 범위와 효율성은 서비스의 의존성 설정에 따라 달라집니다.

a. systemd 병렬 부팅 설정 확인

systemdSystemd의 병렬 부팅을 기본적으로 사용하도록 설정되어 있습니다. 이를 확인하려면 /etc/systemd/system.conf 파일을 열어야 합니다. 해당 파일에서 DefaultDependenciesMaxParallelJobs 같은 설정을 확인하고, 병렬 부팅 최적화를 위해 조정할 수 있습니다.

  1. /etc/systemd/system.conf 파일 열기:
sudo nano /etc/systemd/system.conf
  1. DefaultDependencies 설정 변경:

DefaultDependencies 설정이 yes로 되어 있으면, 기본 의존성이 설정되어 병렬 부팅이 최적화되지 않기 때문에, 이를 no로 변경할 수 있습니다.

# DefaultDependencies=yes
DefaultDependencies=no
  1. MaxParallelJobs 설정:

MaxParallelJobs는 병렬로 실행할 수 있는 최대 서비스 수를 지정합니다. 기본값은 1로 설정되어 있을 수 있습니다. 이를 늘리면 시스템에서 병렬로 실행하는 서비스 수가 증가하여 부팅 속도가 개선됩니다.

# MaxParallelJobs=1
MaxParallelJobs=4

b. 서비스 의존성 최적화

병렬 부팅을 더 효과적으로 만들기 위해서는 각 서비스 간의 의존성 설정을 적절하게 조정하는 것이 중요합니다. systemd는 각 서비스가 의존하는 다른 서비스들을 정의하고 있으며, 이를 통해 서비스 간의 순서를 결정합니다.

  1. 서비스 파일 확인:

각 서비스의 의존성은 해당 서비스의 유닛 파일에 정의됩니다. 예를 들어, network.servicesyslog.service에 의존한다면, syslog가 시작된 후에 네트워크가 활성화되도록 설정될 것입니다. systemd는 이러한 의존성을 분석하여, 의존하지 않는 서비스들은 병렬로 시작할 수 있도록 합니다.

서비스 파일을 열어 의존성 설정을 확인할 수 있습니다. 예를 들어, network.service 파일을 확인하려면:

sudo nano /etc/systemd/system/network.service

유닛 파일 안에서 After=, Before= 등의 설정을 통해 의존성을 정의할 수 있습니다. 의존성이 없거나 독립적인 서비스들은 병렬로 실행할 수 있도록 유닛 파일을 조정합니다.

  1. 병렬 실행을 위한 서비스 최적화:

예를 들어, network.servicedbus.service는 독립적이라면, 두 서비스를 동시에 실행할 수 있도록 설정할 수 있습니다. 이를 위해 After= 또는 Before= 설정을 변경하여 의존성을 최소화합니다.

4. 병렬 부팅과 성능 최적화

병렬 부팅을 활성화하는 것만으로는 성능을 최적화할 수 없습니다. 각 서비스가 병렬로 실행되도록 하더라도, 서비스 자체가 비효율적으로 설정되어 있다면 여전히 부팅 속도에 영향을 미칠 수 있습니다.

a. 불필요한 서비스 비활성화

시스템이 시작할 때 자동으로 실행되는 불필요한 서비스를 비활성화하면 부팅 속도가 크게 개선됩니다. 예를 들어, 필요하지 않은 cups(프린터 서비스)나 avahi-daemon(네트워크 서비스)를 비활성화할 수 있습니다.

sudo systemctl disable cups
sudo systemctl disable avahi-daemon

b. 서비스 병렬화의 한계

모든 서비스가 병렬로 실행되는 것은 아니며, 일부 서비스는 반드시 순차적으로 실행되어야 하는 경우가 있습니다. 예를 들어, mount.service는 파일 시스템을 마운트하기 전에 다른 서비스들이 실행되면 문제가 발생할 수 있기 때문에 병렬로 실행할 수 없습니다. 이러한 의존성 문제를 해결하기 위해서는 각 서비스의 특성을 고려하여 최적화해야 합니다.

c. systemd-analyze로 성능 분석하기

systemd는 부팅 성능을 분석할 수 있는 도구인 systemd-analyze를 제공합니다. 이를 사용하면 시스템 부팅 중 각 서비스가 얼마나 시간이 걸리는지, 병렬 실행을 제대로 활용하고 있는지 등을 확인할 수 있습니다.

systemd-analyze

부팅 시간에 대한 자세한 정보를 보기 위해서는 다음과 같은 명령어를 사용할 수 있습니다:

systemd-analyze blame

이 명령어는 각 서비스가 부팅 중 얼마나 시간이 걸렸는지를 보여줍니다. 이 정보를 바탕으로 병렬 부팅 최적화가 잘 이루어졌는지, 어떤 서비스가 성능을 저하시켰는지 분석할 수 있습니다.

5. 오류와 해결책

병렬 부팅을 설정할 때 여러 가지 오류가 발생할 수 있습니다. 그중 일부는 서비스 간의 의존성 문제로 인해 발생합니다. 예를 들어, 네트워크 서비스가 제대로 시작되지 않으면 다른 서비스들도 영향을 받을 수 있습니다. 이러한 문제를 해결하려면 systemctl 명령어로 서비스 상태를 점검하고, 의존성 문제를 파악해야 합니다.

sudo systemctl status <서비스명>

부팅 중에 오류가 발생하면 journalctl 명령어를 사용하여 시스템 로그를 확인할 수 있습니다:

sudo journalctl -xe

이 명령어는 최근에 발생한 오류를 상세히 보여줍니다.

참고문서

728x90
반응형