내가 아는데 것을체계서비스 간의 종속성을 단위 파일에 저장합니다. 시작 시 systemd가 어떻게 작동하는지 알아야 합니다.
특정 경로에서 유닛 파일을 로드하고 시작할 때마다 종속성을 다시 계산합니까?
아니면 이 종속성 그래프를 일부 파일에 저장하고 시작 시 해당 파일을 로드합니까?
(2)의 경우, sysctl add와 같은 일부 명령을 사용하여 종속성 그래프를 다시 계산할 수 있다고 생각합니다.
출처를 읽어보니 (1)입니다. 하지만 이는 성능에 나쁜 영향을 미치는 것 같습니다. (2)가 구현되지 않은 이유는 무엇입니까? 내가 잘못? 감사해요.
답변1
systemd의 종속성 그래프는 메모리에만 보관됩니다. 로드 단위 또는 해당 속성에 대한 (이진) 디스크 캐시가 없습니다.
하지만 이는 성능에 나쁜 영향을 미치는 것 같습니다.
systemctl daemon-reload
해당 항목이 실행되거나 호출될 때마다 유닛 파일이 완전히 다시 읽혀지고 종속성 그래프가 완전히 다시 계산됩니다.버스 모드( org.freedesktop.systemd1.Reload()
)는 동기식이다. 이 명령의 실행 시간에서 볼 수 있듯이 이 재계산은 성능에 어떤 영향도 미치지 않습니다.
답변2
두 개의 특정 경로에서 모든 유닛 파일을 로드합니다(보통/usr/lib/systemd/시스템그리고/etc/systemd/시스템).
systemd의 종속성 계산은 매우 빠릅니다. 이는 다른 대상(예: basic.target) 이후에 실행되는 multi-user.target과 같은 기본 대상을 정의하지만 multi-user.target.wants 디렉토리에 실제로 심볼릭 링크인 일부 유닛도 필요합니다.
유닛의 실행 순서를 파악하는 데는 몇 밀리초밖에 걸리지 않으므로 이를 위해 일종의 캐시가 필요하지 않습니다.