NASでファイルを読み書きするためにWindowsデスクトップクライアントで実行されたSambaシステムコール

NASでファイルを読み書きするためにWindowsデスクトップクライアントで実行されたSambaシステムコール

Windowsデスクトップは、1GBのイーサネットケーブルを介してUbuntuがインストールされているプラ​​イベートNAS(開発中)に接続します。 straceは、Sambaが困難な操作を実行している間にNASからファイル(> 1GBのサイズ)を読み書きするときにSambaプロセスのシステムコールを監視するために使用されます。

以下はstrace出力の一部です。

mmap2(NULL, 1052672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb4eaf000 <0.000075>
pread(31, "\255\343.\372e\357F\315\357\247\21o{\331\223\336\216\235\367\\#L\312\220W\323\226\303\302\21\35\336"..., 1048576, 13631488) = 1048576 <0.010848>
writev(34, [{"\3261\347S\205\2\347\325\316\325\214LT{\337\256!\351\246\266\342b\204i\347\221:x$\r\5\227"..., 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>

これは、読み取られたすべてのバイトがキャッシュに書き込まれるまで続き、その後は新しい preadシステムコールが続きます。 ( mmap2-ed メモリがマッピング解除される前)

私は後で呼び出された関数がますますwritev多くのバイトを返すことに気づきました。

mmap2(NULL, 1052672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb4eaf000 <0.000304>
pread(31, "\343\367\235\227Q;\3717\240<\nl\326ff\0\361 J\37\253T\247\352\207\376\372\273\341\360\370y"..., 1048576, 458227712) = 1048576 <0.032897>
writev(34, [{"\t\21\6\301\366hPq\274\373\353x\332X\377\310\275<J\4z\261\0\227\24\230\256\350\300\16\355\203"..., 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>
  • なぜこれが起こるのですか? I / Oスケジューラによって異なりますか?使用されるI / OスケジューラはROWです。
  • どのような方法で読み書きI/Oに影響を与えることができますか?ブロックサイズ?スピードを上げたかったのですが、大きなものから始めてみてはいかがでしょうか?writev ブロックサイズ最初から。もしブロックサイズpread関数戻り値の正しい名前ですwritev。明らかにあるので、用語を区別することは困難です。ブロックサイズファイルだけでなくブロックサイズディスク用。

  • ddたとえば、次を使用するとパラメータを介してbsファイルに影響しますか?ブロックサイズ?自己割引ブロックサイズフォーマット時間によって決まり、すぐに変更することはできません。

  • gettimeofday最後に、関数呼び出しが必要ないと思って何とか防ぐことができますか、それとも私が間違っていますか?

質問の一部が私の知識の深刻な欠如を明らかにした場合は申し訳ありません。しかし、私は本当にすべての専門用語を整理し、Linuxの世界に入門するよう努めています。

ベストアンサー1

おすすめ記事