Назад | Перейти на главную страницу

Отключить весь кеш клиента NFS в CentOS

У меня есть сервер netapp, экспортирующий общий ресурс NFS (NFS3).
Я отслеживаю fpolicy на сервере netapp, это означает, что я слушаю все операции чтения файлов тома (и делюсь ими ...).

На машине с CentOS я монтирую эту NFS и выполняю операцию чтения файла (cat).
В первый раз сделаю «кот», в netapp вижу, что произошло событие FILE READ.

Но затем, если я добавлю «cat filename», я не получу увеличения счетчика события FILE READ.
Если я перейду на другую машину, смонтирую общий ресурс NFS и сделаю cat, я увижу, что счетчик увеличится на единицу.
Я предполагаю - у клиента NFS есть внутренний механизм кеширования.

Я хочу отключить кэш клиента NFS.

Я смонтировал NFS с помощью следующей команды:

mount -o lookupcache=none,actimeo=0,noac 10.10.10.1:/vol/vol0_unix /mnt/nfs1

Обратите внимание на параметры lookupcache = none, actimeo = 0, noac - взято из ссылки.

Есть ли дополнительный механизм кеширования клиента NFS, который мне не хватает?

Мой клиент NFS: Linux CENTOS 6.4 2.6.32-358.el6.x86_64

Версия машины NFS:

[ilan@DevCore-Centos6 nfs1]$ rpm -qa|grep -i nfs
nfs-utils-1.2.3-36.el6.x86_64
nfs-utils-lib-1.1.5-6.el6.x86_64
nfs4-acl-tools-0.3.3-6.el6.x86_64
[ilan@DevCore-Centos6 nfs1]$

Я предполагаю, что cachefilesd по умолчанию не работает.

Предполагая, что вы тестируете fpolicy и просто ищете способ надежно генерировать некоторый трафик, я бы полностью пропустил стек NFS ОС и просто использовал скрипт python, используя libnfs или что-то. У вас есть полный документированный контроль над созданием операций NFS. Операционная система не предназначена для этого, и быстрый Google сообщает мне, что, хотя она должна работать, это неочевидно и, конечно, не является поведением по умолчанию.

я считать что ваша проблема в том, что происходящее кеширование не связано конкретно с NFS. Вот что я вижу в сети, когда делаю md5sum небольшого файла, смонтированного по NFS второй раз за пять секунд:

12:29:27.615255 IP6 2a02:xxxx:6049:11:76d4:35ff:fe8d:39ec.1003 > 2a02:xxxx:6049:11:7271:bcff:feac:445a.2049: Flags [P.], seq 3028:3236, ack 34857, win 1432, options [nop,nop,TS val 453693630 ecr 2105657370], length 208: NFS request xid 3660266482 204 getattr fh 0,2/53
12:29:27.617595 IP6 2a02:xxxx:6049:11:7271:bcff:feac:445a.2049 > 2a02:xxxx:6049:11:76d4:35ff:fe8d:39ec.1003: Flags [P.], seq 34857:35153, ack 3236, win 500, options [nop,nop,TS val 2105661555 ecr 453693630], length 296: NFS reply xid 3660266482 reply ok 292 getattr NON 3 ids 0/-2006101416 sz 1610612736
12:29:27.617632 IP6 2a02:xxxx:6049:11:76d4:35ff:fe8d:39ec.1003 > 2a02:xxxx:6049:11:7271:bcff:feac:445a.2049: Flags [.], ack 35153, win 1432, options [nop,nop,TS val 453693632 ecr 2105661555], length 0

Все, что сделало ядро, это проверило, что файл не был изменен, с getattr (потому что он правильно не кеширует какие-либо атрибуты, а вместо этого возвращается на сервер для новых). Затем он знает, что файл не изменен, поэтому он может использовать страницы, которые все еще находятся в ядре, которые содержат контент. Это именно то, что он сделал бы с местный файл тоже, если я правильно понимаю.

Так что это не значит, что вы хотите повернуть выключен Кэширование NFS настолько, насколько вы хотите изменить кеширование файлов в подсистеме виртуальной машины, чтобы оно специально не применяется к содержимому, смонтированному по NFS. Это может быть намного сложнее, потому что вы не пытаетесь отключить то, что уже есть, вы пытаетесь ввести совершенно новое различие, которого, вероятно, сейчас нет, если вы следите за мной.

Думаю, я согласен с Эндрю Хенле в том, что это похоже на проблему XY. Возможно, тебе стоит рассказать нам, кто ты действительно пытаюсь сделать.

редактировать: вы утверждаете, что то же самое не относится к доступу к локальному файлу. Однако я думаю, что вы ошибаетесь. Я подключил жесткий диск к своему рабочему столу, к которому имеет доступ только один процесс, и с этого у меня дважды подряд md5summed файл при использовании iostat для отслеживания трафика к физическому устройству и от него.

Первый раз:

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     0.00    0.80    0.00    49.60     0.00   124.00     0.08   95.75   95.75    0.00  94.00   7.52

Обратите внимание на трафик чтения (rkB / s) с диска; сейчас второй раз:

sdc               0.00     0.20    0.00    0.40     0.00     2.40    12.00     0.00    1.00    0.00    1.00   1.00   0.04

так что похоже, что здесь тоже мешает подсистема VM. Так что на данный момент я не вижу причин думать, что вы не видите в своем netapp весь трафик, который правильно генерируют клиенты, и я снова спрашиваю: что ты на самом деле пытаешься здесь сделать? Зачем это ты "необходимо отключить [кеширование] и отправить фактическое ЧТЕНИЕ ФАЙЛА из redhat«? Потому что на данный момент это действительно не проблема.