要旨
従来はVirtualBoxやVMware Workstation Playerが主流でしたが、WSL2+WSLgの環境から高度なグラフィックを除くLinuxを快適に使用でるようになりました。
また、Intelの12世代以降のCPUは、Pコア(高性能コア)とEコア(高効率コア)と複雑な構成となりました。
以上のように、ハードウェア、ソフトウェア(サードパーティの仮想化ソフトから見て)の両面で混沌とした状態になっています。
(a) 生Pythonによる行列の転置、(b) Scilabのスクリプトによる行列乗算(avx2利用と思われる)、(c) FrontISTRのMUMPS解法線形弾性解析を行った結果、WSL2とHyper-Vが良好との結果が得られたました。
なお、仮想環境ではUbuntuよりもDebianの方が若干高速でした(メモリ使用量はDebianの方が若干多い)。topコマンドの表示から考えると、アクティブなプロセスを減らせば改善されると思われます。
また、デスクトップ環境(GNOME、XFCE4、LXDE、MATE、LXQt)の影響はあまりなかったです。
インフォメーション
VirtualBoxは、ovaファイル(VirtualBox)、vdiファイル(VirtualBoxの仮想ドライブ形式)、vmdkファイル(VMwareの仮想ドライブ形式)をHyper-Vから利用できるように変換するのに使用できます。
1. 計算速度の比較
使用したパソコン
主マシン(デスクトップパソコン)
Intel Core i7-12700K (P-cores 8, E-cores 4), RAM 128GB, Nvidia GeForce RTX 3060, Windows 11 Pro 24H2
サブマシン(ノートパソコン)
Intel Core i7-10750H (6 cores), RAM 64GB, Intel UHD Graphics + Nvidia RTX 2060, Windows 11 Pro 24H2
1.1 生Pythonによる行列の転置
以前投稿したPythonコード"Modyfy_Matrix.py"による測定結果です
Windowsマシン:各種環境でのPython本体の実行速度
主マシン(OS、仮想環境、Pythonのフレバー)
-
高速(0.18s~0.23s)
Windows MSYS2、 Windowsの標準(python.org)、Hyper-V-Windows11開発環境の標準
WSL2-Debian 12の標準(GNOMEとLXQtでほとんど差がない)、WSL2-Ubuntu 24.04の標準
Hyper-V Debian 12の標準(リポジトリのLinuxカーネル6.1、自分でビルドした6.14、共に高速)、Hyper-V / Arch Linuxの標準(GNOME、XFCE4、LXDEでほとんど差がない)、Hyper-V / Fedora41の標準 -
やや遅い(0.3s前後)
Hyper-V-Windows11開発環境のAnaconda
Hyper-V / Ubuntu 22.04の標準、 VMware Workstation Player / Ubuntu 22.04の標準、Hyper-V / AlmaLinux 9の標準 -
遅い(0.4s前後)
VirtualBox / Ubuntu 22.04の標準
UbuntuとDebianの動作プロセス比較(主マシン)
topコマンドにより確認すると、Debianのメモリ使用量がUbuntuよりも若干大きいものの、実際に活動しているプロセスが少ないようです。Ubuntuの不要プロセスを切るなどを行えれば改善される可能性があります。
- Hyper-V上のUbuntu 22.04
top
top - 07:16:08 up 1 min, 0 users, load average: 0.19, 0.07, 0.02
Tasks: 309 total, 1 running, 308 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.6 us, 0.3 sy, 0.0 ni, 99.1 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 62882.0 total, 60802.8 free, 1199.7 used, 879.6 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 61048.4 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1829 masahiro 20 0 5488760 377576 152260 S 2.7 0.6 0:02.34 gnome-s+
1105 xrdp 20 0 51436 32100 10496 S 1.7 0.0 0:01.10 xrdp
1573 masahiro 20 0 340116 121288 77256 S 1.3 0.2 0:00.54 Xorg
2366 masahiro 20 0 969776 59764 45396 S 0.7 0.1 0:00.27 gnome-t+
1272 gdm 20 0 5361972 209440 124112 S 0.3 0.3 0:00.76 gnome-s+
1981 masahiro 20 0 390284 11500 6784 S 0.3 0.0 0:00.05 ibus-da+
2405 masahiro 20 0 14260 4096 3200 R 0.3 0.0 0:00.08 top
1 root 20 0 166860 11640 8056 S 0.0 0.0 0:00.33 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.00 pool_wo+
…
- Hyper-V上のDebian 12
top
Tasks: 283 total, 1 running, 282 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.1 us, 0.0 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 62885.2 total, 60750.1 free, 2073.9 used, 692.2 buff/cache
MiB Swap: 976.0 total, 976.0 free, 0.0 used. 60811.3 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1575 masahiro 20 0 5362196 318624 149216 S 0.7 0.5 0:17.83 gnome-s+
722 xrdp 20 0 55956 41628 10568 S 0.3 0.1 0:03.22 xrdp
1 root 20 0 168072 12564 9180 S 0.0 0.0 0:00.27 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par+
5 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 slub_fl+
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 netns
7 root 20 0 0 0 0 I 0.0 0.0 0:00.00 kworker+
8 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker+
9 root 20 0 0 0 0 I 0.0 0.0 0:00.06 kworker+
...
サブマシン
Windowsの標準(python.org)、WSL2-Debian 12、Hyper-V-Debian 12が0.41s~0.53sで大差がなかった。
1.2 Scilabのスクリプトによる行列乗算
10年前のScilabコ-ドが残っていました。単純な演算が良いと思いますので行列乗算としました。
// Copyright (C) 2010 - DIGITEO - Michael Baudin
//
// This file must be used under the terms of the CeCILL.
// This source file is licensed as described in the file COPYING, which
// you should have received as part of this distribution. The terms
// are also available at
// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
// Benchmarking the matrix-matrix product
// References
// "Programming in Scilab", Michael Baudin, 2010, http://forge.scilab.org/index.php/p/docprogscilab/downloads/
/////////////////////////////////////////////////////////////////
//
// A basic benchmark
if ( %f ) then
rand( "normal" );
n = 1000;
A = rand(n,n);
B = rand(n,n);
tic();
C = A * B;
t = toc();
mflops = 2*n^3/t/1.e6;
disp([n t mflops])
end
/////////////////////////////////////////////////////////////////
//
// A subtle benchmark
scf();
stacksize("max");
rand( "normal" );
lines(0);
s = stacksize();
MB = round(s(1)*8/10^6);
nmax = sqrt(s(1));
mprintf("Memory: %d (MB)\n",MB);
mprintf("Maximum n: %d\n",nmax);
timemin = 0.1;
timemax = 8.0;
nfact = 1.2;
//
// Make a loop over n
xtitle("Matrix-Matrix multiply","Matrix Order (n)","Megaflops");
n = 1;
k = 1;
perftable = [];
while ( %t )
A = rand(n,n);
B = rand(n,n);
tic();
ierr = execstr("C = A * B","errcatch");
t = toc();
if ( ierr <> 0 ) then
laerr = lasterror();
disp("Error:");
disp(laerr);
break
end
if ( t > timemin ) then
mflops = 2*n^3/t/1.e6;
perftable(k,:) = [n t mflops];
plot(n,mflops,"bo-")
mprintf("Run #%d: n=%6d, T=%.3f (s), Mflops=%6d\n",k,perftable(k,1),perftable(k,2),perftable(k,3))
k = k+1;
end
if ( t > timemax ) then
break
end
n = ceil(nfact * n);
end
// Search for best performance
[M,k] = max(perftable(:,3));
mprintf("Best performance:")
mprintf(" N=%d, T=%.3f (s), MFLOPS=%d\n",perftable(k,1),perftable(k,2),perftable(k,3));
主マシン
- 高速(480MFLOPS)
Windows(MKL, MSVCを使用していて、Windows版は高速チューニングされているようです) - 中速(200~270MFLOPS)
Hyper-V Windows 11開発環境、WSL2-Debian 12、Hyper-V-Ubuntu 22.04、Hyper-V-Debian 12 - 低速(126MFLOPS)
VirtualBox-Ubuntu 22.04
サブマシン
- 高速(292MFLOPS)
Windows - 中速(118~125MFLOPS)
WSL2-Debian、Hyper-V-Debian 12
1.3 線形弾性解析
概要
2022年に構造解析ソフト”FrontISTR Ver. 5.3”の計算時間をWindows版の公式バイナリとWSL2でIntel oneAPIのMKLとMPIを組み込んでコンパイルし、計算時間を比較しました。結果は下表の通りです。
fistr1 -t 4 # 4はスレッド数
hecmw_part1 # tutorialに4分割をすることが指定されている。メッシュの分割を実施するコマンド。
mpirun -np 4 fistr1 -t 1 #MPI 4並列, 1 OpenMPスレッドで実行
mpiexec -np 4 fistr1 -t 1 # Windows用
今回の比較においては、反復法のCG法は環境を変えても変化が小さいので、直接法のMUMPS解法での計算時間を評価しました。また、計算が短時間で終了すればよいとの視点から4並列での計算時間のみ比較しました。
今回の比較にあたり、Linux版についてはFrontISTR最新版(Ver.5.7:2025年4月リリース)をソースコードからビルドしました。
解析モデルは、tutorial 2-線形静解析 (弾性、並列)です。
線形静解析 (弾性、並列)
データはFrontISTRのGithubにあります。
FrontISTR/tutorial/02_elastic_hinge_parallel/
新たにやり直した結果、Linux環境の影響を把握することができました。
- WSL2とHyper-Vは、Windows用公式版の同程度の速度で計算できました
- VirtualBoxはOpenBLASにおいてCPUを正常に認識せず、64bit CPUの最低基準+αでの動作となりマシンの性能が発揮できないと考えられます
主マシン
- 高速(3.41s~3.53s)
Windows用公式MSMPI版(MS-MPI、OpenBLAS)、WSL2とHyper-VのDebian 12(oneAPIのMPIとMKL)、Hyper-Vの22.04(oneAPIのMPIとMKL)、Hyper-Vの22.04(OpenBLAS:avx2有効のHASWELLとしてライブラリが作成された、OpenMPI) - 低速(5.59s~6.65s)
Windows 公式IMKL版(Intel-MPI、MKL)、VirtualBOXのUbuntu 22.04、Debian12(OpenBLAS:avx無効のNEHALEMのライブラリが作成された、OpenMPI)
サブマシン
- 高速(4.40s~4.78s)
Windows用公式MSMPI版(MS-MPI、OpenBLAS)、WSL2とHyper-VのDebian 12(oneAPIのMPIとMKL) - 低速(7.43s)
Windows 公式IMKL版(Intel-MPI、MKL)
2. Hyper-Vの導入方法
Hyper-VはWSL2と比べて情報(特にUbuntu以外のディストリビューション)が少ないです。
Debianでの導入方法を整理しました。
Hyper-Vの設定、通常の方法によるLinuxのインストール
- UbuntuをDebianに読み替えてインスト-ルします
Hyper-VでUbuntu24.04LTSをインストール・セットアップする - ネットワークからのインストールにすれば、最新版となります
- ソフトウェアは、GNOME or XFCE4 or MATEと標準システムユーティリティ
(KDEは試していませんが、デスクトップ環境で大差なかったです。軽量デスクトップという方は、XFCE4、MATE、...などお好きなものを)
リポジトリの追加
- 主リポジトリにcontrib non-freeの追加
sudo nano /etc/apt/sources.list
# main non-free-firmware に contrib non-free を追加
- Backportsとfasttrackリポジトリの追加
VirtualBox / debian WIKI
# Install lsb-release :
sudo apt install lsb-release
# Add Backports to sources.list:
echo "deb http://deb.debian.org/debian $(lsb_release -cs)-backports main contrib non-free" |
sudo tee /etc/apt/sources.list.d/backports.list
# Import fasttrack archive keyring:
sudo apt install fasttrack-archive-keyring
# Adding fasttrack repositories:
echo "deb http://fasttrack.debian.net/debian-fasttrack/ $(lsb_release -cs)-fasttrack main contrib" |
sudo tee /etc/apt/sources.list.d/fasttrack.list
echo "deb http://fasttrack.debian.net/debian-fasttrack/ $(lsb_release -cs)-backports-staging main contrib" |
sudo tee -a /etc/apt/sources.list.d/fasttrack.list
# Update the list of packages:
sudo apt update
# Install packages for Compile and Build
sudo apt install build-essential git dkms curl
拡張セッション(xrdp, xorgxrdp)のための設定
Debian側での設定
sudo apt install xrdp xorgxrdp
sudo nano /etc/xrdp/xrdp.ini
port=3389 を コメントアウトして、 port=vsock://-1:3389 とする
linux-vm-tools/ubuntu/24.04/install.sh
のスクリプトを参考とし、
security_layer=negotiateを security_layer=rdp に
crypt_level=high を crypt_level=none に
bitmap_compression=true を bitmap_compression=false に
変更します。
Ubuntuと同様にインストールした時点で起動していましたが、
systemctlコマンドでxrdpサービスが有効化されていることを確認します:
sudo systemctl status xrdp
# 有効化
sudo systemctl enable xrdp
# 再起動
sudo systemctl restart xrdp
# xrdpの動作を確認後、Debianをシャトダウンします
sudo poweroff # キーボードの位置関係からpoweroffが速くタイプできます
Windows側での対応
PowerShellを管理者権限で起動し、以下のコマンドを実行:
# Set-VM -VMName <作成した仮想マシン名> -EnhancedSessionTransportType HvSocket
Set-VM -VMName "Debian12-LXQt" -EnhancedSessionTransportType HvSocket
# メッセージが表示されなければOKです