Actions
Backport #5585
closedwindowsでファイルへの書き込みが異様に遅い
Description
r31901の修正により、io_binwriteの呼び出しの都度呼び出されるio_fflush内でfsyncがかかり、ファイルへの書き込みが極度に遅くなります。
(ruby-1.9.3-p0も同様)
Files
Actions
Added by arton (Akio Tajima) over 10 years ago. Updated over 10 years ago.
Description
r31901の修正により、io_binwriteの呼び出しの都度呼び出されるio_fflush内でfsyncがかかり、ファイルへの書き込みが極度に遅くなります。
(ruby-1.9.3-p0も同様)
Files
io.c.patch (1.18 KB) io.c.patch | arton (Akio Tajima), 11/07/2011 09:17 PM |
This issue was solved with changeset r33651.
Akio, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
io.c (io_fflush): remove fsync().
io.c (rb_io_flush, rb_io_rewind): fsync() here.
these changes reduces fsync() calls to improve performance.
first reported at [ruby-list:48515] by ak7 at mail.goo.ne.jp .
[Bug #5585]
1.9.3にバックポートが必要だそうです。
レビュー待ち。
バックポート作業自体はyuguiさんがするのかしら。
trunkの修正を元にした添付パッチの以下について確認しました。
・io.cで問題となっている箇所からのfsyncの除去と、rb_io_flushおよびrb_io_rewindへのfsyncの追加
・ioのテストのパス
・100MBファイルの書き込みがそれほど遅くないこと
・x64-mswin64で[ruby-list:48515]のスクリプトで以下を得ました。
Write:1.639093(s)
Read :1.672095(s)
ステータスとして、「confirmed」とか「reviewed」とかが要るのかな?
先のエントリの修正:
trunkの修正を元にした添付パッチの以下について確認して、期待した修正であることを確認しました。
・io.cで問題となっている箇所からのfsyncの除去と、rb_io_flushおよびrb_io_rewindへのfsyncの追加→されています。
・ioのテストがパスすること。→パスしました。
・100MBファイルの書き込みがそれほど遅くないこと
・x64-mswin64で[ruby-list:48515]のスクリプトで以下を得ました。
Write:1.639093(s)
Read :1.672095(s)
これは、パッチ前のWriteの所要時間(約180秒)から大幅な向上です。
This issue was solved with changeset r33658.
Akio, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.