시스템 성능과 실시간 시스템 응답에 대한 캐쉬의 영향은?

rain의 이미지

요즘 ARM System Developer's Guide를 읽고 있는데
이런 말이 나오더군요. 제 짧은 생각으론
캐시 사용이 실시간 시스템의 응답에도
도움을 줄 수 있을 거 같은데요. 그게 아닌가 보네요.
이것에 대한 조언 좀 부탁드려요.

Quote:
"캐시가 시스템의 일반적인 성능 향상은 가져오지만,
실시간 시스템 응답에는 도움을 주지 못한다.
대다수의 임베디드 시스템에는 캐시의 성능이 불필요하다는
것을 기억하기 바란다."
- ARM System Developer's Guide -
jongwooh의 이미지

실시간 시스템 (Real time system)이란 "빠른 시스템" 을 의미하는 것이 아닙니다. 값비싼 군용 실시간 시스템들(예를들어 대당 수천만원-수억원 하는 미사일 유도장치) 도 실제 프로세서 파워는 데스크탑 PC에 들어간 펜티엄 프로세서보다 훨씬 못합니다. (당연히 그정도까지 필요하지도 않으니까)

실시간 시스템이란 인스트럭션 수행 시간 단위로 계산해서 요구된 시간 내에 특정 태스크에 필요한 사이클을 보장해 주는 시스템을 말합니다.

실시간 시스템은 스케줄링의 엄격한 성질에 따라 하드 (엄격한) 리얼타임 실시간 시스템하고 소프트 (관대한) 리얼타임 실시간 시스템으로 나뉘고, 주기성에 따라 페리오딕(주기적) 리얼타임과 어피리오딕(aperiodic:비주기성) 실시간 시스템으로 나뉩니다.

그 외에도 여러가지 분류가 있긴 한데 실시간 시스템 기법이 치중하는 것은 프로세서 시간 리소스를 보장해주는 스케줄러와 기타 IO/메모리 리소스를 태스크간 보호해주는 리소스 매니지먼트 프로토콜 (통신 프로토콜과는 다름)에 치중하죠.

프로세서 고성능화 기법중 캐시의 경우에 전반적으로 시스템을 빠르게는 해 주지만 캐시 미스나 브랜치가 발생시키는 레이턴시가 인스트럭션 주기의 예측을 훨씬 어렵게 하기 때문에 엄격한 리얼타임 시스템에서는 아예 제외하는 경우가 많습니다.

그리고 실시간 시스템이란게 비싼 시스템만 있는건 아닙니다. DSP를 내장해서 사운드와 모뎀,보이스 인코딩/디코딩을 동시에 해결하는 2-3만원짜리 복합형 사운드카드도 정의상으로는 실시간 시스템입니다.

유닉스의 경우에는 리소스 매니지먼트 프로토콜이 없고 (데드락 발생가능) 스케줄러도 실시간 스케줄러가 아닌 라운드 로빈 스케줄러이기 때문에 리얼타임 시스템과는 거리가 멉니다.

실시간 시스템은 80년대부터 90년대에 많이 연구되어서 지금은 꽤 잘 알려졌지만 그래도 이론서가 아직은 많이 부족한걸로 압니다. 제가 90년대 말에 대학원 다닐때도 원서도 없어서 논문집으로 공부했었는데...

아뭏든 '실시간 시스템' 이 '성능이 좋은 시스템' 을 의미하는 것으로 오해하는 일은 앞으로 없었으면 좋겠다는 생각입니다.

하다못해 8비트 MCU로 전기밥솥을 제어하는 경우에도 분류하자면 피리오딕 소프트 리얼타임 시스템이라고 부를 수 있으니까... 8)

다시 말해 실시간 시스템이라고 부르는건 '스케줄링의 보장성'에 치중한 시스템인겁니다. 캐시를 도입하면 프로세서 성능이 높아지지고 시스템 응답성 자체는 좋아지겠지만 보장성이 망가지는 곤란한 일이 생기는 것이 실시간 시스템이기 때문에 많은 이벤트 처리를 위해 성능이 높아야 할 필요가 있으면 차라리 프로세서를 여러개를 쓰는 식으로 해결하죠.

요새 자동차 엔진 분사장치/점화장치의 제어를 MCU가 하는걸 아시죠? 그 경우의 분류는 페리오딕 하드 리얼타임 시스템입니다. (타이밍이 깨져버리면 엔진이 멈춰버리는 치명적 사건이 있고, 시스템이 시작된 순간부터 꺼지는 순간까지 계속 점화 이벤트를 주기적으로 처리함 )

이 시스템에서는 악셀레이터를 밟는데 따라서 초당 1000에서 6-7천rpm에 따라서 4행정 사이클 엔진이면 곱하기 넷, 최대 분당 5만번 정도를 시간을 맞춰서 마이크로세컨드 단위로 점화해야 하는데 그걸 프로세서 외부의 타이머를 써서 해결할 수는 없는 노릇입니다.

그런 구현에서는 대부분 프로세서가 현재 악셀레이터 상태에 따라 no-op을 실행하는 루프를 돌면서 시간을 보내다 카운터에 도달하는 순간 점화루틴(보통 IO포트에 신호를 보내기)을 수행시키고 다시 카운터가 채워진 루프로 수행이 돌아오는데, 이런 시스템에 캐시를 써서 루프가 10배 빠르게 돌면 점화 싸이클이 엉망이 되겠죠. :lol:

you must know the power of dark side.

rain의 이미지

길고 자세한 설명에 :shock: 놀랐습니다. :D
덕분에 어제 보단 좀 더 명확해 진거 같네요.
본문을 다시 해석해 보면 이렇게 되겠네요. 맞나요? ^^a

"캐시가 시스템의 일반적인 성능(응답속도) 향상은 가져오지만,
(특정 시간 내에 응답해야 하는) 실시간 시스템(의) 응답에는 도움을 주지 못한다.
(캐시의 레이턴시로 인한 지연으로 정해진 응답시간을 넘겨버리는 경우가 있으므로)
대다수의 임베디드 시스템에는 캐시의 성능이 불필요하다는 것을 기억하기 바란다."
- ARM System Developer's Guide -

세상에서 가장 이해하기 힘든 것은 내 자신이 그것을 이해할 수 있다는 것이다.
- 알베르트 아인슈타인 -

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.