Forum: Ruby-dev TestEnv#test_memory_leak_*, Fiddle::TestPointer#test_no_memory_leak, and Test_StringModifyExpand#tes

9361878d459f1709feec780518946ee5?d=identicon&s=25 unknown (Guest)
on 2014-07-15 06:07
(Received via mailing list)
Issue #10020 has been updated by Yui NARUSE.


Naohisa Goto wrote:
> r46791 にて、Solaris 9 以降で、以下を満たす場合に、それらの環境変数をセットして invoke_ruby するように変更しました。
>
> * 環境変数 LD_PRELOAD, LD_PRELOAD_64 (または LD_PRELOAD_32), UMEM_OPTIONS がセットされていない
> * LD_PRELOAD=libumem.so UMEM_OPTIONS=backend=mmap を付けてrubyを実行して正常終了
> * テストケース独自に、それらとコンフリクトする環境変数を与えていない
>
> 上記したように、Solaris10のsetenv/unsetenv関係の実装により、 TestEnv#test_memory_leak_shift と
TestEnv#test_memory_leak_shift はFailureのままですが、いったんこのissueは閉じます。

これ、failureのままよりskipしてしまったほうがいいのではないでしょうか。

----------------------------------------
Bug #10020: TestEnv#test_memory_leak_*,
Fiddle::TestPointer#test_no_memory_leak, and
Test_StringModifyExpand#test_modify_expand_memory_leak on Solaris
https://bugs.ruby-lang.org/issues/10020#change-47768

* Author: Naohisa Goto
* Status: Closed
* Priority: Normal
* Assignee:
* Category:
* Target version:
* ruby -v: ruby 2.2.0dev (2014-07-09) [sparc64-solaris2.10]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
Solaris 10 にて、以下のように memory leak 検出テストの Failure が出ます。(r46762 で確認)

Solarisデフォルトのlibcのmallocでは、freeしてもOSにメモリを返さないのが原因と考えています。

メモリ関係デバッグ用のライブラリ libumem を使い、UMEM_OPTIONS=backend=mmap
を指定すると、freeしたら直ちにOSにメモリを返すようになるようです。
dynamic link な実行プログラムなら、LD_PRELOAD=libumem.so UMEM_OPTIONS=backend=mmap
をセットしてコマンドを実行ということになります。

test/ruby/envutil.rb の assert_no_memory_leak 内で invoke_ruby
する際にこれらの環境変数をセットできればいいのですが、以下4点が課題と思います。

* 特定のOSに特異的な変更をどう入れるか?
* これらの環境変数が元からセットされていた時の挙動
* static link のrubyの場合
* tcmalloc など、別の malloc をリンク指定されていた場合にどうなる?

References:

*
http://stackoverflow.com/questions/346352/meaning-...
*
http://docs.oracle.com/cd/E23824_01/html/821-1465/...

~~~
 51) Failure:
TestEnv#test_memory_leak_shift [/XXXXX/test/ruby/test_env.rb:543]:
[ruby-dev:48332] [Bug #9983].
size: 38502400 => 155942912.
Expected 4.050212765957447 to be < 2.0.

 52) Failure:
TestEnv#test_memory_leak_aset [/XXXXX/test/ruby/test_env.rb:514]:
[ruby-dev:48323] [Bug #9977].
size: 21725184 => 97222656.
Expected 4.475113122171946 to be < 2.0.

 53) Failure:
Fiddle::TestPointer#test_no_memory_leak
[/XXXXX/test/fiddle/test_pointer.rb:235]:
rss: 8568832 => 12984320.
Expected 1.5152963671128108 to be < 1.5.

 55) Failure:
Test_StringModifyExpand#test_modify_expand_memory_leak
[/XXXXX/test/-ext-/string/test_modify_expand.rb:7]:
rb_str_modify_expand().
size: 13303808 => 30179328.
Expected 2.268472906403941 to be < 1.5.
~~~
This topic is locked and can not be replied to.