Я настраивал сервер NFSv4. Я делюсь файлами с машинами Linux в ферме виртуальных машин и машинами с Windows 7, 8 и 10, поэтому мне нужно обмениваться файлами как с NFS, так и с Samba 1 . В прошлом,Я сделал это, настроив машину NFS с прямым доступом к базовой файловой системе ext4 и настроив отдельный сервер Samba, который монтирует экспорт NFS и делится ими 2 .
Я хотел бы унифицировать файл совместное использование на одном сервере. Крайне важно, я должен быть уверен, что NFS и Samba не наступают на файлы друг друга, блаженно игнорируя блокировки. В результате я должен продолжать использовать Samba поверх NFS, а не параллельно с NFS.
Это кажется тривиальным. Сервер NFS должен просто смонтировать свой собственный общий ресурс, как это сделал бы сервер Samba, а затем тот же самый компьютер должен запустить Samba и экспортировать этот смонтированный общий ресурс. Единственное отличие, казалось бы, заключается в том, что трафику не обязательно перемещаться по сети между двумя машинами. Я ожидал лучшей производительности.
Вместо этого сервер NFS загружает процессор на машине, давая только 2,5 МБ / с производительность!
top - 11:34:57 up 15 days, 1:18, 1 user, load average: 32.09, 8.07, 2.74
Tasks: 101 total, 13 running, 88 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.6 us, 93.7 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.7 si, 0.0 st
KiB Mem : 899776 total, 124840 free, 184624 used, 590312 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 261184 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
11058 root 20 0 0 0 0 R 11.5 0.0 5:53.84 nfsd
11061 root 20 0 0 0 0 R 11.5 0.0 5:53.88 nfsd
11057 root 20 0 0 0 0 R 11.2 0.0 5:53.72 nfsd
11059 root 20 0 0 0 0 R 11.2 0.0 5:53.78 nfsd
11060 root 20 0 0 0 0 R 11.2 0.0 5:53.80 nfsd
11062 root 20 0 0 0 0 R 11.2 0.0 5:53.86 nfsd
11064 root 20 0 0 0 0 R 11.2 0.0 9:23.40 nfsd
11063 root 20 0 0 0 0 R 10.9 0.0 6:00.00 nfsd
Единственный другой известный мне признак того, что что-то не так, - это что в / var / log / messages записываются бесчисленные строки, которые выглядят примерно так.
Apr 25 11:35:01 nas kernel: nfsv4 compound op #4/4: 9 (OP_GETATTR)
Apr 25 11:35:01 nas kernel: nfsd: fh_verify(36: 01070001 00060001 00000000 9509b6fe 7a49ad56 5a4d5dbc)
Apr 25 11:35:01 nas kernel: nfsv4 compound op ffff88dbf606a080 opcnt 4 #4: 9: status 0
Apr 25 11:35:01 nas kernel: nfsv4 compound returned 0
Apr 25 11:35:01 nas kernel: --> nfsd4_store_cache_entry slot ffff88db7bbae000
Apr 25 11:35:01 nas kernel: nfsv4 compound op ffff88dac5072080 opcnt 4 #2: 22: status 0
Apr 25 11:35:01 nas kernel: nfsv4 compound op #3/4: 38 (OP_WRITE)
Apr 25 11:35:01 nas kernel: nfsd: write complete host_err=131072
Apr 25 11:35:01 nas kernel: nfsv4 compound op ffff88dac5072080 opcnt 4 #3: 38: status 0
Apr 25 11:35:01 nas kernel: nfsv4 compound op #4/4: 9 (OP_GETATTR)
Apr 25 11:35:01 nas kernel: nfsd: fh_verify(36: 01070001 00060001 00000000 9509b6fe 7a49ad56 5a4d5dbc)
Apr 25 11:35:01 nas kernel: nfsd_dispatch: vers 4 proc 1
Apr 25 11:35:01 nas kernel: nfsv4 compound op #1/4: 53 (OP_SEQUENCE)
Apr 25 11:35:01 nas kernel: __find_in_sessionid_hashtbl: 1555688119:2835816624:106:0
Apr 25 11:35:01 nas kernel: nfsd4_sequence: slotid 5
Apr 25 11:35:01 nas kernel: check_slot_seqid enter. seqid 9615 slot_seqid 9614
Apr 25 11:35:01 nas kernel: nfsv4 compound op ffff88dbf606a080 opcnt 4 #1: 53: status 0
Apr 25 11:35:01 nas kernel: nfsv4 compound op #2/4: 22 (OP_PUTFH)
Apr 25 11:35:01 nas kernel: nfsd: fh_verify(36: 01070001 00060001 00000000 9509b6fe 7a49ad56 5a4d5dbc)
Apr 25 11:35:01 nas kernel: nfsv4 compound op ffff88db7b529080 opcnt 4 #4: 9: status 0
Apr 25 11:35:01 nas kernel: nfsv4 compound returned 0
Apr 25 11:35:01 nas kernel: --> nfsd4_store_cache_entry slot ffff88db7bbaf000
Apr 25 11:35:01 nas kernel: nfsd_dispatch: vers 4 proc 1
Apr 25 11:35:01 nas kernel: nfsv4 compound op #1/4: 53 (OP_SEQUENCE)
Apr 25 11:35:01 nas kernel: __find_in_sessionid_hashtbl: 1555688119:2835816624:106:0
Apr 25 11:35:01 nas kernel: nfsd4_sequence: slotid 1
Apr 25 11:35:01 nas kernel: check_slot_seqid enter. seqid 9626 slot_seqid 9625
Apr 25 11:35:01 nas kernel: nfsv4 compound op ffff88db7b529080 opcnt 4 #1: 53: status 0
Apr 25 11:35:01 nas kernel: nfsv4 compound op #2/4: 22 (OP_PUTFH)
Apr 25 11:35:01 nas kernel: nfsd: fh_verify(36: 01070001 00060001 00000000 9509b6fe 7a49ad56 5a4d5dbc)
Apr 25 11:35:01 nas kernel: nfsv4 compound op ffff88dbf606f080 opcnt 4 #4: 9: status 0
Apr 25 11:35:01 nas kernel: nfsv4 compound returned 0
Apr 25 11:35:01 nas kernel: --> nfsd4_store_cache_entry slot ffff88db291eb000
Apr 25 11:35:01 nas kernel: nfsd_dispatch: vers 4 proc 1
Apr 25 11:35:01 nas kernel: nfsv4 compound op #1/4: 53 (OP_SEQUENCE)
Apr 25 11:35:01 nas kernel: __find_in_sessionid_hashtbl: 1555688119:2835816624:106:0
Apr 25 11:35:01 nas kernel: nfsd4_sequence: slotid 2
Apr 25 11:35:01 nas kernel: check_slot_seqid enter. seqid 9614 slot_seqid 9613
Apr 25 11:35:01 nas kernel: nfsv4 compound op ffff88dbf606f080 opcnt 4 #1: 53: status 0
Apr 25 11:35:01 nas kernel: nfsv4 compound op #2/4: 22 (OP_PUTFH)
Apr 25 11:35:01 nas kernel: nfsd: fh_verify(36: 01070001 00060001 00000000 9509b6fe 7a49ad56 5a4d5dbc)
Apr 25 11:35:01 nas kernel: nfsv4 compound op ffff88dac507e080 opcnt 4 #2: 22: status 0
Apr 25 11:35:01 nas kernel: nfsv4 compound op #3/4: 38 (OP_WRITE)
Apr 25 11:35:01 nas kernel: nfsd: write complete host_err=131072
Apr 25 11:35:01 nas kernel: nfsv4 compound op ffff88dac507e080 opcnt 4 #3: 38: status 0
Apr 25 11:35:01 nas kernel: nfsv4 compound op #4/4: 9 (OP_GETATTR)
Apr 25 11:35:01 nas kernel: nfsd: fh_verify(36: 01070001 00060001 00000000 9509b6fe 7a49ad56 5a4d5dbc)
Apr 25 11:35:01 nas kernel: nfsv4 compound op ffff88dac5072080 opcnt 4 #4: 9: status 0
Apr 25 11:35:01 nas kernel: nfsv4 compound returned 0
Apr 25 11:35:01 nas kernel: --> nfsd4_store_cache_entry slot ffff88dbf65cc000
Apr 25 11:35:01 nas kernel: nfsd_dispatch: vers 4 proc 1
Apr 25 11:35:01 nas kernel: nfsv4 compound op #1/4: 53 (OP_SEQUENCE)
Apr 25 11:35:01 nas kernel: __find_in_sessionid_hashtbl: 1555688119:2835816624:106:0
Apr 25 11:35:01 nas kernel: nfsd4_sequence: slotid 4
Apr 25 11:35:01 nas kernel: check_slot_seqid enter. seqid 9584 slot_seqid 9583
Apr 25 11:35:01 nas kernel: nfsv4 compound op ffff88dac5072080 opcnt 4 #1: 53: status 0
Apr 25 11:35:01 nas kernel: nfsv4 compound op #2/4: 22 (OP_PUTFH)
Apr 25 11:35:01 nas kernel: nfsd: fh_verify(36: 01070001 00060001 00000000 9509b6fe 7a49ad56 5a4d5dbc)
Apr 25 11:35:01 nas kernel: nfsv4 compound op ffff88dbf606a080 opcnt 4 #2: 22: status 0
Apr 25 11:35:01 nas kernel: nfsv4 compound op #3/4: 38 (OP_WRITE)
Apr 25 11:35:01 nas kernel: nfsd: write complete host_err=131072
Apr 25 11:35:01 nas kernel: nfsv4 compound op ffff88dbf606a080 opcnt 4 #3: 38: status 0
Apr 25 11:35:01 nas kernel: nfsv4 compound op #4/4: 9 (OP_GETATTR)
Apr 25 11:35:01 nas kernel: nfsd: fh_verify(36: 01070001 00060001 00000000 9509b6fe 7a49ad56 5a4d5dbc)
Я не монтирую общие ресурсы NFS локально через 127.0.0.1. При локальном монтировании NFS используется частный IP-адрес самой машины. Я мог бы это изменить, но это потребовало бы дополнительной сложности в определении экспорта NFS, и я бы предпочел, чтобы эта машина видела себя точно так же, как другие машины, которые будут монтировать общие ресурсы NFS 3 .
Очень вероятно, что ваша рабочая нагрузка умирает от планирования. Вы запрашиваете тонну на переключение контекста в той же системе при экспорте файловой системы обратно в себя и последующем экспорте этого экспорта снова.
Вы можете увидеть, что эта рабочая нагрузка распределяется между более чем одним ядром. (ядра, которые не используют одно и то же ядро ЦП) приводит к увеличению производительности, несмотря на задействование сетевого канала между этими системами.
Это легко может быть достигнуто с помощью совместно размещенного набора виртуальных машин; один работает с NFS, другой - с Samba. Размещение их на одном гипервизоре должно устранить большинство сетевых задержек и должно хорошо работать при условии, что эти виртуальные машины не используют одни и те же ядра ЦП.
Существуют также реализации в пользовательском пространстве для NFS - NFS Ganesha является очень распространенной. Однако Samba также будет нести ответственность за нетривиальное количество этих повторяющихся переключений между пользовательским пространством и ядром. Возможно, стоит протестировать NFS Ganesha, если эти рабочие нагрузки по какой-то причине абсолютно должны совместно использовать ядро.
Короче говоря, сокращение переключения контекста в одной системе должно значительно помочь в этом.