GCEでマルチキューNICを使う
はじめに
この記事はGCP(Google Cloud Platform) Advent Calendar 2022の9日目のエントリーとして書かれました。
GCEのデフォルトのNIC(virtio)はマルチキューではありません。しかし、特定のマシンファミリーとGoogle Virtual NIC(gVNIC)の組み合わせでマルチキューを使うことができるようです。私が動作確認をしたのはTau T2A マシンシリーズ(t2a-*
)です。
gVNICを使うカスタムイメージの作成
Google Virtual NIC の使用 | Compute Engine ドキュメント | Google Cloud を参考にgVNICを使うように設定されたVMイメージを作成します。
$ gcloud compute images create $NAME --source-image-family=rocky-linux-9-optimized-gcp-arm64 --source-image-project=rocky-linux-cloud --guest-os-features=GVNIC
$NAME
には作成するVMイメージ名を指定してください。
T2Aはarm64ベースのインスタンスのためベースとなるイメージもarm64のものを使っています。今回はRocky Linuxのものを使いました。それ以外のディストリビューションが使いたい場合は
オペレーティング システムの詳細 | Compute Engine ドキュメント | Google Cloud から好きなものを選んでください。gcloud compute images list
コマンドで探すこともできます。
VMインスタンスの作成
$ gcloud compute instances create $NAME --zone=asia-southeast1-b --image=my-rocky9arm64-gvnic --image-project=$PROJECT --network-interface=nic-type=GVNIC --machine-type=t2a-standard-4
$NAME
には先ほど作成したVMイメージ名、$PROJECT
にはGCPでのあなたのプロジェクトIDを指定してください。
ここで注意が必要なのは、ゾーンが日本(asia-northeast*
)ではないことです。残念ながらT2Aは日本ではまだサポートされていません。ここではサポートしているasia-southeast1-b
(シンガポール)を指定しています。
インスタンスの起動とマルチキューの確認
gcloud compute instances start $NAME
gcloud compute ssh $NAME
ethtool
で確認すると確かにキューが複数作成されています。
[ozaki-r@rocky9arm64-gvnic ~]$ ethtool -l eth0
Channel parameters for eth0:
Pre-set maximums:
RX: 2
TX: 2
Other: n/a
Combined: n/a
Current hardware settings:
RX: 2
TX: 2
Other: n/a
Combined: n/a
[ozaki-r@rocky9arm64-gvnic ~]$ dmesg |grep gvnic
[ 1.550889] gvnic 0000:00:00.0: enabling device (0010 -> 0012)
[ 1.574454] gvnic 0000:00:00.0: Driver is running with GQI QPL queue format.
[ 1.575786] gvnic 0000:00:00.0: MAC addr: 42:01:0a:94:00:03
[ 1.576798] gvnic 0000:00:00.0: TX queues 2, RX queues 2
[ 1.577757] gvnic 0000:00:00.0: Max TX queues 2, Max RX queues 2
[ 1.593830] gvnic 0000:00:00.0: GVE version 1.0.0
[ 1.594700] gvnic 0000:00:00.0: GVE queue format 2
[ 10.686509] gvnic 0000:00:00.0 eth0: Device link is up.
他のマシンタイプ(t2d-standard-4
)だと以下のようにキューが複数になりません。
[ozaki-r@rocky9-gvnic ~]$ ethtool -l eth0
Channel parameters for eth0:
Pre-set maximums:
RX: 1
TX: 1
Other: n/a
Combined: n/a
Current hardware settings:
RX: 1
TX: 1
Other: n/a
Combined: n/a
[ozaki-r@rocky9-gvnic ~]$ dmesg |grep gvnic
[ 4.129655] systemd[1]: Hostname set to <rocky9-gvnic>.
[ 6.177748] gvnic 0000:00:04.0: Driver is running with GQI QPL queue format.
[ 6.179085] gvnic 0000:00:04.0: MAC addr: 42:01:0a:92:00:14
[ 6.179966] gvnic 0000:00:04.0: TX queues 1, RX queues 1
[ 6.180780] gvnic 0000:00:04.0: Max TX queues 1, Max RX queues 1
[ 6.188780] gvnic 0000:00:04.0: GVE version 1.0.0
[ 6.189751] gvnic 0000:00:04.0: GVE queue format 2
[ 12.332538] gvnic 0000:00:04.0 eth0: Device link is up.
おわりに
GCEでマルチキューNICが使えることを確認しました。
今回はT2Aで確認しましたが、それ以外のマシンタイプでも使えるかもしれません。(網羅的に調べたわけではないのでどのタイプで使えるのかはわかっていません。どこかに情報がありますかね?)
Discussion