본문 바로가기

CS/DataBase

(MySQL) Direct I/O

Direct I/O가 무엇인가

Direct I/O는 시스템의 read/write 버퍼 캐시를 거치지 않고 (ByPass) 직접 I/O를 수행하는 것이다.

 

 

왜 Direct I/O 인가?

대부분의 경우에는 Buffered cache 가 훨씬 더 나은 성능을 제공하지만 특정 애플리케이션의 경우에는 혜택이 거의 없다.

 

데이터베이스(DBMS)는 일반적으로 응용 프로그램 수준에서 데이터 캐싱을 관리하므로이 서비스를 구현하기 위해 파일 시스템이 필요하지 않다. 조금 더 구체적으로 말하자면 데이터베이스는 내부적으로 버퍼를 관리하고 해당 알고리즘이 운영체제에서 관리하는 버퍼 캐시에 대한 알고리즘보다 우수하다.

 

 

운영체제가 버퍼링 한것을 데이터 베이스 내부에서 한번 더 버퍼링을 하므로 이러한 경우에 오버헤드가 발생한다.

이러한 현상을 Double Copying이라 부른다.

 

Direct I/O의 특징

 

파일 시스템 캐시 내에서 운영체제에서 제공하는 메모리의 버퍼링을 우회하려는 응용 프로그램을 위해 혜택을 제공한다.

파일을 사용할 때 데이터는 파일 버퍼 캐시의 사용 없이 디스크에서 애플리케이션 버퍼로 바로 이동된다. 

 

리눅스의 경우에는 Direct I/O 옵션을 갖는 파일 시스템을 마운트 하여 파일을 사용할 수 있거나 시스템 콜 명령어인 open()  명령어에 특수한 O_DIRECT 플래그를 달아서 파일을 오픈하게끔 도와준다.

 

Direct I/O의 장점

CPU 사용량을 줄여주며 디스크와 파일 버퍼 캐시로  그다음 파일로 디동하는 두 번의 복사 과정에 대한 오버헤드를 제거해준다.

 

주의할 점은 Direct I/O 옵션을 켜면 오히려 Physical I/O가 늘어나면서 성능이 저하되는 현상이 발생하기도 한다. Physical I/O의 성능을 개선하기 위해서 사용한 옵션이 거꾸로 성능을 저하시키는 문제가 발생할 수 도 있으므로 상황에 맞게 잘 사용하는 것이 좋겠다.


References

https://www.cloudibee.com/what-is-direct-i-o/

 

Direct I/O - CloudiBee

Direct I/O is a feature of the file system whereby file reads and writes go directly from the applications to the storage device (disk/SSD), bypassing the OS read and write buffer caches. Direct IO is used only by applications that manage their own caches.

www.cloudibee.com

http://altibase-textcube.blogspot.com/2010/04/linux-direct-io%EC%9D%98-%EC%9D%B4%ED%95%B4.html

 

Linux Direct IO의 이해

출처 : 알티스토리 : http://altistory.net/333     Linux Direct IO의 이해 (Synchronous IO와의 차이를 기반으로)   Direct IO란 무엇인가요? Direct IO란 운영체제...

altibase-textcube.blogspot.com

 

'CS > DataBase' 카테고리의 다른 글

(MySQL) Transaction Isolation Levels  (0) 2020.03.29
(MySQL) Replication  (0) 2020.03.29
(MySQL) Adaptive Hash Index  (0) 2020.03.08
(MySQL) ACID : 트랜잭션을 통한 동시성 제어  (0) 2020.03.08
(MySQL) MyISAM vs InnoDB  (0) 2020.02.16