⚔️

GCEでマルチキューNICを使う

2022/12/17に公開

はじめに

この記事は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