GStreamer pwg: ch. 19 QoS
19. Quality Of Service (QoS)
실시간 성능의 측정 및 조절기능
- 실시간 성능
n pipeline clock에 상대적으로 측정됨
n 보통 sink에서 clock에 대해 buffer의 동기화 시 발생
버퍼가 늦게 sink로 도착할 시,
n i.e. running time이 lcock 보다 작을 시 -> QoS에 문제가 있음
QoS 문제 이유
n high CPU load
n network problem
n other resource problems (e.g., disk load, memory bottleneck)
QOS event
measurement 결과는 하나 이상의 upstream element의 datarate 조절에 사용됨
adjustment types
sink 상의 가장 최근의 관측 기반의 short time "emergency" corrections
sink의 trend의 관측 기반 long term ratre corrections
19.1. Measuring QoS
얼마나 늦게/빨리 오는지 측정
연속적인 두 개 buffer 수신 시간으로 processing time을 측정
보통 running average로 proportion을 (통계치를) 유지
QoS event는 upstream으로 전달
pipeline clock으로 buffer들을 동기화하는 element는 보통 current QoS를 측정
QOS event를 발생하기 위해 통계치를 유지
jitter 측정
sink로 들어가는 각각의 buffer에 대해 element는 late, early를 측정함
negative jitter
n early 도착
positive jitter
n late 도착
synchronizing element
processing time
n 2개의 연속적인 buffer의 수신간의 elapse time을 계산
n upstream element에 대해 buffer를 생성/처리하는데 걸리는 시간의 총 량
s 그래서 processing time이라 부름
proportion
n buffer의 duration과 processing time을 비교
n 얼마나 빠른 upstream이 data를 생성했는지 측정하기 위해서
n ex. upstream이 1초 분량을 buffer를 0.5초 내 에 생성할 수 있다면,
s 요구되는 속도의 두 배로 동작하는 것임
s 반면 2초라면, 너무 느리기에 synchronization을 유지할 수 없음
n 보통 running average를 가지고 proportion을 keep
자신의 성능도 측정
n 성능 문제가 upstream인지 자신인지 알아야 하기 때문
upstream으로 보낼 QOS event 생성을 위해서도 성능 측정
QoS event는 sink로 도착하는 각 buffer에 보내짐
19.2. Handling QoS
source pad가 QOS event를 event function으로 받음
QOS event는 data processing에 사용함
QoS value는 lock으로 보호해야함
[...] case GST_EVENT_QOS: { GstQOSType type; gdouble proportion; GstClockTimeDiff diff; GstClockTime timestamp; gst_event_parse_qos (event, &type, &proportion, &diff, ×tamp); GST_OBJECT_LOCK (decoder); priv->qos_proportion = proportion; priv->qos_timestamp = timestamp; priv->qos_diff = diff; GST_OBJECT_UNLOCK (decoder); res = gst_pad_push_event (decoder->sinkpad, event); break; } |
QoS values
proportion
timestamp
diff (= jitter)
correction types
short term correction
long term correction
19.2.1. Short term correction
timestamp와 jitter value를 가지고 shot term correction을 수행
jitter > 0 (late)
n 이전 buffer가 늦게 도착한 것임
n timestamp < timestamp + jitter
n timestamp + jitter 보다 작은 timestamp를 지닌 버퍼는 drop
s 현재 timestamp가 늦었으니, 이전것들은 모두 drop
buffer의 duration을 안다면 좀 더 정확히 계산 가능
timestamp + 2*jitter + duration
[...] GST_OBJECT_LOCK (dec); qos_proportion = priv->qos_proportion; qos_timestamp = priv->qos_timestamp; qos_diff = priv->qos_diff; GST_OBJECT_UNLOCK (dec); /* calculate the earliest valid timestamp */ if (G_LIKELY (GST_CLOCK_TIME_IS_VALID (qos_timestamp))) { if (G_UNLIKELY (qos_diff > 0)) { earliest_time = qos_timestamp + 2 * qos_diff + frame_duration; } else { earliest_time = qos_timestamp + qos_diff; } } else { earliest_time = GST_CLOCK_TIME_NONE; } /* compare earliest_time to running-time of next buffer */ if (earliest_time > timestamp) goto drop_buffer; [...] |
19.2.2. Long term correction
proportion 값의 의존하여 수행
이 값을 보고 사용하는 자원을 감소 시켜야 함
strategies
영구히 frame을 dropping 혹은 CPU나 BW를 감소
n 어떤 decoder의 경우 B frame들을 skip 할 수 있음
알고리즘의 복잡도 감소 혹은 lower quality processing 수행
n visual 혹은 audible glitches는 발생하지 말아야 함
lower quality source로 전환
n network BW 감소
특정 부분에 더 많은 CPU cycle 할당
n thread priority +
proportion이 ideal인 1.0으로 돌아 갈 때 element들은 다시 정상 processing rate로 복귀
19.3. Throttling
clock에 동기화 하는 element들은 throttle mode를 설정할 수 있는 property를 노출함
"특정" 시간 내에는 버퍼가 처리 되어야 한다는 것을 강제함
throttle mode
buffer간의 시간차는 설정가능한 throttle interval에 유지됨
n 효과적으로 buffer rate가 throttle interval 당 1개 buffer로 제한됨
n 이를 가지고 framerate를 제한할 수 있음
throttling mode
보통 sink에서만 구현됨
element가 throtting mode로 설정되면,
n throttle interval에 설정된 jitter를 지닌 QoS event를 upstream으로 전달해야함
n 이를 통해 upstream은 설정된 throttle interval 내에 남은 buffers를 skip할지 drop할지를 결정
proportion field
n 원하는 throttle interval을 얻기 위해 원하는 slowdown에 설정됨
n 구현은 QoS Throttle type을 사용
s QoS Throttle type: proportion과 jitter가 이들의 구현을 tune
default sink base class
"throttle-time" property를 가짐
test 방법
gst-launch-1.0 videotestsrc ! xvimagesink throttle-time=500000000
19.4. QoS Messages
QOS event 외에
QOS message가 있음
QOS message
application에게 QoS decision을 알림
무언가 drop된 시점의 timestamp를 포함
QOS message post 시점
element가 QoS 이유로 buffer를 drop한 경우
element가 QoS 이유로 processing strategy를 변경한 경우
n ex. decoder가 processing speed를 높이기 위해 모든 B frame을 drop하기로 결정
'Multimedia' 카테고리의 다른 글
ExoPlayer 지원 codec 및 A/V rendering (0) | 2022.01.05 |
---|---|
JPEG (0) | 2021.12.22 |
정보 이론 (0) | 2021.12.22 |
GStreamer test on Linux (e.g. Ubuntu) (0) | 2015.03.10 |
댓글