前々回 Raspberry Pi OS 64bitβ版にポータブルSSD増設swap では外部USBに接続したSSDにSwapを設定しました。そして今回は、前回の整数型で高次方程式を解くの10000次方程式のpythonプログラムを使って、スワップ動作を確認しました。
結果は、外部USBに接続したSSDにSwapを移動した場合にも、Raspberry Pi OS 64bitベータ版に同梱のThonnyで10000次方程式のpythonプログラムが稼働すること、さらにメモリースワップ機能が正常に動作することが確認できました。以下に確認状況を示しています。
#swap起動
SwapをSSDに移動させていますから、起動時はSwapが0になっています。この状態では本体のメインメモリ8GBだけの状態です。手動でSwapを起動します。次の2個のコマンドです。
sudo dphys-swapfile setup
sudo dphys-swapfile swapon
Swapのtotalに184.31GBが現れます。Swapのused(使用中)は、Swap起動直後なので、まだ0です。メインメモリーMemの空き(free)は7.03GBあります。その右のshared、buff/cache、availableは今回ふれません。
#メインメモリー枯渇前処理
メインメモリーMemに空きがある時は、メインメモリーMemだけで処理します。Swapは使いません。メインメモリーMemが枯渇状態になってからSwapが動き始めます。今回のテーマは、pythonプログラム稼働中、Swap動作の確認です。そこでpythonプログラム稼働前に、あらかじめメインメモリーMemを枯渇状態にする前処理をしておきます。こうしておけばpythonプログラムが稼働を始めた時、既にメインメモリーMemは枯渇していますから、Swapがすぐに動作を始めます。実際にメインメモリーMemを枯渇状態にする前処理は、760MBのBMP画像を10個openするだけです。Commandのfreeで確認したのが下図です。
メインメモリーMemの空き(free)は135MBまで減少しています。そしてSwapのusedが937MBとなり、Swapが動作を始めていることがわかります。
#ThonnyでPythonプログラム開始
Raspberry Pi OSの64bitベータ版に同梱のThonnyで10000次方程式のpythonプログラムを開始します。pythonプログラム開始直後を、Commandのfreeで確認したのが下図です。
Swapのusedが1049MBとなり、Thonny起動そしてpythonプログラム稼働中も、Swapが正常動作していることが確認できます。
#計算部分終了時
10000次方程式のプログラム途中のCalculation Finishedの時です。Commandのfreeで確認したのが下図です。
Swapのusedが1293MBまで増えています。
#プログラム全体終了時
10000次方程式のプログラム全体が終了した時です。Commandのfreeで確認したのが下図です。
Swapのusedが1921MBまで増えています。またThonny上で稼働させた10000次方程式のpythonプログラムは、解10000個をprintして正常に終了しています。
#全アプリ終了しメモリー開放
Thonnyとopenしていた760MB画像ファイル10個、全てのアプリを終了し、メモリー開放した時です。Commandのfreeで確認したのが下図です。
Swapのusedが1921MBから79MBまで急減しています。メインメモリーMemの空き(free)が7.29GBまで回復しています。
以上、SSDに移動したSwapは、Thonnyで10000次方程式のpythonプログラムを稼働させた時も、正常に動作することが確認できました。10000次方程式のpythonプログラム自体が40minutesかかりますから、100MB毎のスワップアウトのタイムラグである2~3秒は全く意識されませんでした。それよりも、メインメモリー枯渇によるプログラム停止が回避可能となったことが大きな意義でした。
最後までご覧いただきありがとうございました。
次回、「整数型で高方程式を解く=分散並列処理=」では、Raspberry Pi 4台のsocket通信を使った分散処理により、計算時間を短縮する試行を予定しています。