0%

GTX1080 から RTX 3090 に乗り換えたので、GPU-PV(旧名GPU-V) を改めて試してみようかなと
2020/11 頃に某ゲームを多重起動するために Windows 10 で実施していましたが、その時と手順は全く変わりませんでした。

現存する仮想マシンに GPU を使ってもらう方法

  1. DDA
    • グラボが限定されます
  2. Remote FX
    • 廃止済、今はできないはず
  3. GPU-PV(旧名GPU-P)
    • 今回はコレ

前提

  • ホストマシン
    • Windows 11 OSビルド 22621.1992
    • CPU: Ryzen9 3950X (16core/32threads)
    • GPU: RTX 3090
  • ゲストマシン
    • Windows 11

手順

0. Hyper-V を実行するホストマシンでは事前に以下の設定をしておく

  1. マザーボード側で VT-x または SR-IOV を有効化しておく
  2. Windows 側で Hyper-V を有効化しておく(機能の有効化)

1. Hyper-V で Windows 11 マシンを作成する

2. ホスト側 で以下コマンドを実行

Windows 11 マシンを停止し、管理者権限で以下 PowerShell を実行

1
2
3
4
5
6
$MachinName="Hyper-V 上のマシン名"
Add-VMGpuPartitionAdapter -VMName "${MachinName}"
Set-VMGpuPartitionAdapter -VMName "${MachinName}" -MinPartitionVRAM 80000000 -MaxPartitionVRAM 100000000 -OptimalPartitionVRAM 100000000 -MinPartitionEncode 80000000 -MaxPartitionEncode 100000000 -OptimalPartitionEncode 100000000 -MinPartitionDecode 80000000 -MaxPartitionDecode 100000000 -OptimalPartitionDecode 100000000 -MinPartitionCompute 80000000 -MaxPartitionCompute 100000000 -OptimalPartitionCompute 100000000
Set-VM -GuestControlledCacheTypes $true -VMName "${MachinName}"
Set-VM -LowMemoryMappedIoSpace 1GB -VMName "${MachinName}"
Set-VM -HighMemoryMappedIoSpace 32GB -VMName "${MachinName}"

3. ホストマシンからゲストマシンへファイルをコピーする

ホストからのコピー元とゲストへのコピー先のパスが異なるので別々に記載、2つのファイルがあります。

以下の二つのファイルがコピー元

    1. PowerShell で以下を実行すると出てくるフォルダ丸ごと
      1
      2
      explorer.exe "$(Get-CimInstance -ClassName Win32_VideoController -Property * | Select-Object -ExpandProperty InstalledDisplayDrivers | Write-Output)".Split(",")[0].Trim("\nvldumdx.dll")
      例: C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_50916785244854f2
    1. C:\Windows\System32\nvapi64.dll

コピー先

    1. C:\Windows\System32\HostDriverStore\FileRepository\ #HostDriverStore 以下のフォルダは自身で作成してください。
    1. C:\Windows\System32\ #ホストと同じ場所

ここまで実施して再起動するとデバイスマネージャーに表示される
どこかに漏れがあるとビックリマークついてるかもしれません。

  • うまくいった例
    image

  • うまくいってない例
    image

どんな感じ?

ゲスト側のタスクマネージャでは GPU 表示されない

ゲスト側の使用率はゲスト側で見たかったんですけど見えず、0 % 表示

image

ただ FF14 ベンチが動作したので GPU は使えている様です

image

ホスト側 FF14ベンチ (4K)

image

ホスト側 FF14ベンチ (FullHD)

image

ゲスト側 FF14ベンチ (4K)

image

ゲスト側 FF14ベンチ (FullHD)

image

ゲスト側 FF14ベンチ (4K)

  • 設定値を少し変えた、わかりにくいですが、1桁あがっていたりしています。
    1
    Set-VMGpuPartitionAdapter -VMName "HyperVマシン名" -MinPartitionVRAM 1000000000 -MaxPartitionVRAM 1000000000 -OptimalPartitionVRAM 1000000000 -MinPartitionEncode 1000000000 -MaxPartitionEncode 1000000000 -OptimalPartitionEncode 100000000 -MinPartitionDecode 1000000000 -MaxPartitionDecode 1000000000 -OptimalPartitionDecode 1000000000 -MinPartitionCompute 1000000000 -MaxPartitionCompute 1000000000 -OptimalPartitionCompute 1000000000

image

  • 20230725追記
    設定値戻してもスコアがあがる事はありませんでした。何の差なんだ・・・

Surface Laptop 3 (4K)

手元にあった Surface でもベンチしました。驚愕のスコア

image

体感

GPU-PV ないよりはいいかも、な感じ
-> 20230725追記: 6000くらい出ている時は結構いい

参考にしたサイト

おまけ

これを管理者権限有効 PowerShell で実行すると拡張セッション無し解像度4Kが使える様になる

1
Set-VMVideo -VMName "HyperVマシン名" -HorizontalResolution 3840 -VerticalResolution 2160 -ResolutionType Single

コマンド

Get-Command は gcm の alias も持つので、置き換え可です。

コマンドがどこから参照されてるのか確認

1
2
3
4
5
6
7
8
9
> Get-Command echo
CommandType Name Version Source
----------- ---- ------- ------
Alias echo -> Write-Output

> Get-Command Write-Output
CommandType Name Version Source
----------- ---- ------- ------
Cmdlet Write-Output 3.1.0.0 Microsoft.PowerShell.Utility

参照元はどんなコマンドが使えるのか

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
Get-Command -Module Microsoft.PowerShell.Utility

Cmdlet Get-Random 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Get-Runspace 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Get-RunspaceDebug 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Get-TraceSource 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Get-TypeData 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Get-UICulture 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Get-Unique 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Get-Variable 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Group-Object 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Import-Alias 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Import-Clixml 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Import-Csv 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Import-LocalizedData 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Import-PSSession 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Invoke-Expression 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Invoke-RestMethod 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Invoke-WebRequest 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Measure-Command 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Measure-Object 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet New-Alias 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet New-Event 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet New-Object 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet New-TimeSpan 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet New-Variable 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Out-File 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Out-GridView 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Out-Printer 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Out-String 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Read-Host 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Register-EngineEvent 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Register-ObjectEvent 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Remove-Event 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Remove-PSBreakpoint 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Remove-TypeData 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Remove-Variable 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Select-Object 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Select-String 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Select-Xml 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Send-MailMessage 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Set-Alias 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Set-Date 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Set-PSBreakpoint 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Set-TraceSource 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Set-Variable 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Show-Command 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Sort-Object 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Start-Sleep 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Tee-Object 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Trace-Command 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Unblock-File 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Unregister-Event 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Update-FormatData 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Update-List 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Update-TypeData 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Wait-Debugger 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Wait-Event 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Write-Debug 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Write-Error 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Write-Host 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Write-Information 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Write-Output 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Write-Progress 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Write-Verbose 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Write-Warning 3.1.0.0 Microsoft.PowerShell.Utility

所感

もっとはやくしりたかった

記事の更新の仕方すら忘れてしまいそうだったので何か書きこんどこうかなと

curl コマンド

1
2
3
4
5
6
7
curl https://api.openai.com/v1/chat/completions -H "Content-Type: application/json" -H "Authorization: Bearer トークン" -d @- <<EOF
{
"model":"gpt-3.5-turbo-0301",
"messages": [{"role":"user","content":"こんにちは"}],
"temperature":0.7
}
EOF

ドキュメント

https://platform.openai.com/docs/guides/chat

java 1.17 を入れる手順も含むので空のVM 等で実施する事をお勧めします。

環境

ubuntu 20.04 on WSL で確認

コマンド

1
2
3
4
5
6
7
8
9
10
11
12
wget https://aka.ms/download-jdk/microsoft-jdk-17-linux-x64.tar.gz
tar -zxf microsoft-jdk-17*.tar.gz
cd jdk-17*
export JAVA_HOME=`pwd`
cd ..
export PATH=${JAVA_HOME}/bin:$PATH
java -version
mkdir SpringBoot
git clone https://github.com/spring-guides/gs-spring-boot-for-azure
cd gs-spring-boot-for-azure/complete
./mvnw clean package #Failed するかもしれませんが無視して起動できました。
./mvnw spring-boot:run

java-optsを指定する場合

環境変数 MAVEN_OPTS をいじります。

1
export MAVEN_OPTS="-javaagent:/root/SpringBoot/gs-spring-boot-for-azure/complete/applicationinsights-agent-3.4.13.jar";./mvnw spring-boot:run

参考

https://spring.pleiades.io/guides/gs/spring-boot-for-azure/

何でノイズフィルター?

OBS を使った配信環境を整えていますが、スマブラや太鼓の達人をやるときに遅延があると不利(太鼓の達人に至っては結構シビア)
な事がわかったので、OBS 上やソフトウェア上の映像を見ずに、モニターに映した画面を収録することにしました。
モニターのイヤホンジャックから、ミニプラグで音を取り、オーディオミキサーでPCの音とゲームの音を結合してみると、モニターからの音にノイズが乗っていました。(あるあるなんですけどね。)

そこでこうしました

old-haisinkankyou

sin-haisinkankyou

導入したノイズフィルター


1200円くらい、安い。

フェライトコアも試したが、、、効果無し

Sound Engine で音量を見ながらテストしましたが、フェライトコア (6ターン) はほとんど効果がありませんでした。

ノイズ対策 - なし

taisaku-nasi
60 くらいを上下してました

ノイズ対策 - フェライトコア 6 ターン

taisaku-feraitocore
60 くらいを上下してました(ただなんとなくノイズの質は変わった気がする)

ノイズ対策 - グランドループアイソレーター

taisaku-grandloopisolator
66 くらいを上下してました

このノイズの原理について調べた

逆流&ループが起きる場合があるそうです。
この動画を見て、なんとなく理解ができました。
フェライトコアではこの逆流とループは防げなそう。

image

https://www.youtube.com/watch?v=arYvWHUuX_Y

何で必要になったのか

VPS でも良いけど、固定費用やスペック等考えると
自宅のマシンに建てたい、でもサーバーの脆弱性(Minecraft の log4j 問題だったり)のリスクヘッジや
管理が面倒なのでホストOS ではなくて、仮想マシンに立ててネットワークもわけたい

外部ネットワークスイッチじゃだめなの?

Hyper-V で 外部ネットワーク のインターフェースを作る事で、
ホストマシンと同じネットワークの ローカル IP アドレスを得られます。
このIPを持った上で、ルーターの設定画面からポートフォワーディング(ポートマッピング)設定をするだけでもサーバー公開は可能
最初はこれでも良いと思っていましたが、外部ネットワークのスイッチを作成すると次の問題が発生しました。

  • 仮想マシンの上りの速度が激落ちしてた
  • ホストOS も 下りの速度が激落ちしてた
  • いつだって脆弱性のあるかもしれないサーバーがホストとネットワーク同じっていうのもちょっと怖い

改善策として 仮想ネットワーク アダプタ の offload を無効化する方法も色々な所に書いてあるが、解決しない

参照

手順

内部ネットワークのスイッチを作る

New-VMSwitch -SwitchName vnat -SwitchType Internal

この時に出てくる InterfaceIndex が次のコマンドで必要

作った内部ネットワークの IPレンジを指定

New-NetIPAddress -IPAddress 172.16.2.1 -PrefixLength 24 -InterfaceIndex 57

NAT ネットワークの作成

New-NetNat -Name vnat-nat -InternalIPInterfaceAddressPrefix 172.16.2.0/24

ポートフォワーディング(ポートマッピング)設定

Add-NetNatStaticMapping -NatName vnat -ExternalIPAddress 0.0.0.0 -InternalIPAddress 172.16.2.22 -ExternalPort 80 -Protocol TCP -InternalPort 8080

ホストのポート80 宛の通信が来た場合、172.16.2.22 のポート 8080 に送信する

この ネットワークは dhcp サーバーはないので、Windows のネットワークアダプタ設定や、
最近の ubuntu なら netplan による固定IP設定が必要

インターネットからアクセスできる様にするには、これだけではなくてルーターから ホストマシンへのポートフォワーディングも設定しておく必要がある

ノイズキャンセルが可能なツール

Krisp

他に知っているのは Krisp ですが、
こちらは基本有料。

しかし、Discord には Krisp が使える機能が搭載されているので、
Discord で使用する場合は特に難しい設定無く恩恵を受ける事が可能です。

https://krisp.ai/

RTX Voice

https://www.nvidia.com/en-us/geforce/guides/nvidia-rtx-voice-setup-guide/

こちらは RTX グラフィックボードが搭載されている場合に使用可能なツールとして公開されました。
しかしながら、RTX グラフィックボードを必要とするため、利用要件が高かった様です。
ただ、GTX シリーズを搭載している場合にも使用可能な使用方法や、
GTX シリーズでも使用可能になったという情報があります。

また、こちらも、再生デバイスが再生する音のノイズキャンセルも可能です。

使い方

https://www.nvidia.com/en-us/geforce/guides/nvidia-rtx-voice-setup-guide/

  1. 上記ページ内部の “For NVIDIA GeForce GTX GPUs, download RTX Voice.” からダウンロードし、インストールする

  2. RTX Voice の設定画面では、今現在使っているデバイスを選択しておく。

  3. 通話時にデバイス選択ができないツールを使う場合には、RTX Voice を既定のデバイスにしておくことで使用可能。

注意

再生デバイスが再生する音のノイズキャンセルは特にいらなかったので、
サウンドコントロールパネルから、再生 の RTX Voice は無効化していました。
すると、次回以降RTX Voice の起動に失敗する様になるので、おすすめしません。

JVC HA-XC90TSHURE AONIC 215 を購入したので感想を書いておきます。

Aonic 215

操作マニュアル

マニュアル

感想

  • 音が素直、とにかく綺麗です!
  • 加工されてない感じの音を聞きたい時、おすすめです!

Soundcore Liberty 2 Pro

操作マニュアル

マニュアルはここにあります

感想

  • バッテリー持ちがとてもいいです。
  • 一日中通話を行う可能性があるなど、長時間の使用をするときに重宝しています。
  • 音は高音寄り・・・?(一度洗濯してしまって)

AirPods Pro

操作マニュアル

マニュアル

感想

  • ペアリング時のタイムロスがほぼほぼないので、iPhone を使用する場合、一番気軽に楽に使えます。
  • 音質もバランスよく、どの音もよく聞こえます。

JVC HA-XC90T

操作マニュアル

マニュアル

感想

  • 低音強いです。
  • Bass Boost を有効化しても違いがわからない。。
  • ただ、音の広がりがよく、遠くや近くで音が鳴っているのがよくわかります。
  • この中では一番好きな音かも

aliaz 100g とは

キースイッチの購入前の比較は上記動画を参考にしています。
Gateron の 静音赤軸 を買っていましたが、こちらもかなり静音なキースイッチだなと思っていました。
静音を求めていましたのでこちらにも注目していました。

ここで買えます。

なんで買ったのか

HHKB から ssph に一時的に以降し、Gateron 静音赤軸 を付けて使っていました。
ただ、なんとなくミスタイプが多かったんですね。
押したいキーと隣のキーを押してしまう。
これは押下圧が軽すぎるせいなのでは?という理由を付けて
押下圧 100g の aliaz 100g を買って試しました。

使ってみてどうか

やはり静かです。
ただ、キーを押すのに必要な 100g は相当なもので、
HHKB は 65g です。
Gateron Silent Switch は 45g です。
最初に使った時は指が吊るかと思いました。
実際に使ってみるとそんなことはないですが、本当に指が吊る方も居るかも知れません。
ミスタイプはそこまで減りませんでした。
静音を求める方にはおすすめです。
そのうち Gateron Silent Switch に戻すと思います。

Details

Application Insights や Log Analytics ワークスペースにログが全く収集されていない状況でも、
1クエリ内でテーブルとログの定義を行い、
任意のデータが存在する事を想定し、クエリをテスト実行する事が出来ます。

テーブルとログの定義を行うクエリ

1
2
3
4
5
datatable (Date:datetime, Event:string)
[datetime(1910-06-11), "Born",
datetime(1930-01-01), "Enters Ecole Navale",
datetime(1953-01-01), "Published first book",
datetime(1997-06-25), "Died"]

上記クエリを使用する事でリソース内のログデータの有無に関わらず、検索結果に表示する事ができます。
1

使用例

比較演算子 !~ ってどんな挙動になるか調べたい

以下の様なクエリを実行する事で確認できます。

検証1

  • クエリ

    1
    2
    3
    4
    5
    6
    datatable (Date:datetime, Event:string)
    [datetime(1910-06-11), "Born",
    datetime(1930-01-01), "Enters Ecole Navale",
    datetime(1953-01-01), "Published first book",
    datetime(1997-06-25), "Died"]
    | where Event !~ "born"
  • 結果
    1

検証2

  • クエリ

    1
    2
    3
    4
    5
    6
    datatable (Date:datetime, Event:string)
    [datetime(1910-06-11), "Born",
    datetime(1930-01-01), "Enters Ecole Navale",
    datetime(1953-01-01), "Published first book",
    datetime(1997-06-25), "Died"]
    | where Event !~ "Born"
  • 結果
    1

Log Analytics のデモ環境

実はサンプルのログが入っている環境も用意されています。ここでも色々テストできそう
https://ms.portal.azure.com/#blade/Microsoft_Azure_Monitoring_Logs/DemoLogsBlade