인터럽트의 수행시간 측정에 관하여 질문드립니다.

enermysong의 이미지

안녕하세요! 현재 아래에 인터럽트 서비스 함수를 구현해서 인터럽트의 간격을 구하고 있습니다.
1ms 간격으로 인터럽트를 발생기키는 장치에 의해서 인터럽트가 발생하는데요 이 인터럽트를 이용하여 계속해서 시간을 측정합니다. 시간은 평균값과 MAX, MIN 값을 구하는데요 가끔가다가 시간을 잘못 가져와서 MIN이 0이나오는 경우가 발생하고 있습니다. 그래서 0이 나올때 앞서 측정한 값과 나중에 측정한 값을 찍어 보았더니 같은 시간 값이 나옵니다. 어떻게 이런 경우가 발생하는지.....
이게 소스상의 문제는 아니라고 보여집니다만 도대체 해결방법을 찾지를 못하겠습니다.
아시는 분 계시다면 꼭좀 알려주세요!

irqreturn_t int_interrupt(int irq, void *dev_id)
{
	do_gettimeofday(&inttime[intcount%2]);
	if(intcount > 0 && intcount%2 == 1)
	{
		timersub(&inttime[1],&inttime[0],&mytimer[1]);
		timeradd(&mytimer[0],&mytimer[1],&mytimer[0]);
		if(timercmp(&mytimer[1],&mytimer[2],>))
			mytimer[2] = mytimer[1];
		if(timercmp(&mytimer[1],&mytimer[3],<))
			mytimer[3] = mytimer[1];
	}
	else if(intcount > 0 && intcount%2 == 0)
	{
		timersub(&inttime[0],&inttime[1],&mytimer[1]);
		timeradd(&mytimer[0],&mytimer[1],&mytimer[0]);
		if(timercmp(&mytimer[1],&mytimer[2],>))
			mytimer[2] = mytimer[1];
		if(timercmp(&mytimer[1],&mytimer[3],<))
			mytimer[3] = mytimer[1];
	}		
	intcount++;
	return IRQ_HANDLED;
bushi의 이미지

linux/ktime.h

ktime_get(), ktime_sub(), ktime_to_us()

OTL

drinkme의 이미지

OS 타이머의 resolution이 1ms보다 훨씬 크지 않나요?
당연한 결과 같은데요....

Jtag으로 찍어보시는 것이 정확할 듯 싶은데요...

enermysong의 이미지

답변 감사드립니다.
OS의 분해능이 1ms보다 크다라고 말씀하신것 같은데요! do_gettimeofday()라는 함수는 나노까지 측정가능하지 않습니까? 물론 완전히 정확하지는 않겠지만요.!

drinkme의 이미지

제가 알기론 그런류의 함수들이 알려주는 값이 nano sec단위로 있는 것이지,
분해능이 그렇지는 않습니다.

정확하고 안정확하고의 얘기가 아닙니다.

Hyun의 이미지

정확히 측정하려면 타이머 레지스터를 직접 읽어서 사용하는 방법이 있습니다. 레지스터는 플랫폼마다 틀리지만, 대부분의 플랫폼에 시간을 측정할만한 타이머가 한두개쯤은 있습니다. 실제 OS에서도 그것으로 정밀한 시간을 측정하는걸로 알고있습니다.
만약 x86을 쓰신다면 8253을 사용하는 것도 좋은 방법이죠.


나도 세벌식을 씁니다
enermysong의 이미지

1ms 이하의 시간을 측정하기에는 do_gettimeofday()함수가 적당하지 않은것 같네요! 잘 알겠습니다.

답변 주신 모든 분들께 감사드립니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.