정의
이벤트 체인(event chain)은 두 시점 사건 사이의 인과 관계를 기술하는 요소이며, 앞의 사건이 자극(stimulus), 뒤의 사건이 응답(response) 역할을 맡는다. 종단 간 타이밍 제약은 자극이 일어난 때부터 대응하는 응답이 일어난 때까지 흐른 시간에 걸린다.[1]
차량에서 시간 제약이 걸리는 대상이 태스크 하나가 아니라는 점은 실시간 시스템에서 다뤘다. 물리적 자극이 센서로 들어와 여러 컴포넌트와 태스크, 때로는 여러 ECU를 지나 액추에이터에 닿기까지의 경로 전체가 판정 대상이므로, 분석은 소프트웨어 컴포넌트와 태스크의 경계를 가로질러 이뤄져야 한다. 이 페이지는 그 경로를 어떻게 기술하고 어떻게 쪼개는지를 다룬다.
이벤트 체인과 구간
이벤트 체인은 다시 이벤트 체인으로 쪼개진다. 체인의 세그먼트(segment)도 그 자체가 이벤트 체인이므로 원하는 만큼 다시 쪼갤 수 있고, 쪼개는 방향과 합치는 방향 둘 다 가능하다.[1]
위에서 아래로 가는 쪽에서는 먼저 시스템의 시간 임계 경로를 식별해 자극과 응답을 잇는 체인 하나로 기술하고, 거기에 최대 지연 제약으로 시간 예산을 건다. 그다음 그 체인을 세그먼트들로 나누면 예산도 함께 나뉜다. 아래에서 위로 가는 쪽에서는 이미 타이밍 기술을 갖춘 컴포넌트들을 조립하고, 한 체인의 응답이 다음 체인의 자극이 되도록 이어 붙인 뒤, 그 열을 세그먼트로 삼는 상위 체인을 정의한다. 어느 방향이든 규칙은 같다 — 세그먼트 예산의 합이 상위 체인의 예산을 넘지 않아야 한다.
쪼개고 합치는 일은 소프트웨어 컴포넌트 계층을 따라 할 수도 있지만 반드시 그 계층을 따를 필요는 없다. 목적은 타이밍 기술의 세밀도를 올리거나 내리는 것이다.
예산을 나누는 규칙은 한 사슬 안에서만 닫혀 있지만, 사슬이 실제로 달성하는 지연은 그 사슬만으로 정해지지 않는다. 응답 시간은 실행 시간에 더해 공유 자원에 대한 동시 접근에서 오는 항 — 블로킹과 지터 — 을 담고, 종단 간 응답 시간은 사슬을 이루는 실행 단위들의 응답 시간 위에 쌓인다. 그래서 어떤 소프트웨어 갱신이 다른 인과 사슬에 속하더라도 스케줄링이 바뀌면 이 사슬의 응답 시간이 달라지고, 기능적 관계가 전혀 없는 두 컴포넌트라도 같은 코어에 통합되면 타이밍 의존성이 생겨 최악 응답 시간을 밀어 올릴 수 있다.[2]
부하와 응답 시간의 상관
자원 부하와 최악 응답 시간의 상관은 작다. 부하가 높아도 전체 응답 시간이 짧은 예가 있고, 부하가 낮되 변동이 크면 응답 시간이 긴 예가 있다.[2] 사슬끼리 잠식하는 것은 부하 총량이 아니라 스케줄 위의 간섭이다.
타이밍 뷰
같은 사슬이라도 어느 추상 수준에서 보느냐에 따라 붙일 수 있는 사건이 다르다. 규격은 다섯 개의 뷰를 두고 각 뷰가 담을 수 있는 타이밍 기술을 제한한다.[1]
| 뷰 | 붙는 대상 | 다루는 것 |
|---|---|---|
| VFB | 컴포넌트 컴포지션 | 물리적 분산을 무시한 수준의 종단 간 제약. 물리 센서·액추에이터를 포함한 제약을 개발 초기에 형식화한다 |
| SW-C | 컴포넌트의 내부 거동 | VFB 뷰에서 블랙박스였던 컴포넌트 안, runnable의 활성화·시작·종료 |
| 시스템 | 시스템 기술 | 컴포넌트의 ECU 배치와 그 결과로 만들어지는 통신 매트릭스 |
| 기본 소프트웨어 | 기본 소프트웨어 모듈의 내부 거동 | 모듈 엔티티의 활성화·시작·종료. 여러 모듈로 이뤄진 스택이나 여러 코어에 배치된 모듈은 컴포지션 단위로 따로 기술한다 |
| ECU | ECU 구성 값 모음 | 한 ECU 안에서 런타임 환경과 기본 소프트웨어를 가로지르는 데이터 흐름 |
구간 경계
사슬의 구간 경계는 관측 가능한 지점에 놓인다. 데이터가 계층과 태스크의 경계를 넘을 때마다 그런 지점이 하나씩 생기고, 지점 사이가 하나의 구간이 된다.
포트 수준에서 관측되는 지점은 두 가지다. 데이터를 내보내는 쪽에서는 송신 컴포넌트가 값을 성공적으로 내보내 런타임 환경의 통신 버퍼에서 전송을 기다리게 된 시점이고, 받는 쪽에서는 값이 성공적으로 전달되어 수신 컴포넌트가 쓸 수 있도록 런타임 환경의 버퍼에 놓인 시점이다. 컴포넌트 안으로 들어가면 runnable이 활성화된 시점, 시작된 시점, 종료된 시점이 각각 관측 지점이 된다.[1]
ECU 사이 구간에서는 통신 스택의 각 층이 경계를 만든다. 신호가 COM 모듈로 넘어간 시점과 신호가 런타임 환경에서 쓸 수 있게 된 시점, PDU가 인터페이스 층으로 넘어간 시점과 COM 모듈이 PDU를 수신한 시점, 프레임이 전송 큐에 들어간 시점과 프레임이 실제로 버스 위에 전송된 시점, 그리고 인터페이스 층이 프레임을 수신한 시점이 그것이다. 버스 위에서 프레임이 실제로 어떻게 나가는지는 CAN 프레임과 CAN 중재에서 다룬다.
입력 지연과 출력 지연
VFB 뷰에는 물리 센서나 액추에이터 같은 하드웨어 요소가 존재하지 않는다. 그래서 이 수준에서 하드웨어까지 포함한 제약을 걸려면 사건에 “외부” 표시를 달아, 그 사건이 센서-액추에이터 컴포넌트가 다루는 물리 장치에서 일어나는 것임을 나타낸다.[1]
입력 지연은 데이터가 입출력 하드웨어에서 생성된 시점부터 응용 컴포넌트가 쓸 수 있게 된 시점까지의 지연이고, 출력 지연은 응용 컴포넌트가 데이터를 내보낸 시점부터 입출력 하드웨어가 그것을 소비한 시점까지의 지연이다. 자극과 응답 양쪽에 이 표시를 달면 하드웨어 지연까지 포함한 종단 간 체인이 된다.
두 가지 지연 제약
같은 사슬에 걸 수 있는 지연 제약은 두 가지이고, 무엇을 기준점으로 삼느냐가 다르다.[1]
반응(reaction) 제약은 자극 쪽에서 앞을 본다 — 어떤 자극이 주어졌을 때 그에 대응하는 첫 응답까지의 구간을 제한한다. 자극에 대한 첫 반응이 중요한 응용에 쓰이며, 버튼을 누른 때부터 등이 켜질 때까지나 브레이크 페달을 밟은 때부터 제동이 걸릴 때까지가 전형적인 예다.
나이(age) 제약은 응답 쪽에서 뒤를 본다 — 어떤 응답이 주어졌을 때 그 응답을 만든 최신 자극이 얼마나 묵었는지를 제한한다. 값이 자극에서 응답에 이르는 경로 위에서 덮어써지는 것을 허용하고 마지막 값이 최선이라고 보는 관점이며, 액추에이터 값이 주기적으로 갱신될 때 그 입력값이 너무 낡지 않아야 한다는 요구가 여기 해당한다. 제어 공학 쪽에서 특히 중요하다.
두 제약이 갈리는 조건
오버샘플링도 언더샘플링도 없는 시스템에서는 나이와 반응이 같은 값이 된다. 두 이름이 갈리는 것은 주기가 다른 태스크가 사슬에 끼어 있을 때다. 다만 타이밍 제약은 구현과 무관하게 기술되어야 하므로, 구현을 아직 모르는 명세 시점에도 어느 쪽 의미론인지를 정해 두어야 한다. 최소 반응 지연과 최소 나이 지연은 언제나 같다.[1]
사슬 위의 개별 태스크를 계측할 때 쓰는 값들은 타이밍 파라미터에서, 실행 시점의 흔들림을 지연 계산에서 걷어 내는 모델은 논리 실행 시간에서 다룬다.