2016-06-18 2 views
0

Как избежать кеша страницы в ядре, приложение может напрямую писать или читать данные с диска? В ядре, как установить?Как отключить кеш страниц в ядре Linux?

+0

Непонятно, что вы просите. Вы хотите отключить кеширование страниц только для одного конкретного приложения в пользовательском пространстве или для всех процессов пользовательского пространства? Вам нужно делать это в самом ядре, или это не имеет значения, как это будет сделано? Предоставьте более подробную информацию, пожалуйста. –

+0

Я просто хочу отключить кеширование страниц для GlusterFS.By Fuse, я установил клиент GlusterFS (nodeA) в/mnt/glusterfs через direct-io-mode (поддерживается FUSE). Когда я открыл файл в GlusterFS, файл не был кэшированный в клиенте GlusterFS (nodeA) из-за прямого режима, поддерживаемого FUSE, но файл был кэширован на сервере GlusterFS (nodeB). Иными словами, на сервере (nodeB) я не хочу кэшировать файл. Итак, вопрос в том, как отключить кеширование страниц для сервера GlusterFS (nodeB)? – user6481589

+0

Открыть файл, запрос был отправлен следующим образом: open (User-Space, nodeA) ---> sys_open (Kernel, nodeA) -----> fuse_open (kernel, nodeA) -------> client_open (пространства пользователя, узел А) ------------> server_open (User-Space, NodeB) -------> sys_open (Kernel, NodeB) ------- > ext4_open (ядро, NodeB). – user6481589

ответ

3

Вам понадобится приложение для вызова O_DIRECT. На странице man http://man7.org/linux/man-pages/man2/open.2.html

С этим вы сообщаете ядру не писать/читать из кэша страниц при выполнении операций ввода-вывода.

O_DIRECT (начиная с Linux 2.4.10) Попробуйте минимизировать эффекты кэша ввода-вывода и из этого файла . В целом это ухудшит производительность, но это полезно в особых ситуациях, например, когда приложения используют собственное кэширование. Файловый ввод-вывод выполняется непосредственно с/от пользователя - пробелов. Флаг O_DIRECT сам по себе прилагает усилия для передачи данных синхронно, но не дает гарантии флага O_SYNC, что передаются данные и необходимые метаданные . Чтобы гарантировать синхронный ввод-вывод, O_SYNC должен быть , используемый в дополнение к O_DIRECT. См. ПРИМЕЧАНИЯ ниже для дальнейшего обсуждения .

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

Открыть файл, запрос был отправлен следующим образом: open (User-Space, nodeA) ---> sys_open (Kernel, nodeA) -----> fuse_open (kernel, node A) ------ -> client_open (пространства пользователя, узел А) ----- сеть -------> server_open (User-Space, NodeB) -------> sys_open (Kernel, NodeB) - -----> ext4_open (Kernel, nodeB). Перед сетью они принадлежат клиенту GlusterFS, а после этого они являются сервером GlusterFS. Если я добавлю флаг O_DIRECT в client_open(), тогда сервер откроет файл в режиме прямого доступа, IO-режим? – user6481589

+0

Hmm so IIUC вы хотите открыть файл через сетевую файловую систему Fuster FUSE и хотите открыть сервер, чтобы открыть файл, не используя кеш страницы страницы, но вы хотите, чтобы клиент мог указать это на сервер. Если это понимание верное, я бы сказал, что вам нужно прочитать спецификацию протокола gluster fs, чтобы узнать, передает ли он этот тип атрибута серверу или нет. –

Смежные вопросы