2016-06-18 2 views
0

커널에서 페이지 캐시를 피하는 방법은 응용 프로그램이 직접 디스크에서 데이터를 쓰거나 읽을 수 있습니까? 커널에서는 어떻게 설정합니까?리눅스 커널에서 페이지 캐시를 비활성화하는 방법은 무엇입니까?

+0

당신이 무엇을 요구하고 있는지 분명하지 않습니다. 사용자 공간 또는 모든 사용자 공간 프로세스에서 하나의 특정 응용 프로그램에 대해서만 페이지 캐싱을 비활성화 하시겠습니까? 커널 자체에서이 작업을 수행해야합니까, 아니면 어떻게 수행 될지는 중요하지 않습니까? 더 자세한 정보를 제공하십시오. –

+0

GlusterFS에 대한 페이지 캐싱을 비활성화하고 싶습니다. GlusterFS 클라이언트 (nodeA)를 direct-io-mode (FUSE 지원)를 통해/mnt/glusterfs에 마운트했습니다 .GlusterFS에서 파일을 열었을 때 그 파일은 FUSE에 의해 지원되는 direct-io-mode 때문에 GlusterFS 클라이언트 (nodeA)에 캐시되었지만 파일이 GlusterFS 서버 (nodeB)에 캐시되었습니다. 즉, 서버 (nodeB)에서 파일을 캐시하지 않습니다. 따라서 문제는 GlusterFS 서버 (nodeB)에 대한 페이지 캐싱을 비활성화하는 방법입니까? – user6481589

+0

파일 열기, 요청은 다음과 같이 보냈습니다. open (User-Space, nodeA) ---> sys_open (Kernel, nodeA) -----> fuse_open (kernel, nodeA) -------> client_open (사용자 공간, nodeA) ------------> server_open (사용자 공간, nodeB) -------> sys_open (커널, nodeB) ------- > ext4_open (커널, nodeB). – user6481589

답변

3

O_DIRECT를 호출하려면 애플리케이션이 필요합니다. 맨 페이지에서 http://man7.org/linux/man-pages/man2/open.2.html

이렇게하면 I/O를 수행하는 동안 페이지 캐시에 쓰거나 읽지 않도록 커널에 알립니다.

O_DIRECT (Linux 2.4.10 이상) 파일과의 I/O 캐시 효과를 최소화하십시오. 일반적으로 성능이 저하되지만 응용 프로그램이 자신의 캐싱을 수행 할 때와 같이 특별한 상황에서 유용합니다. 파일 I/O는 사용자에게 직접 또는 공간에서 수행됩니다. 공간 버퍼. 자체적으로 O_DIRECT 플래그를 사용하면 데이터를 동 기적으로 전송할 때 노력을 기울이지 만 데이터 및 필요한 메타 데이터 이 전송되는 O_SYNC 플래그는 에 대한 보장을 제공하지 않습니다. 동기 I/O를 보장하려면 O_DIRECT 외에도 O_SYNC가 이어야합니다. 아래토론에 대한 자세한 내용은 참고를 참조하십시오.

  A semantically similar (but deprecated) interface for block 
      devices is described in raw(8). 
+0

파일 열기, 요청은 다음과 같이 보냈습니다. (User-Space, nodeA) ---> sys_open (Kernel, nodeA) -----> fuse_open (커널, 노드 A) ------ -> client_open (사용자 공간, nodeA) ----- 네트워크 -------> server_open (사용자 공간, nodeB) -------> sys_open (커널, nodeB) -> -----> ext4_open (Kernel, nodeB). 네트워크 전에는 GlusterFS 클라이언트에 속하며 이후에는 GlusterFS 서버입니다. client_open()에 O_DIRECT 플래그를 추가하면 서버가 직접 파일을 열고, io-mode? – user6481589

+0

맙소사, IIUC에서는 gluster FUSE에 마운트 된 네트워크 파일 시스템을 통해 파일을 열고 서버의 페이지 캐시를 사용하지 않고 파일을 열려고하지만 클라이언트가이를 지정할 수있는 방법이 필요합니다. 섬기는 사람. 이 이해가 맞다면 gluster fs 프로토콜 스펙을 읽어서 이런 종류의 애트리뷰트가 서버에 전달되는지 아닌지를 알아야한다고 말할 것이다. –

관련 문제