トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

BugTrack-R備忘録/16

R備忘録 /状態空間モデリング/donlp2/その他のメモ

R備忘録 - 記事一覧

64ビットLinux機で2Gバイト以上のメモリを使う

  • 投稿者: ひな
  • カテゴリ: なし
  • 優先度: 普通
  • 状態: 完了
  • 日時: 2008年12月08日 19時47分41秒

内容

  • Rで2Gバイト以上のメモリを使えないと出来ないような、分析が発生した.
    • 何か工夫をすれば出来るのかも知れないが、そんなマシンがあったもので・・・
  • 同僚の隠しサーバー!?にAthlon64でメモリが8Gバイト乗っているLinuxマシンがあったので聞いてみたら、1プロセスで2Gバイト以上使えるはずとのこと.
    • 32ビット機のLinuxだと普通は1プロセス2Gまで?
  • ということで、Rをインストールさせてもらって、その大きなデータを扱う分析が出来るかどうか、トライしてみた.
    • 分析は出来たけどここではメモリが確保できるかどうかをレポーティング

Rをインストールするマシンの情報

$ uname -a
Linux zzz 2.6.15-1.1833_FC4smp #1 SMP Wed Mar 1 23:55:52 EST 2006 x86_64 x86_64 x86_64 GNU/Linux
$ free
             total       used       free     shared    buffers     cached
Mem:       7172508    5679844    1492664          0      37056    5275572
-/+ buffers/cache:     367216    6805292
Swap:            0          0          0
  • 7Gしかないように見えるが、OSで認識できるのが7Gとのこと(同僚談).つまり7Gです.
  • ちなみに、スワップさせないようにスワップ領域をはずしてます(同僚談).

Rをインストール

  • Rのインストールがメインではないのでかなりはしょる
tar xvf R-2.8.0.tar.gz
./configure
make
LANG=C LC_ALL=C make check
(root権限になって)
make install
(以上)

まずはいつも使っているLinux機(32ビット)で

> a <- matrix(0, 1024*1024)
> is.double(a)
[1] TRUE
> a <- matrix(0, 1024*1024*1024)
以下にエラーmatrix(0, 1024 * 1024 * 1024) : 長さ 1073741824 のベクトルを割り当てることができません
> a <- matrix(0, 1024*1024*100)
> gc()
            used  (Mb) gc trigger  (Mb)  max used  (Mb)
Ncells    233772   6.3     467875  12.5    350000   9.4
Vcells 104960845 800.8  117212752 894.3 106009876 808.8
> a <- matrix(0, 1024*1024*200)
> gc()
            used   (Mb) gc trigger   (Mb)  max used   (Mb)
Ncells    233772    6.3     467875   12.5    350000    9.4
Vcells 209818445 1600.8  330655019 2522.7 314676070 2400.8
> a <- matrix(0, 1024*1024*300)
エラー:サイズ 2457600 Kb のベクトルを割り当てることができません
  • この状態での「ps」コマンド
  PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
14716  0.4 39.9 1667532 1655964 pts/33 S+ 08:19   0:09 /usr/local/lib/R/bin/exec/R --no-save --no-restore
  • VSZ・RSSとも約1.6Gバイトを使ってます.

Athlon64マシンで

> a <- matrix(0, 1024*1024)
> is.double(a)
[1] TRUE
> a <- matrix(0, 1024*1024*1024)
 エラー:  サイズ 8.0 Gb のベクトルを割り当てることができません
  • ↑OSで7Gしか認識できていないのであたりまえか・・・
> a <- matrix(0, 1024*1024*100)
> gc()
            used  (Mb) gc trigger  (Mb)  max used  (Mb)
Ncells    105851   5.7     350000  18.7    350000  18.7
Vcells 104977007 801.0  117230573 894.4 106025977 809.0
> a <- matrix(0, 1024*1024*200)
> gc()
            used   (Mb) gc trigger   (Mb)  max used   (Mb)
Ncells    105851    5.7     350000   18.7    350000   18.7
Vcells 209834607 1601.0  330671985 2522.9 314692228 2401.0
> a <- matrix(0, 1024*1024*300)
> gc()
            used   (Mb) gc trigger   (Mb)  max used   (Mb)
Ncells    105851    5.7     350000   18.7    350000   18.7
Vcells 314692207 2401.0  550872945 4202.9 524407428 4001.0
> a <- matrix(0, 1024*1024*400)
> gc()
            used   (Mb) gc trigger   (Mb)  max used   (Mb)
Ncells    105851    5.7     350000   18.7    350000   18.7
Vcells 419549807 3201.0  771073905 5882.9 734122628 5601.0
> a <- matrix(0, 1024*1024*500)
 エラー:  サイズ 3.9 Gb のベクトルを割り当てることができません
  • ↑3.9G以上使えないわけではなくて、前の変数で3.2Gほど使っているので
  • ↓なのでいったん「a」を削除してから
> rm(list="a")
> gc()
         used (Mb) gc trigger   (Mb)  max used   (Mb)
Ncells 105986  5.7     350000   18.7    350000   18.7
Vcells 119431  1.0  616859124 4706.3 734122628 5601.0
> a <- matrix(0, 1024*1024*500)
> gc()
            used   (Mb) gc trigger   (Mb)  max used   (Mb)
Ncells    105990    5.7     350000   18.7    350000   18.7
Vcells 524407432 4001.0  647782080 4942.2 734122628 5601.0
  • ↑成功
> rm(list="a")
> a <- matrix(0, 1024*1024*600)
> gc()
            used   (Mb) gc trigger   (Mb)  max used   (Mb)
Ncells    105990    5.7     350000   18.7    350000   18.7
Vcells 629265032 4801.0  714343743 5450.1 734122628 5601.0
> rm(list="a")
> a <- matrix(0, 1024*1024*700)
> gc()
            used   (Mb) gc trigger   (Mb)  max used   (Mb)
Ncells    105990    5.7     350000   18.7    350000   18.7
Vcells 734122632 5601.0  809707597 6177.6 734122628 5601.0
> rm(list="a")
> gc()
         used (Mb) gc trigger   (Mb)  max used   (Mb)
Ncells 105986  5.7     350000   18.7    350000   18.7
Vcells 119431  1.0  647766077 4942.1 734122784 5601.0
> a <- matrix(0, 1024*1024*800)
> gc()
            used   (Mb) gc trigger   (Mb)  max used   (Mb)
Ncells    105990    5.7     350000   18.7    350000   18.7
Vcells 838980232 6401.0  925313130 7059.6 838980252 6401.0
> rm(list="a")
> gc()
         used (Mb) gc trigger   (Mb)  max used   (Mb)
Ncells 105986  5.7     350000   18.7    350000   18.7
Vcells 119431  1.0  740250504 5647.7 838980384 6401.0
> a <- matrix(0, 1024*1024*900)
 エラー:  サイズ 7.0 Gb のベクトルを割り当てることができません
  • ↓「ps」コマンドでメモリ使用状況を見るために「a <- matrix(0, 1024*1024*800)」でメモリを消費
> gc()
         used (Mb) gc trigger   (Mb)  max used   (Mb)
Ncells 105993  5.7     350000   18.7    350000   18.7
Vcells 119458  1.0  592200403 4518.2 838980384 6401.0
> a <- matrix(0, 1024*1024*800)
> gc()
            used   (Mb) gc trigger   (Mb)  max used   (Mb)
Ncells    105990    5.7     350000   18.7    350000   18.7
Vcells 838980232 6401.0  925313130 7059.6 838980384 6401.0
  • ↑↓約6.6Gを使用
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
admin    13337 28.0 91.7 6647288 6579812 pts/6 S+   08:59   2:55 /usr/local/lib64/R/bin/exec/R

コメント