Estou executando uma máquina Ubuntu 12.04 LTS como uma VM em um servidor ESXi 5.5. Eu tenho duas montagens CIFS diferentes, uma em um servidor Windows 2008 R2 e outra em um servidor Windows 2012 R2. Eu tenho as montagens definidas em / etc / fstab com o noauto switch e o comando mount é chamado via /etc/rc.local (fstab não estava processando rápido o suficiente para meu MythTV DVR usar os diretórios, então eu fui o rc.local rota). Minha rede está executando um domínio do Active Directory e estou autenticando como um usuário de domínio.
Estou vendo um desempenho terrível em relação ao CIFS para os dois servidores Windows. Nada sobre 5MB / seg em qualquer direção e geralmente é mais como 1MB / seg ou até mais lento. Rodar iperf contra qualquer uma das minhas máquinas Windows retorna uma taxa de 98MB / seg, então eu sei que não é um problema de rede.
Aqui está a parte interessante: Se eu desmontar as montagens cifs e depois montá-las através da GUI (Browse network etc etc, autenticar), as velocidades de rede aumentam exponencialmente - 50MB / segundo e superiores. Se eu desmontar e, em seguida, executar os comandos de montagem que estão em rc.local, o tráfego será novamente incrivelmente lento.
Alguém pode explicar por que esses dois métodos dariam resultados tão diferentes? Vou colar o código dos arquivos relevantes abaixo. Agradecemos antecipadamente.
pontos de montagem smb.conf:
//192.168.2.93/mythtv /var/lib/mythtv/recordings3 cifs rw,user=xxxx,password=xxxx,noauto,uid=104,gid=106,file_mode=0755,dir_mode=0775 0 0
//192.168.2.91/mythtv /var/lib/mythtv/recordings4 cifs rw,user=xxxx,password=xxxx,noauto,uid=104,gid=106,file_mode=0755,dir_mode=0775 0 0
Configurações globais do meu smb.conf, incluindo as opções de soquete que fiz durante a solução de problemas:
[global]
workgroup = MYAWESOMEWORKGROUP
server string = %h server (Samba, Mythbuntu)
log file = /var/log/samba/log.%m
max log size = 1000
syslog = 1
panic action = /usr/share/samba/panic-action %d
dns proxy = no
security = share
max protocol = NT1
socket options = TCP_NODELAY SO_RCVBUF=65536 SO_SNDBUF=65536 SO_KEEPALIVE
follow symlinks = yes
wide links = yes
unix extensions = no
E finalmente, as linhas em /etc/rc.local:
mount /var/lib/mythtv/recordings3
mount /var/lib/mythtv/recordings4
ATUALIZAÇÃO: Então eu fiz mais escavações e encontrei mais detalhes, mas nada que pudesse consertá-lo.
Parece que o GUI sob o capô usa o GVFS. Eu encontrei vários outros posts de pessoas com problemas semelhantes. Alguns deles têm o problema exatamente oposto em que as transferências de arquivos são lentas no GVFS, mas rápidas no CIFS.
A transferência de arquivos para a minha máquina do Server 2008 R2 usando o GVFS é um pouco mais rápida do que eu pensava, apesar de nada ser animado - cerca de 25MB / s. Por isso, parece que o maior problema é específico da minha caixa do Windows 2012 R2 (Still under 1MB / sec). Eu estive olhando para as coisas do ângulo do Windows e desabilitei a assinatura SMB, sem alterar o comportamento. Também notei que o servidor de 2012 está executando o SMB 3.02, e a versão do Samba na minha máquina Linux não suporta mais do que o SMB 2. Tentei forçar o Windows para o SMB 2 sem nenhum benefício.
Também notei uma discrepância interessante entre as configurações do etc / fstab e os resultados em / proc / mounts - andei mexendo com o parâmetro rsize no fstab e notei que / proc / mounts nem sempre reflete as alterações corretamente. Com nada definido, minhas montagens CIFS aparecem em montagens com rsize = 16384. Se eu mudar o rsize para 4096, isso será exibido corretamente. Mas se eu tentar algo maior que 16384, o tamanho do material será alterado para 2048. Por que isso acontece? Que tamanho devo usar e que tamanho usa o gvfs?
Vale ressaltar que todos os arquivos copiados sobre cifs são gravações muito grandes em 1080p (de 1 GB a 30 GB) e a unidade de destino é formatada com o maior tamanho de cluster que o Server 2012 R2 permitiria.
UPDATE 2: Bem, eu descobri como fazer isso / quase / utilizável. Através de muita pesquisa, descobri que poderia adicionar um arquivo cifs.conf ao /etc/modprobe.d contendo o seguinte:
options cifs CIFSMaxBufSize=130048
Depois de adicionar esse arquivo, meu arquivo / proc / mounts mostrou um tamanho de buffer maior nas montagens cifs e meu sistema quase funciona. Digo quase porque agora posso transmitir gravações de DVR se o sistema não estiver fazendo mais nada, e as cópias de arquivos estão com uma taxa de transferência de alguns MB / s.