책을 읽다 보면 raw I/O란 이야기가 가끔 보이는데 이게 무슨 뜻인지요?
그리고 raw I/O의 장단점이나 실제 사용 방법은 어떻게 되는지 예제 코드를 볼 수 있는 곳이 있다면 좀 알려 주세요.
감사합니다....
프로그래머는 아닙니다만.
용어가 같다면 다음과 같은것을 이야기합니다.
실제적으로 리눅스의 경우 filesystem이 여러가지 경로를 거쳐서 사용되는데요.
그중에 메모리 캐쉬나 io를 동기적? 으로 바꾸어주는 여러가지
경로를 거칩니다.
게다가 정해진 파일시스템위에 적게되죠.
하지만 raw I/O 를 사용할 경우에 저러한 것들을 프로그래머의 마음대로
설정할수 있는것으로 압니다.
예를 들자면 오라클 퍼포먼스 튜닝 가이드에보면
리눅스의 디스크는 캐쉬등의 요소가 있으므로 오라클의 캐쉬와 중복된다.
그래서 raw disk 를 사용함으로서 그러한 것들을 어쩌구 했던것이 기억납니다.
그리고 소스코드는 news 데몬인 innd 의 cnfs 항목을 보시면 될것 같습니다.
뉴스의 특성상 expire 시키거나 기존의 데이터를 날려야하는데.
cnfs같은 경우에 (cycling news file system) block device (raw i/o 와 같은 뜻으로 생각됨) 위에서 세팅가능하고
raw i/o 로 cnfs를 생성했을시에 접근은 불가능하지만 (쉘에서 말이죠)
여러가지 보조 유틸리티 ( inn 에서 제공하는) 을 통해 가능합니다.
즉 독자적 파일 시스템을 구축하는것이가능합니다.
그리고 웹에서 찻아본바에 의하면 비동기 I/O 구축이가능하다던데
이건 가능한지 모르겠습니다 =)
제대로 된 답이 되었는지 모르겠군요.
책을 읽다 보면 raw I/O란 이야기가 가끔 보이는데 이게 무슨 뜻인지요? 그리고 raw I/O의 장단점이나 실제 사용 방법은 어떻게 되는지 예제 코드를 볼 수 있는 곳이 있다면 좀 알려 주세요. 감사합니다....
------------------------------------------------------------------------------------------------ Life is in 다즐링
일반적으로 읽기/쓰기를 할때
리눅스는 내부적으로 버퍼캐쉬를 운용하여 데이타를 유지한다.
그러나 raw i/o 는
user-space 로 부터 바로 I/O 를 처리하도록 하며
버퍼캐쉬에 데이타를 유지않도록 한다.
고로 한번 쓰이고, 다시 참고가 안될 넘들이라면
raw i/o 는 성능향상에 도움이 될 수 있다.
raw I/O 는 고급 I/O 프로그래밍 기법입니다. OUTPUT 은 별루 차이가 없지만 INPUT 은 차이가 많습니다. 예를 들면 특수한 제어문자도 모두 내 프로그램안에서 처리 해야 합니다.
예를 들면 ^C 같은 것도 내가 직접 처리를 해주어야 합니다. 각종 다른 제어문자도 마찬가지죠. 그만큼 고급기능을 만들수 있지만 해줘야 할일도 많다는 것을 의미합니다.
또한 INTERRUPT 기법을 이용하여 일정시간 동안 데이터가 들어오지 않을 경우의 예외처리도 필요합니다.
다 설명하기가 힘들군요. 그리고 INPUT 에 있어서 항상 입력 포트를 감시하므로 그만큼 부하가 많이 걸립니다.
- 겨울아찌 -
- 겨울아찌 - winchild@gmail.com
텍스트 포맷에 대한 자세한 정보
<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]
Re: raw I/O란?
프로그래머는 아닙니다만.
용어가 같다면 다음과 같은것을 이야기합니다.
실제적으로 리눅스의 경우 filesystem이 여러가지 경로를 거쳐서 사용되는데요.
그중에 메모리 캐쉬나 io를 동기적? 으로 바꾸어주는 여러가지
경로를 거칩니다.
게다가 정해진 파일시스템위에 적게되죠.
하지만 raw I/O 를 사용할 경우에 저러한 것들을 프로그래머의 마음대로
설정할수 있는것으로 압니다.
예를 들자면 오라클 퍼포먼스 튜닝 가이드에보면
리눅스의 디스크는 캐쉬등의 요소가 있으므로 오라클의 캐쉬와 중복된다.
그래서 raw disk 를 사용함으로서 그러한 것들을 어쩌구 했던것이 기억납니다.
그리고 소스코드는 news 데몬인 innd 의 cnfs 항목을 보시면 될것 같습니다.
뉴스의 특성상 expire 시키거나 기존의 데이터를 날려야하는데.
cnfs같은 경우에 (cycling news file system) block device
(raw i/o 와 같은 뜻으로 생각됨)
위에서 세팅가능하고
raw i/o 로 cnfs를 생성했을시에 접근은 불가능하지만 (쉘에서 말이죠)
여러가지 보조 유틸리티 ( inn 에서 제공하는) 을 통해 가능합니다.
즉 독자적 파일 시스템을 구축하는것이가능합니다.
그리고 웹에서 찻아본바에 의하면 비동기 I/O 구축이가능하다던데
이건 가능한지 모르겠습니다 =)
제대로 된 답이 되었는지 모르겠군요.
------------------------------------------------------------------------------------------------
Life is in 다즐링
raw i/o
일반적으로 읽기/쓰기를 할때
리눅스는 내부적으로 버퍼캐쉬를 운용하여 데이타를 유지한다.
그러나 raw i/o 는
user-space 로 부터 바로 I/O 를 처리하도록 하며
버퍼캐쉬에 데이타를 유지않도록 한다.
고로 한번 쓰이고, 다시 참고가 안될 넘들이라면
raw i/o 는 성능향상에 도움이 될 수 있다.
raw I/O 는 고급 I/O 프로그래밍 기법입니다.
raw I/O 는 고급 I/O 프로그래밍 기법입니다. OUTPUT 은 별루 차이가 없지만 INPUT 은 차이가 많습니다. 예를 들면 특수한 제어문자도 모두 내 프로그램안에서 처리 해야 합니다.
예를 들면 ^C 같은 것도 내가 직접 처리를 해주어야 합니다. 각종 다른 제어문자도 마찬가지죠. 그만큼 고급기능을 만들수 있지만 해줘야 할일도 많다는 것을 의미합니다.
또한 INTERRUPT 기법을 이용하여 일정시간 동안 데이터가 들어오지 않을 경우의 예외처리도 필요합니다.
다 설명하기가 힘들군요.
그리고 INPUT 에 있어서 항상 입력 포트를 감시하므로 그만큼 부하가 많이 걸립니다.
- 겨울아찌 -
- 겨울아찌 -
winchild@gmail.com
댓글 달기