TOP
«
»

スピンロックで変わるかなと思ってやってみた

その結果、2割ぐらい転送効率が落ちてしまった・・・。
これじゃ意味ないじゃない。
関数呼び出しを減らす方向で検討してみよう。

書き込み処理のデータ受信ルーチン(istgt_iscsi_transfer_out)のgprofデータの
一部だけどistgt_iscsi_read_pdu()がほとんどなのでどうにも。。。
ソケットの読み出ししたいけど相手が遅いよ!って状態なのだろうか。

R2Tリクエストをイニシエータになげて必要な書き込みデータを受信する。
その後、正しい部分データなら連続したI/Oバッファに格納する、
それ以外はキューにコピーを保存して書き込み後に再処理する。
転送要求サイズに一致するまで繰り返す。


                0.02       19.94   23036/23036       worker [1]
[15]    18.4    0.02       19.94   23036         istgt_iscsi_transfer_out [15]
                0.02       16.09  110778/324387      istgt_iscsi_read_pdu [3]
                0.00        3.45   33823/404133      istgt_iscsi_write_pdu [4]
                0.31        0.00  127922/823078      memcpy [28]
                0.01        0.03  105061/2833592     free [40]
                0.01        0.00    5995/1723731     memset [29]
                0.00        0.01   33200/4674885     __pthread_mutex_lock [47]
                0.00        0.00    6014/478204      istgt_queue_enqueue [71]
                0.00        0.00    6016/2153019     xmalloc [34]
                0.00        0.00   33653/10313149     pthread_mutex_unlock [54]
                0.00        0.00  210104/2622567     xfree [92]
                0.00        0.00    6005/12005       istgt_iscsi_copy_pdu [113]
                0.00        0.00    6006/998597      istgt_queue_count [88]

一方、読み込み処理を含むデータ/レスポンス送信部分はこんな感じ。
連続したI/Oバッファに入ったデータをオフセットをずらしつつCRC計算して送信するだけ。


                0.04       28.09  102574/102574      istgt_iscsi_task_response [6]
[9]     25.9    0.04       28.09  102574         istgt_iscsi_transfer_in [9]
                0.03       27.99  274040/404133      istgt_iscsi_write_pdu [4]
                0.01        0.04  272135/4674885     __pthread_mutex_lock [47]
                0.01        0.00  272976/10313149     pthread_mutex_unlock [54]

タグ: , ,

コメントをどうぞ