フラッシュ向け Linux スワップシステムの評価 The Evaluation of Flash

一般社団法人 電子情報通信学会
THE INSTITUTE OF ELECTRONICS,
INFORMATION AND COMMUNICATION ENGINEERS
信学技報
IEICE Technical Report
フラッシュ向け Linux スワップシステムの評価
丹 英之†
§
緑川 博子‡
§
†株式会社アルファシステムズ 〒211-0053 神奈川県川崎市中原区上小田中 6-6-1
‡成蹊大学理工学部 〒180-8633 東京都武蔵野市吉祥寺北町 3-3-1
§ JST CREST
E-mail:
あらまし
†[email protected], ‡[email protected]
物理メモリサイズを超えるプロセスの実行を目的とし,フラッシュストレージ向けに提案された
Linux スワップシステムの有効性について PCIe バス接続型フラッシュストレージを用い評価した.その結果,アプ
リケーションが拡張メモリとしてフラッシュストレージを利用する場合,スワップデバイスとして malloc(3)を用い
るよりも,ファイルシステムをとしてファイル mmap(2)で用いる方が,現時点では性能を引き出せることがわかっ
た.そこで,既存アプリケーションでも簡単にフラッシュ拡張メモリを利用できるようにするためのフレームワー
クを試作した.
キーワード Linux, 仮想記憶,mmap,flash メモリ,不揮発性メモリ
The Evaluation of Flash-aware Linux Swap System
Hideyuki TAN†
§
Hiroko MIDORIKAWA‡
§
†ALPHA SYSTEMS, INC. 6-6-1 Kami-kodanaka, Nakahara-ku, Kawasaki, 211-0053 Japan
‡Seikei University 3-3-1 Kichijoji-Kitamachi, Musashino-shi, Tokyo, 180-8633 Japan
§ JST CREST
E-mail:
†[email protected], ‡[email protected]
Abstract In order to use a PCIe-connected flash storage as extended memory beyond DRAM main memory, the newly
proposed Linux swap system designed for a flash storage was evaluated.
Results showed that using malloc(3) under the new
swap system, where the flash storage was used as a swap device, brought us limited advantage, compared with using file
mmap(2), where the flash storage was used as a ordinary file system. By these observations, we proposed a user-friendly
framework to utilize a flash-based extended memory for existing application programs and users.
Keyword Linux, Virtual Memory, mmap, flash memory, non-volatile memory
1. は じ め に
として主記憶装置と二次記憶装置の間に用意すること
最先端の科学技術において,シミュレーションや解
で,メモリに階層をつくり,システムメモリの大容量
析などに用いられる高性能計算機は必要不可欠である.
化と,キャッシュ・プリフェッチの手法でメモリバン
このようなハイパフォーマンスコンピューティングの
ド幅が不足する問題を解決することが検討されている.
需要はますます高まっており,システムの高性能化に
我々は物理メモリサイズを超える問題サイズに対
向けた技術課題と研究開発ロードマップが公開されて
応 す る た め , PCI バ ス 接 続 型 の フ ラ ッ シ ュ ス ト レ ー ジ
い る [1].そ の 中 で ,プ ロ セ ッ サ 性 能 に 対 す る メ モ リ 帯
を 既 存 の UNIX API を 用 い , 拡 張 メ モ リ と し て 利 用 す
域・容量が低下する,メモリウォール問題が挙げられ
る た め の 検 討 を 行 っ て き た [2].こ の 検 討 で は ,ス ワ ッ
て い る . こ の 課 題 を 解 決 す る た め , NAND 型 フ ラ ッ シ
プ デ バ イ ス よ り フ ァ イ ル mmap(2)で の マ ッ プ ト フ ァ イ
ュ メ モ リ を 始 め と し た ,MRAM,ReRAM, FeRAM な ど
ルを置くストレージとする手法がよい結果を得ている.
の 様 々 な 特 性 を 持 つ 不 揮 発 性 メ モ リ を 1.5 次 記 憶 装 置
一方,我々と同様の目的で,フラッシュストレージ
This article is a technical report without peer review, and its polished and/or extended version may be published elsewhere.
Copyright ©2013 by
IEICE
向 け の ス ワ ッ プ シ ス テ ム が Linux カ ー ネ ル へ の パ ッ チ
と し て 提 案 さ れ た [3][4].
そこで,本稿ではこの最近提案されているフラッシ
ュストレージ向けスワップシステムを評価すると共に,
その結果を踏まえ新しく作成した,フラッシュストレ
ージを拡張メモリとして扱うメモリアロケータについ
て述べる.
表 1 実験環境
部位
CPU
Memory
Distribution
Kernel
DDR3-1600 ECC 8GiB x4 (32GiB)
CentOS 6.4 (x86_64)
- 2.6.32 (2.6.32-358.el6, CentOS6.4)
- fastswap (3.6.0 + nvm-fast-swap)
半 導 体 ベ ー ス の 記 憶 メ デ ィ ア は ,HDD の よ う な 回 転
ブロックデバイスでのアクセスではなく,新しいアク
Xeon E5-2650 2.00GHz x1 (8cores)
- 3.6.0
2. フ ラ ッ シ ュ 向 け ス ワ ッ プ シ ス テ ム
式メディアとは特性が全く異なることから,レガシな
概要
- 3.10.9
Compiler / option
gcc version 4.4.7 20120313 / -O3
セ ス 方 法 の た め の イ ン タ フ ェ ー ス の 提 案 を Fusion-io
社 が 行 っ て い る [4][5].こ の プ ロ ジ ェ ク ト の 一 つ に ,物
理メモリサイズを超えるプロセスを動かす際のスワッ
プ 先 に フ ラ ッ シ ュ メ モ リ を 用 い る Flash-aware Linux
swap が あ る [3][4]. Linux 3.6.0 を 元 に 開 発 が 行 わ れ て
お り GitHub に て nvm-fast-swap と い う リ ポ ジ ト リ で 公
開 さ れ て い る [6]. こ の nvm-fast-swap で は , 主 に ス ワ
ップシステムにあるグローバルロックの廃止や,スワ
ップ情報参照における各種ロックをスワップパーティ
シ ョ ン や CPU ご と に 割 り 当 て る こ と で ,ロ ッ ク の 細 粒
度化が試みられている.特に,匿名メモリ割り当てツ
リ ー 走 査 時 の 排 他 制 御 を Mutex か ら セ マ フ ォ に 変 更 し
た 修 正 や ,TLB フ ラ ッ シ ュ 時 の ロ ッ ク 細 粒 度 化 な ど は ,
Linux カ ー ネ ル に も 取 り 込 ま れ て い る [7][8][9].プ ロ ジ
ェクトは不揮発性メモリに対応する新しいインタフェ
ー ス の 提 案 で は あ る が , nvm-fast-swap は HDD を ス ワ
ップデバイスとする場合と同様,フラッシュメモリを
ブロックデバイスとしてアクセスしている.
今 回 は , CentOS6.4 デ フ ォ ル ト の kernel で あ る
2.6.32-358.el6(以 下 ,2.6.32)及 び ,nvm-fast-swap(以 下 ,
fastswap),元 と な っ た 3.6.0,そ し て 最 近 リ リ ー ス さ れ
nvm-fast-swap で の 修 正 が い く つ か 取 り 込 ま れ て い る
3.10.9 で , ス ワ ッ プ シ ス テ ム の 性 能 を 比 較 し た .
3. フ ラ ッ シ ュ ス ト レ ー ジ の 基 本 I/O 性 能
先ず,本研究で用いるフラッシュストレージの性能
図 1 フ ラ ッ シ ュ ス ト レ ー ジ の IO バ ン ド 幅
バイスとして使用した.このブロックデバイスをファ
イル保存先として使用する場合はファイルステム
ext4fs で , ス ワ ッ プ デ バ イ ス と し て 使 用 す る 場 合 は ス
ワ ッ プ 領 域 の 形 式 SWAPSPACE2 で フ ォ ー マ ッ ト し た .
実 験 環 境 を 表 1 に 示 す . FIO の 計 測 で は kernel2.6.32
を用いた.
FIO ベ ン チ マ ー ク で は , 発 行 す る IO 操 作 や そ の IO
サ イ ズ を 指 定 す る こ と が で き る . IO 操 作 は ,
read(2)/write(2)+lseek(2)( 以 下 , RW-IO 操 作 ) , ま た ,
を , IO 性 能 ベ ン チ マ ー ク FIO2.1(Flexible IO test)[10]
mmap(2)+memcpy(3)+msync(2)(以 下 ,M-IO 操 作 )の 組 合
を用いて調査した.
せ で 計 測 し た .M-IO 操 作 は ,対 象 と す る フ ァ イ ル を 仮
こ れ ま で Fusion-io 社 の PCIe バ ス 型 接 続 フ ラ ッ シ ュ
ス ト レ ー ジ ioDrive2 MLC を 用 い て き た が ,今 回 は 低 コ
想 メ モ リ の ア ド レ ス 空 間 に マ ッ プ し ,IO サ イ ズ 単 位 で
当該アドレスのメモリを読み書きし,その後,ファイ
ス ト で 入 手 し 易 い Intel SSD 910(400GB, 1/2 Height
ルへの同期命令を発行する手法であり,後述するフラ
PCIe 2.0, 25nm, MLC)を 用 い た . こ の デ バ イ ス も PCIe
ッシュストレージをメモリとみなして使用する手段の
バ ス で マ ザ ー ボ ー ド と 接 続 さ れ る .PCIe バ ス か ら 先 は
一つである.
LSI SAS2008 SAS コ ン ト ロ ー ラ と SAS/NAND ASIC を
経 由 し て , NAND フ ラ ッ シ ュ モ ジ ュ ー ル へ と 繋 が る .
OS か ら は 2 個 の ブ ロ ッ ク デ バ イ ス と し て 検 出 さ れ る
の で , こ れ ら ブ ロ ッ ク デ バ イ ス を ソ フ ト ウ ェ ア RAID
で ス ト ラ イ ピ ン グ (RAID0)し , 一 つ の 仮 想 ブ ロ ッ ク デ
バッファ,キャッシュの影響を無くすため物理メモ
リ サ イ ズ を 超 え た 40GiB の フ ァ イ ル を 対 象 と し ,
RW-IO 操 作 と M-IO 操 作 に て ,1 ス レ ッ ド で 計 測 し た .
図 1 は ,IO サ イ ズ 1MiB の シ ー ケ ン シ ャ ル リ ー ド ・ ラ
イ ト し た 場 合 (図 左 端 )と ,4KiB か ら 4MiB の IO サ イ ズ
で ラ ン ダ ム リ ー ド ・ ラ イ ト し た 場 合 の IO バ ン ド 幅 で
ある.
RW-IO 操 作 の ラ ン ダ ム ラ イ ト は , IO サ イ ズ 512KiB
ま で は 720MiB/s を 超 え る IO バ ン ド 幅 を 計 測 し た が ,
IO サ イ ズ 256KiB で は 512KiB の 57%と , IO バ ン ド 幅
の 低 下 が 見 ら れ た .一 方 ,ラ ン ダ ム リ ー ド は ,IO サ イ
ズ 4MiB で の IO バ ン ド 幅 862MiB/s を ピ ー ク に IO サ イ
ズの縮小と共に低下したが,ランダムライトと同様,
IO サ イ ズ 256KiB を 境 に 512KiB の 53%と 大 き く 低 下
物理メモリサイズ
した.これは,ストライピングのチャンクサイズを
以上
256KiB に し て い た た め ,256KiB 以 下 の IO サ イ ズ で 発
行 さ れ た IO 操 作 を 分 割 し て 実 際 の 物 理 ブ ロ ッ ク デ バ
イスに発行できないことに起因するものと考えられる.
一 方 , M-IO 操 作 で の ラ ン ダ ム リ ー ド ・ ラ イ ト の IO
バ ン ド 幅 は ,10〜 50MiB/s と RW-IO 操 作 に 比 べ 低 い 性
能 に 留 ま っ て い る . ioDrive2 を 用 い た 計 測 で も , 同 様
の 傾 向 が 得 ら れ て い る [2].
M-IO 操 作 に よ る シ ー ケ ン シ ャ ル ラ イ ト で の IO バ ン
ド 幅 は , 50〜 60MiB/s で あ っ た が , シ ー ケ ン シ ャ ル リ
図 2 malloc/mmap 確 保 と メ モ リ バ ン ド 幅 (STREAM)
など前処理が必要になる.
今 回 は , malloc(3)経 由 で ス ワ ッ プ デ バ イ ス と し て 使
ー ド で は 793MiB/s と , RW-IO 操 作 で の シ ー ケ ン シ ャ
う 方 法 (以 下 , malloc 確 保 ), 及 び , 各 ベ ン チ マ ー ク の
ル リ ー ド よ り 高 い IO バ ン ド 幅 を 得 た . こ れ は , フ ァ
メ モ リ 確 保 処 理 に 手 を 入 れ , フ ァ イ ル を mmap(2)す る
イルにマッピングしているページの先読みによる効果
方 法 (以 下 ,mmap 確 保 )で 計 測 し た .マ ッ プ す る フ ァ イ
が出ているものと考えられる.
ルは,フラッシュストレージをマウントしているパス
計 測 条 件 は 異 な る が , ioDrive2 の 計 測 と 比 較 す る と
上 に 生 成 し , truncate(2)で 確 保 し た い メ モ リ サ イ ズ と
SSD910 の IO バ ン ド 幅 は 平 均 し て 約 6 割 程 度 ,レ イ テ
同じサイズに拡張した.
ンシは 2 倍程度であった.しかし,経済的コストの側
4.2. メモリ性 能 ベンチマーク STREAM
面では数倍の差があり,コストパフォーマンスに優れ
STREAM は ,メ モ リ バ ン ド 幅 測 定 用 の ベ ン チ マ ー ク
たデバイスであると言える.
で あ る . double 型 の 1 次 元 配 列 a[N],b[N],c[N]に 対 し ,
4. 物 理 メ モ リ を 超 え た 問 題 サ イ ズ
OpenMP に て 並 列 化 さ れ た COPY(c[i]=a[i]), SCALE(b
物理メモリサイズを超えたデータサイズを指定し
[i]=k*c[i]),
ADD(c[i]=a[i]+b[i]),
TRIAD(a[i]=b[i]+k*c
たベンチマークを行うことで,前節で述べたフラッシ
[i])の 操 作 を 1 セ ッ ト と し て 繰 り 返 し 実 行 し ,そ れ ぞ れ
ュストレージを拡張メモリとして使用した場合の性能
の操作でのメモリバンド幅を出力する.扱うデータ量
調査を行った.初めに,ストレージを拡張メモリとし
に対し演算が少ないため,メモリアクセス速度が実行
て 使 用 す る 方 法 に つ い て , そ の 後 , 各 kernel で の メ モ
結果に影響する.
リ 性 能 ベ ン チ マ ー ク STREAM[11], 姫 野 ベ ン チ マ ー ク
計 測 で は ,表 1 に あ る 各 kernel,ス レ ッ ド 数 8 に て ,
[12]の 計 測 結 果 に つ い て 述 べ る .
配 列 操 作 の セ ッ ト を 10 回 繰 り 返 し , 配 列 要 素 数 N を
4.1. フラッシュを拡 張 メモリとして使 用 する方 法
100M〜 3.2G 要 素 (デ ー タ サ イ ズ 2.2〜 71.5GiB)と 変 化 さ
ブロックデバイスであるフラッシュストレージを
OS の 拡 張 メ モ リ と し て 使 用 す る に は 2 つ の 方 法 が あ
せ,各サイズでのメモリバンド幅を計測した.
malloc 確 保 , mmap 確 保 で の 比 較 の た め fastswap で
の メ モ リ バ ン ド 幅 を 図 2 に 示 す . malloc 確 保 で は , 配
る.
(一 )
メ モ リ 領 域 を malloc(3)で 確 保 し OS の 仮 想 メ
モリのスワップデバイスとして使用する.
列 要 素 数 1200M(デ ー タ サ イ ズ 26.8GiB)を 超 え る と ,ペ
ー ジ イ ン・ア ウ ト が 生 じ ,26.2GiB/s あ っ た メ モ リ バ ン
ブロックデバイスにファイルシステムを載
ド 幅 は 急 激 に 低 下 し た . 一 方 , mmap 確 保 で は , 物 理
せ , フ ァ イ ル を 用 意 し mmap(2)で 仮 想 メ モ リ の
メモリサイズを越える前から,マップトファイルへの
アドレス空間にマッピングする.
同期のためメモリバンド幅が減衰する.しかし,ペー
(二 )
(一 )は ア プ リ ケ ー シ ョ ン よ り 下 の レ イ ヤ で 処 理 が 行 わ
ジキャッシュを利用できるため,物理メモリサイズを
れるので,既存アプリケーションを改変することなく
超 え て も malloc 確 保 よ り メ モ リ バ ン ド 幅 は 低 下 し な
使 用 で き る . (二 )の 方 法 は マ ッ プ す る フ ァ イ ル の 準 備
い . 例 え ば 配 列 要 素 数 3.2G の と き , malloc 確 保 は
物理メモリサイズ以上
物理メモリサイズ以上
図 3 malloc 確 保 で の メ モ リ バ ン ド 幅 (STREAM)
図 4 mmap 確 保 で の メ モ リ バ ン ド 幅 (STREAM)
241.4MiB/s だ が mmap 確 保 で は 655.6MiB/s と , 約 2.7
倍近いメモリバンド幅が出ている.
各 kernel に よ る 比 較 の た め ,物 理 メ モ リ サ イ ズ を 超
え た 配 列 要 素 数 で の malloc 確 保 , mmap 確 保 で の メ モ
リ バ ン ド 幅 を そ れ ぞ れ 図 3, 図 4 に 示 す .
malloc 確 保 で fastswap を 3.6.0 と 比 較 す る と ,
fastswap の 方 の メ モ リ バ ン ド 幅 が 低 下 し て い る . 配 列
要 素 数 3.2G の と き , fastswap は 241.4MiB/s で あ っ た
が , 3.6.0 で は 264.9MiB/s だ っ た . nvm-fast-swap で の
ロ ッ ク 細 粒 度 化 に よ り , 並 列 化 し た 配 列 操 作 は 3.6.0
よりも有利になると想定していたが,そうではなかっ
た . 3.10.9 と の 比 較 で は , 配 列 要 素 数 1.7G か ら 2.0G
まで同程度のメモリバンド幅であった.
一 方 ,mmap 確 保 で は fastswap は 3.6.0 よ り バ ン ド 幅
が 向 上 し て い た .配 列 要 素 数 3.2G の と き ,fastswap は
655.6MiB/s で あ っ た が , 3.6.0 は 560.4MiB/s だ っ た .
図 2 から明らかなように,フラッシュメモリ向けの
図 5 malloc/mmap 確 保 と FLOPS 値 (姫 野 ベ ン チ )
意した.
ス ワ ッ プ シ ス テ ム の kernel で あ っ て も ,物 理 メ モ リ サ
各 kernel, ス レ ッ ド 数 8 に て 計 測 し た 結 果 を 図 5 に
イ ズ を 超 え る 場 合 は , malloc 確 保 で ス ワ ッ プ デ バ イ ス
示 す . malloc 確 保 と mmap 確 保 の ど ち ら に お い て も ,
と す る よ り フ ァ イ ル mmap(2)で の フ ァ イ ル ス ト レ ー ジ
2.6.32 が 最 低 性 能 で ,fastswap と 3.6.0 の 比 較 で は ,む
と す る mmap 確 保 の 方 が よ い こ と を 確 認 で き た .ま た ,
し ろ fastswap の ほ う が ,若 干 性 能 が 低 い 結 果 と な っ た .
物 理 メ モ リ サ イ ズ 内 で は mmap 確 保 の メ モ リ バ ン ド 幅
最 も 性 能 が 高 い の は 3.10.9 で あ る .malloc 確 保 の 場 合 ,
が低下することから,確保したいメモリ領域のサイズ
3.10.9 は , fastswap の 113%, 2.6.32 の 136%の 性 能 を 達
が物理メモリサイズを超えるとわかっている場合にお
成 し て い る . mmap 確 保 で は , そ の 差 は 小 さ い も の の
い て の み , mmap 確 保 す る の が よ い と 言 え る .
fastswap の 103%,2.6.32 の 106%の 性 能 に な っ て い る .
4.3. 姫 野 ベンチマーク
malloc 確 保 と mmap 確 保 の 比 較 で は , す べ て の kernel
姫野ベンチマークは,非圧縮流体解析コードの性能
評価のために作成されたベンチマークで,ポアッソン
に お い て , mmap 確 保 が malloc 確 保 に 比 べ , 2~ 2.5 倍
高性能であることがわかった.
方程式解法をヤコビの反復法で解く場合の計算カーネ
これらの結果より,フラッシュ向けスワップシステ
ル の 処 理 速 度 を 計 測 す る . C-OpenMP 版 を 元 に 計 算 サ
ム の kernel で あ っ て も , 現 状 で は , ス ワ ッ プ シ ス テ ム
イ ズ XXL(2048x1024x1024,デ ー タ サ イ ズ 112GiB)を 用
を 使 用 し た malloc 確 保 に 比 べ ,ス ワ ッ プ シ ス テ ム を 用
い な い mmap 確 保 の ほ う が , 物 理 メ モ リ サ イ ズ を 超 え
るデータ処理を行う応用にとって,有利であることが
明らかになった.
5. フ ラ ッ シ ュ 拡 張 メ モ リ の た め の API
前 節 で は flash 向 け ス ワ ッ プ シ ス テ ム に つ い て ベ ン
チマークを用いた評価を述べた.メモリ確保方法の違
いによる結果から,フラッシュストレージを拡張メモ
トランスレータで変換
リ と し て 使 用 す る 場 合 に は , malloc(3)経 由 で ス ワ ッ プ
デ バ イ ス と す る よ り も , mmap(2)で マ ッ プ す る フ ァ イ
ルを置くストレージとして用いた方がよいことを確認
できた.
そこで,本章では既存のアプリケーションの変更を
最小限にしたまま,容易にフラッシュストレージを拡
張 メ モ リ と し て 利 用 で き る よ う に す る た め の API を 提
案する.
5.1. フラッシュ拡 張 メモリアロケータ libflmalloc
図 2 からもわかる通り,物理メモリが十分にある状
態 で は , malloc 確 保 が 有 利 で あ る . そ こ で , 実 行 さ れ
る 環 境 に 合 わ せ , 動 的 に malloc 確 保 , mmap 確 保 を 切
り替え,メモリ帯域の減衰を避けつつ,広大なメモリ
領域を利用できるアロケータを検討した.このフラッ
シュ拡張メモリアロケータは,一般的なアプリケーシ
ョンでのメモリの動的確保・解放に用いられている
malloc(3),calloc(3),free(3)と 同 じ イ ン タ フ ェ ー ス を 持
つ , flmalloc(), flcalloc(), flfree()か ら 成 る .

flmalloc(), flcalloc()
全 て の メ モ リ 確 保 を mmap 確 保 に し て し ま う と , フ
ァイル生成のオーバーヘッドが大きくなることから,
あ る 一 定 サ イ ズ (現 実 装 で は 10MiB)以 下 の メ モ リ 確 保
で は malloc(3)を 使 用 す る こ と に し た .ま た ,メ モ リ 確
保したサイズを積算しておき,実行システムの物理メ
モ リ サ イ ズ に 余 裕 が あ る 場 合 に は malloc(3) を 使 用 す
る よ う に し た . malloc(3)で 利 用 可 能 な 物 理 メ モ リ サ イ
ズ は , /proc/meminfo に あ る MemTotal の 値 に 制 限 係 数
(現 実 装 で は 80%)を 掛 け た 値 を 用 い た . こ れ ら 以 外 の
条 件 を mmap 確 保 と し て , フ ラ ッ シ ュ ス ト レ ー ジ 上 の
パ ス に フ ァ イ ル を 生 成 し , そ れ を mmap(2)す る よ う に
した.

flfree()
解放するアドレスがファイルにマップされている
領 域 で あ れ ば , mmap 確 保 さ れ て い る メ モ リ 領 域 と し
てマップを解除しファイルを削除する.それ以外は
malloc 確 保 さ れ た メ モ リ 領 域 と し て free(3)を 用 い る よ
うにした.
libflmalloc の メ モ リ 確 保 ポ リ シ ー は ,一 )物 理 メ モ リ
に 載 る サ イ ズ の 範 囲 で は malloc 確 保 を 行 う , 二 )物 理
メモリサイズを超えそうなメモリ確保から順次ファイ
ル mmap(2)で フ ラ ッ シ ュ ス ト レ ー ジ を 拡 張 メ モ リ と し
図 6 静的配列宣言の自動変換例
て用いる,の 2 点である.ユーザは,メモリ確保に
flmalloc()を 用 い る こ と で ,確 保 し よ う と す る メ モ リ の
サイズが物理メモリサイズを越えてしまう場合には,
フ ラ シ ュ 拡 張 メ モ リ , 1.5 次 記 憶 装 置 上 に 確 保 し て も
よ い ,と い う 拡 張 メ モ リ 利 用 許 可 を 与 え た こ と に な る .
5.2. 既 存 アプリのフラッシュ拡 張 メモリ対 応
アプリケーションのメモリを動的に確保している
場 合 は ,そ の ま ま ソ ー ス に あ る malloc, calloc, free の 文
字列を置換処理し再ビルドすることで,フラッシュ拡
張メモリ対応のアプリケーションとなる.これは対象
とするアプリケーションのソースコードを入手でき,
且つ動的に確保している場合,もしくは,アプリケー
ションの開発当初からフラッシュ拡張メモリに対応す
ることを念頭に置いている場合の使い方に相当する.
数値計算系のアプリケーションでは,巨大な配列宣
言 を 静 的 に 行 っ て い る こ と が よ く 見 ら れ る .Fortran 由
来 の ア プ リ ケ ー シ ョ ン を 移 植 し た も の , 特 に f2c で 得
られたソースでは,配列宣言がそのまま静的な配列宣
言に変換される.このままビルドしたロードモジュー
ルを実行すると,プロセスのデータ領域が巨大に確保
され,物理メモリサイズを超えた時点でページイン・
アウトが生じることになる.このようなアプリケーシ
ョンでフラッシュ拡張メモリを利用するには,静的に
確保される配列を動的に確保するように変更する必要
がある.しかし,複数の配列を用いているアプリケー
ションでは変更に手間を要する.
そこで,専用コンパイラを用い,静的領域にメモリ
を確保している部分を変換してビルドする仕組みを用
評価した.その結果,少なくとも,今回用いた環境,
意した.ユーザは,ソースにある静的配列変数の宣言
ベ ン チ マ ー ク で は , 既 存 kernel に 比 べ , 大 き な 優 位 性
部 分 に 修 飾 子“ flm”を 付 与 す る .こ の 修 飾 子 付 与 例 を
が見られなかった.現時点での既存技術でフラッシュ
図 6 のトランスレータ入力ファイルに示す.これを専
ストレージを拡張メモリとして簡単に利用するには,
用コンパイラでビルドする際,トランスレータによっ
ス ワ ッ プ デ バ イ ス と し て で は な く , フ ァ イ ル mmap(2)
て変数宣言部分が展開され,フラッシュ拡張メモリ対
で用いる手法がよいことを確認した.
応ソースとしてビルドされる.トランスレータは,配
また,この手法を既存アプリケーションに適用する
列の型をポインタで参照できる型に変換して宣言し,
枠 組 み libflmalloc を 試 作 し , 予 備 実 験 で 若 干 の 性 能 向
ブ ロ ッ ク 開 始 時 に flmalloc()を 用 い た メ モ リ の 動 的 確
上 を 得 る こ と が で き た . 試 作 し た libflmalloc の メ モ リ
保処理を追加する.更に,配列参照部分をポインタ参
確保ポリシーは,物理メモリ上への確保サイズ積算値
照に置換し,ブロック終了時のメモリ解放処理を追加
が,検出した実行環境の物理メモリサイズの一定レベ
す る . つ ま り , ユ ー ザ の 修 飾 子 付 与 は , flmalloc で の
ルを超えない範囲に収めるようにするだけであった,
メモリ確保と同様,該当配列の領域確保に拡張メモリ
今後は,実行環境から取得できる他の情報も考慮した
利用許可を与えたことになる.
メモリ確保ポリシーの検討を進める.
また,ソースの無いアプリケーションでもフラッシ
今回はベンチマークソフトを評価に用いたが,実際
ュ 拡 張 メ モ リ を 利 用 で き る よ う libflmalloc に ラ ッ パ を
に使用されているアプリケーションに適用した際の挙
かぶせたダイナミックリンクライブラリも用意した.
動について検証・評価を行いたい.
ア プ リ ケ ー シ ョ ン 実 行 時 , 環 境 変 数 LD_PRELOAD の
現在,様々な不揮発性メモリのデバイス,ソフトウ
指定で用意したライブラリを事前に読み込んでおく.
ェア,標準化インタフェースなどが活発に提案・開発
こ れ に よ り , ア プ リ ケ ー シ ョ ン 内 部 の malloc(3),calloc
さ れ て い る . し た が っ て , libflmalloc の 実 装 方 式 も 適
(3),free(3)を フ ッ ク し ,フ ラ ッ シ ュ 拡 張 メ モ リ ア ロ ケ ー
宜,利用可能な最新技術を用い変更・拡張していく予
タ の API を 呼 び 出 す こ と で ,ア プ リ ケ ー シ ョ ン を 改 変
定である.
しなくてもフラッシュ拡張メモリ対応となる.
5.3. libflmalloc を用 いた姫 野 ベンチマーク
前節で行った姫野ベンチマークと同様の計測を
kernel3.10.9 に て 行 っ た .そ の 結 果 ,453.57MFLOPS で
あ っ た . こ れ は メ モ リ 確 保 全 て を mmap 確 保 し た 場 合
と 比 較 す る と , 106% 性 能 が 向 上 し た こ と に な る .
libflmalloc で は , メ モ リ 確 保 ポ リ シ ー に よ り 物 理 メ モ
リ サ イ ズ の 一 定 レ ベ ル に 収 ま る 分 ま で は malloc 確 保 ,
そ れ 以 降 は mmap 確 保 を 行 う . 姫 野 ベ ン チ マ ー ク で は
7 つ の 配 列 分 の メ モ リ を 確 保 す る が , libflmalloc を 用
い る と ,計 算 サ イ ズ が XXL の 場 合 で は ,配 列 の 宣 言 順
に 3 配 列 分 24GiB を malloc 確 保 で 物 理 メ モ リ に ,残 り
4 配 列 分 の 88GiB を mmap 確 保 で フ ラ ッ シ ュ ス ト レ ー
ジ上に確保する.
物 理 メ モ リ が malloc 確 保 で 消 費 さ れ る と , mmap 確
保で生成したマップトファイルのページキャッシュ分
が確保できなくなることが懸念される.今回の計測で
は ,FLOPS 値 が 向 上 し て い る こ と か ら ,物 理 メ モ リ サ
イ ズ の 80%と い う 制 限 係 数 は ,姫 野 ベ ン チ マ ー ク の 計
算 サ イ ズ XXL に と っ て ,あ る 程 度 の 効 果 の あ る 数 値 で
あったと考えられる.
し か し ,ど の 程 度 ま で malloc 分 を 確 保 し ペ ー ジ キ ャ
ッシュを残すかの割合に関しては,今後評価が必要で
ある.
6. お わ り に
フ ラ ッ シ ュ 向 け ス ワ ッ プ シ ス テ ム nvm-fast-swap を
文
献
[1] HPCI 技術ロードマップ白書, 戦略的高性能計算システム
開発(SDHPC), 2012 年 3 月
[2] 緑川博子, 丹英之, "メモリサイズを超えるデータ処理を目
的としたバス接続型 SSD の性能評価", 情報処理学会, ハイ
パフォーマンス研究会 Vol.2013- HPC-140, No.44, pp.1-6,
(2013, 8)
[3] Shaohua Li, Improve Linux swap for High Speed Flash Storage,
LinuxCon Japan 2013
[4] Nisha Talagala, Creating Flash-Aware Applications, (203-B,
G-31, I-31), Flash Memory Summit 2013
[5] OpenNVM, http://opennvm.github.io, Oct.1,2013.
[6] nvm-fast-swap,
https://github.com/opennvm/nvm-fast-swap/,
Oct.1,2013
[7] Ingo Molnar, mm/rmap: Convert the struct anon_vma::mutex to
an rwsem, Dec.2,2012
http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/co
mmit/?id=5a505085f043e8380f83610f79642853c051e2f1
[8] Ingo Molnar, mm/rmap, migration: Make rmap_walk_anon() and
try_to_unmap_anon() more scalable, Dec.2,2012
http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/co
mmit/?id=4fc3f1d66b1ef0d7b8dc11f4ff1cc510f78b37d6
[9] Shaohua Li, smp: make smp_call_function_many() use logic
similar to smp_call_function_single(), Feb.22,2013
http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/co
mmit/?id=9a46ad6d6df3b547d057c39db13f69d7170a99e9
[10] FIO, http://freecode.com/projects/fio, Oct.1, 2013.
[11] John D. McCalpin, STREAM: Sustainable Memory Bandwidth
in
High
Performance
Computers,
http://www.cs.virginia.edu/stream/, Oct. 1, 2013.
[12] 姫野ベンチマーク, http://accc.riken.jp/2145.htm, Oct.1,2013.