[질문] write-back의 효능?

zipsinworm의 이미지

write-back의 효능이 어떻게 되는지 알고 싶어 실험을 해보았는데요.

실험내용은 대략(타겟 보드에 USB를 인식)

1번 "write-back되지 않고 USB에 읽자마자 바로 USB에 쓰기"와

2번 "write-back을 사용하여 USB에 읽고 쓰기"를 해 보았습니다.
참고로 타겟보드는 fat filesystem을 지원하지 않기 때문에 fuse를 이용해
1번의 usb에 읽고 쓰는 함수를 연동시켰습니다. 때문에 1번보다 속도가 느리죠.-_-;;

테스트 소스는
1. 한번 읽고 쓰기(USB에서)
2. 1번 테스트를 100회 반복(USB에서)
3. 쓰레드를 이용해 한 쓰레드는 읽기 전용, 나머지 한 쓰레드는 쓰기 전용(USB에서)
4. 3번 테스트를 100회 반복(USB에서)

결과는... 예상을 깨고 1번과 3번이 fuse를 이용한것이 더 빨랐습니다.
2번과 4번은 USB에 직접 읽고 쓰는게 더 빨랐고요.

대체 어떻게 된건지..-_-;;

결론적으로
반복문이 없는건 write-back이 더 빠르고
반복문이 있는건 write-back이 없는게 더 빠르다는거죠.

왜 그러는지 너무 궁금합니다.

kalstein의 이미지

죄송합니다만...fuse가 무엇인지 잘 몰라서 확답은 못드리겠습니다만...;;

write-back이라고 하면 원래 cache strategy 아닌가요. 그리고 대부분은 OS단에서 처리해주게 되구요. (혹은 그에 준하는 middleware) write-back방식을 사용했을때는 빠를수밖에 없지않나요. 단순히 실제 적용장소가 아닌 좀 더 빠른 저장장치를 이용하니까요. (CPU단에서는 L1,L2 cache. DISK입장에서는 SDRAM) write-back의 문제는 실제로 저장되어야 되는 곳에 저장되는 시점이 문제이지 님이 테스트하신 방법에서는 그와 상관있는 문제는 없어보이네요.

3번과 같은 환경하에서도, cache system은 일치성을 제공해줍니다. (실제 메모리가 아닌 cache된 내용을 보여주는거니까요.)


------------------------------------------
Let`s Smart Move!!
http://kalstein.tistory.com/

a287848의 이미지

write back 을 사용했다는건 operation을 non-blocking 으로 수행했다는건데 시간 측정을 어떻게 하셨는지 궁금하네요 쓰기 동작의 완료를 어떻게 측정하셨는지요?

Dig it.

zipsinworm의 이미지

위의 실험은 VFS에서의 write-back입니다.(CPU에서도 write-back을 하죠^^;;)
USB와 같은 이동식 디스크는 I/O가 너무 느리기 때문에 CPU가 그것을 기다릴수가 없습니다.
그래서 파일을 읽거나 수정하게 되면 해당 파일을 우선 메모리 위에 올려 놓습니다.
직접 USB에 작업하는것보다 메모리 위에 올려놓고 작업하는게 훨씬 빠르게 작업할 수 있기 때문입니다.
작업이 완료하고 난 다음 write-back이 이루어지게 되면 USB상에서 작업했을때 보다 빠른 수행을
보여주게 됩니다.^^;
아마 write-back 해주는 커맨드가 sync이고 write-back데몬이 있는걸로 알고 있습니다.
일정 시간이 지나면 메모리 위의 내용과 USB나 하드의 내용이 다를경우 write-back을 해주는 데몬인데
이름이 기억나지 않네요..-0-;;

그리고 시간 측정은 fuse에 fat filesystem을 연동시켜서
--------------
| VFS |
--------------
| FUSE |
| FAT |

프로그램 상에서 함수를 각각 호출했을때마다
시간을 측정했습니다.

시간 매크로 초기화
시간 매크로 시작
함수 호출(open, read, write, close)
시간 매크로 종료
...

함수를 하나하나 찍어서 확인해 보니 알겠더라고요.ㅠㅠ

a287848의 이미지

개념이 조금 어듯난 부분이 있네요. write-back은 non-blocking 입니다. 지금 사용하신 open,

read, write, close 중에 write 시스템 콜이 바로

대표적인 non-blocking 중에 하나이고요.

write 와 같은 non-blocking 함수에서는

function call 이 끝나고 제어 흐름이 다음 루틴으로 간다 하더라도

실제 그 function 의 기능은 완료된게 아닙니다. 따라서

시간 매크로 초기화
시간 매크로 시작
함수 호출(open, read, write, close)
시간 매크로 종료

에서 시간 매크로 종료로 제어 흐름이 진행 된다고 하더라도 실제 함수의 실행이 끝난게 아닙니다.

함수는 리턴이 되고 백그라운드에서 작업이 진행중인 상태인거죠.^^ 정말 자세히 시간을 측정하려고

하신다면 커널에서 진행되는 루틴을 기반으로해서 시간측정을 해야하지 않나 하는 생각이 듭니다.

Dig it.

Dig it.

댓글 달기

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