Backport #5585
closedwindowsでファイルへの書き込みが異様に遅い
Description
r31901の修正により、io_binwriteの呼び出しの都度呼び出されるio_fflush内でfsyncがかかり、ファイルへの書き込みが極度に遅くなります。
(ruby-1.9.3-p0も同様)
Files
Updated by usa (Usaku NAKAMURA) about 13 years ago
- Status changed from Open to Closed
- % Done changed from 0 to 100
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]
Updated by usa (Usaku NAKAMURA) about 13 years ago
- Tracker changed from Bug to Backport
- Project changed from Ruby master to Backport193
- Category deleted (
core) - Status changed from Closed to Open
- Target version deleted (
2.0.0)
1.9.3にバックポートが必要だそうです。
Updated by usa (Usaku NAKAMURA) about 13 years ago
- Status changed from Open to Assigned
- Assignee changed from usa (Usaku NAKAMURA) to arton (Akio Tajima)
レビュー待ち。
バックポート作業自体はyuguiさんがするのかしら。
Updated by arton (Akio Tajima) about 13 years ago
- File io.c.patch io.c.patch added
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」とかが要るのかな?
Updated by arton (Akio Tajima) about 13 years ago
先のエントリの修正:
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秒)から大幅な向上です。
Updated by arton (Akio Tajima) about 13 years ago
- Status changed from Assigned to Closed
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.
- io.c (io_fflush): remove fsync().
- io.c (rb_io_flush, rb_io_rewind): fsync() here.
These pathces are backports of trunk r33651 for [Bug #5585]