0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Windowsマシンでの仮想Linux環境の比較

Posted at

要旨

従来は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コ-ドが残っていました。単純な演算が良いと思いますので行列乗算としました。

bench_matmul.sce
// 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はスレッド数

FrontISTR-Tutrial01.png

hecmw_part1 # tutorialに4分割をすることが指定されている。メッシュの分割を実施するコマンド。
mpirun -np 4 fistr1 -t 1 #MPI 4並列, 1 OpenMPスレッドで実行
mpiexec -np 4 fistr1 -t 1 # Windows用

FrontISTR-Tutrial02.png

今回の比較においては、反復法の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 を追加
# 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 とする
スクリーンショット 2025-04-08 193436.png

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です

再度接続すると、画面の解像度やドライブ共有設定などの画面がでてきます。
拡張セッション成功-1.png

xrdpの画面からログインし、高解像度で動作し、ドライブの共有ができれば、設定を保存します。
拡張セッション成功-3.png
拡張セッション成功-4.png

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?