O sistema Samba solicita a leitura / gravação de arquivos de / para NAS emitidos pelo cliente de área de trabalho do Windows

1

O computador desktop Windows está conectado via cabo Ehternet de 1 GB ao NAS pessoal (em desenvolvimento) com o Ubuntu nele. Durante a leitura e gravação de arquivos (tamanho de > 1GB) de / para strace NAS foi realizado para monitorar as chamadas do sistema de processo samba, devido ao fato de que o samba é o que está fazendo um trabalho árduo.

Abaixo está a pequena seção da saída da strace:

mmap2(NULL, 1052672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb4eaf000 <0.000075>
pread(31, "53.2e7F577o{136657\#L20W36326"..., 1048576, 13631488) = 1048576 <0.010848>
writev(34, [{"617S575654LT{76!1662b4i71:x$\r7"..., 999020}], 1) = 49640 <0.000451>
gettimeofday({6146, 475882}, NULL)      = 0 <0.000282>
gettimeofday({6146, 476842}, NULL)      = 0 <0.000152>
poll([{fd=10, events=POLLIN|POLLHUP}, {fd=6, events=POLLIN|POLLHUP}, {fd=8, events=POLLIN|POLLHUP}, {fd=34, events=POLLIN|POLLOUT|POLLHUP}], 4, 57236) = 1 ([{fd=34, revents=POLLOUT}]) <0.000202>

Isso continua até que todos os bytes lidos sejam gravados no cache, após o qual a nova chamada do sistema pread é seguida e assim por diante. (antes que a memória mmap2 -ed seja desfeita)

O que eu noto é que, mais tarde, as funções writev retornaram números de bytes maiores e maiores, por exemplo

mmap2(NULL, 1052672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb4eaf000 <0.000304>
pread(31, "3757Q;170<\nl6ff
mmap2(NULL, 1052672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb4eaf000 <0.000075>
pread(31, "53.2e7F577o{136657\#L20W36326"..., 1048576, 13631488) = 1048576 <0.010848>
writev(34, [{"617S575654LT{76!1662b4i71:x$\r7"..., 999020}], 1) = 49640 <0.000451>
gettimeofday({6146, 475882}, NULL)      = 0 <0.000282>
gettimeofday({6146, 476842}, NULL)      = 0 <0.000152>
poll([{fd=10, events=POLLIN|POLLHUP}, {fd=6, events=POLLIN|POLLHUP}, {fd=8, events=POLLIN|POLLHUP}, {fd=34, events=POLLIN|POLLOUT|POLLHUP}], 4, 57236) = 1 ([{fd=34, revents=POLLOUT}]) <0.000202>
1 J3T727623100y"..., 1048576, 458227712) = 1048576 <0.032897> writev(34, [{"\t16hPq433x2X705<Jz1
mmap2(NULL, 1052672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb4eaf000 <0.000304>
pread(31, "3757Q;170<\nl6ff%pre%1 J3T727623100y"..., 1048576, 458227712) = 1048576 <0.032897>
writev(34, [{"\t16hPq433x2X705<Jz1%pre%7060053"..., 674900}], 1) = 373760 <0.002618>
gettimeofday({6164, 906348}, NULL)      = 0 <0.000149>
gettimeofday({6164, 907318}, NULL)      = 0 <0.000149>
poll([{fd=10, events=POLLIN|POLLHUP}, {fd=6, events=POLLIN|POLLHUP}, {fd=8, events=POLLIN|POLLHUP}, {fd=34, events=POLLIN|POLLOUT|POLLHUP}], 4, 38805) = 1 ([{fd=34, revents=POLLOUT}]) <0.000199>
7060053"..., 674900}], 1) = 373760 <0.002618> gettimeofday({6164, 906348}, NULL) = 0 <0.000149> gettimeofday({6164, 907318}, NULL) = 0 <0.000149> poll([{fd=10, events=POLLIN|POLLHUP}, {fd=6, events=POLLIN|POLLHUP}, {fd=8, events=POLLIN|POLLHUP}, {fd=34, events=POLLIN|POLLOUT|POLLHUP}], 4, 38805) = 1 ([{fd=34, revents=POLLOUT}]) <0.000199>
  • Por que isso está acontecendo? Isso depende do agendador de E / S? O agendador de E / S usado é ROW.
  • Posso de alguma forma influenciar na leitura e escrita de blocos de E / S ? Eu quero acelerar as coisas, então porque não começar com grandes tamanhos de blocos writev desde o início. Se tamanho do bloco for o nome correto para os valores de retorno das funções pread e writev . É difícil distinguir a terminologia, já que há evidentemente tamanho de bloco para arquivos, bem como tamanho de bloco para discos.

  • Quando estou usando dd , por exemplo, estou usando o parâmetro bs influenciando o arquivo tamanho do bloco ? Como o tamanho do bloco é determinado no tempo de formatação e não há como alterá-lo em tempo real.

  • E, por último, posso de alguma forma impedir a chamada à função gettimeofday , uma vez que não vejo a necessidade ou estou errado?

Desculpe se algumas das perguntas revelam uma alarmante falta de conhecimento, mas estou realmente tentando limpar toda a terminologia junto com os passos do meu bebê para o reino do Linux.

    
por Krcevina 25.11.2015 / 16:27

0 respostas