1

ファイルをメモリにロードする MPI を使用して、単純な並列アプリケーションを開発しています。そのファイルは、NFS 経由でコンピューター クラスターのノードにエクスポートされます。場合によっては、NFS のパフォーマンスが大幅に低下し、何千もの追加の TCP パケットがサーバーからクライアントに送信されることに気付き、コードでの fseek() の使用に問題があることを突き止めました。

//Seek to data and load them to array
fseek ( fp, ( unsigned int ) dec_number + start, SEEK_SET );

for ( i = 0; i < n * mpi_n; i++ ) {
    if ( ! feof ( fp ) )
        text[i] = fgetc ( fp );

    if ( i > 0 && n > mpi_n && i % mpi_n == 0 )
        fseek ( fp, n - mpi_n, SEEK_CUR );
}
fclose ( fp );

fseek() を使用しない同じコードは問題なく動作するため、各 fseek() の後にサーバーが実際にファイルの一部を再送信する可能性はありますか? このパフォーマンスはどのように改善できますか?

Time with cold NFS cache, without fseek(): ~4 sec
Time with hot NFS cache, without fseek(): ~3 sec
Time with cold NFS cache, with fseek(): ~12 sec
Time with hot NFS cache, with fseek(): ~3 sec

10 ノードのクラスター、コールド NFS キャッシュおよび fseek() を含む 300 MB のファイルを含む nfswatch のスナップショット:

Total packets:
1903459 (network)   544803 (to host)        0 (dropped)

Packet counters:
NFS3 Read:                  116290      21%
NFS3 Write:                     10       0%
NFS Read:                        0       0%
NFS Write:                       0       0%
NFS Mount:                       0       0%
Port Mapper:                     0       0%
RPC Authorization:              29       0%
Other RPC Packets:               0       0%

TCP Packets:                544386     100%
UDP Packets:                    17       0%
ICMP Packets:                    0       0%
Routing Control:                 0       0%
Address Resolution:              0       0%
Reverse Addr Resol:              0       0%
Ethernet Broadcast:              0       0%
Other Packets:                  49       0%

10 ノードのクラスター、コールド NFS キャッシュを使用し、fseek() を使用しない 2 GB のファイルを含む nfswatch のスナップショット:

Total packets:
251804 (network)   102650 (to host)        0 (dropped)

Packet counters:
NFS3 Read:                   37039      36%
NFS3 Write:                      1       0%
NFS Read:                        0       0%
NFS Write:                       0       0%
NFS Mount:                       0       0%
Port Mapper:                     0       0%
RPC Authorization:               2       0%
Other RPC Packets:               0       0%

TCP Packets:                102543     100%
UDP Packets:                    30       0%
ICMP Packets:                    1       0%
Routing Control:                 0       0%
Address Resolution:              0       0%
Reverse Addr Resol:              0       0%
Ethernet Broadcast:              0       0%
Other Packets:                  41       0%

クライアントは、次のマウント コマンドを使用してマウントされます。

/nfs タイプ nfs の /nfs (rw,rsize=8192,wsize=8192,timeo=14,intr)

4

0 に答える 0