先日の Japan VMUG May Meeting with Intel で話題になったのですが、最近まで、Oracle から提供されている UEK の RPM には ptp_vmw ドライバが含まれていませんでした。そのため ptp_vmw が必要な場合は RHCK を利用する必要があったようです。
今回は、Oracle Linux 8 と最新の UEK 7.1 の環境に kernel-uek-modules-extra を追加インストールして、PTP のデバイスドライバが利用できることを確認してみます。
ESXi の仮想マシンに作成されるプレシジョン クロック デバイスでは、デバイスドライバとして ptp_vmw が利用されます。
Oracle Linux の UEK について
Oracle Linux では、Linux カーネルとして、2種類から選択できます。
- Unbreakable Enterprise Kernel(UEK):Oracle 独自の機能拡張があるカーネル
- Red Hat Compatible Kernel(RHCK):RHEL 互換のカーネル
Oracle Linux のバージョンごとにどのバージョンの UEK が同梱されているかは、下記のあたりが参考になります。
また、Oracle Linux と UEK はそれぞれ別にアップデート可能です。たとえば、「デフォルトでは UEK 6.x がインストールされている OL 8.x に、URK 7.x をインストールする」といったこともできます。
ちなみに、OL に同梱される RHCK のバージョンは、基本的に Red Hat Enterprise Linux(RHEL)に同梱されるカーネルのバージョンと一致します。たとえば、OL 8.7 であれば RHEL 8.7 と同じバージョンの RHCK カーネル(4.18.0-425.3.1)が同梱されます。
今回の環境
まず最初に、RPM パッケージをアップデートしておきます。
[root@lab-vm-04 ~]# dnf update -y && reboot
この時点では Oracle Linux 8.7 で、UEK 6.3 を利用しています。
[root@lab-vm-04 ~]# cat /etc/oracle-release Oracle Linux Server release 8.7 [root@lab-vm-04 ~]# uname -r 5.4.17-2136.319.1.2.el8uek.x86_64
UEK も、RHEL のカーネルと同様に RPM でインストールされます。
[root@lab-vm-04 ~]# rpm -q kernel-uek kernel-uek-5.4.17-2136.313.6.el8uek.x86_64 kernel-uek-5.4.17-2136.318.7.1.el8uek.x86_64 kernel-uek-5.4.17-2136.319.1.2.el8uek.x86_64
この時点の URK には、ptp_vmw のカーネル モジュールが含まれていません。
[root@lab-vm-04 ~]# modinfo ptp_vmw modinfo: ERROR: Module ptp_vmw not found.
UKE 7 のインストール
そこで、UEK 7 をインストールしてみます。この時点では、UEK6 の YUM リポジトリを参照しています。
[root@lab-vm-04 ~]# dnf repolist repo id repo の名前 ol8_UEKR6 Latest Unbreakable Enterprise Kernel Release 6 for Oracle Linux 8 (x86_64) ol8_appstream Oracle Linux 8 Application Stream (x86_64) ol8_baseos_latest Oracle Linux 8 BaseOS Latest (x86_64)
ol8_UEKR7 リポジトリは .repo ファイルに記載されているので・・・
[root@lab-vm-04 ~]# dnf repolist disabled repo id repo の名前 ol8_MODRHCK Latest RHCK with fixes from Oracle for Oracle Linux 8 (x86_64) ol8_UEKR6_RDMA Oracle Linux 8 UEK6 RDMA (x86_64) ol8_UEKR7 Latest Unbreakable Enterprise Kernel Release 7 for Oracle Linux 8 (x86_64) ol8_UEKR7_RDMA Oracle Linux 8 UEK7 RDMA (x86_64) ol8_addons Oracle Linux 8 Addons (x86_64) ol8_codeready_builder Oracle Linux 8 CodeReady Builder (x86_64) - Unsupported ol8_distro_builder Oracle Linux 8 Distro Builder (x86_64) - Unsupported ol8_kvm_appstream Oracle Linux 8 KVM Application Stream (x86_64) ol8_leapp Oracle Linux 8 (x86_64) Leapp Upgrade Utilities ol8_u0_baseos_base Oracle Linux 8 BaseOS GA (x86_64) ol8_u1_baseos_base Oracle Linux 8.1 BaseOS (x86_64) ol8_u2_baseos_base Oracle Linux 8.2 BaseOS (x86_64) ol8_u3_baseos_base Oracle Linux 8.3 BaseOS (x86_64) ol8_u4_baseos_base Oracle Linux 8.4 BaseOS (x86_64) ol8_u4_security_validation Oracle Linux 8 Update 4 (x86_64) Security Validations ol8_u5_baseos_base Oracle Linux 8.5 BaseOS (x86_64) ol8_u6_baseos_base Oracle Linux 8.6 BaseOS (x86_64) ol8_u7_baseos_base Oracle Linux 8.7 BaseOS (x86_64)
有効化します。
[root@lab-vm-04 ~]# dnf repolist repo id repo の名前 ol8_UEKR7 Latest Unbreakable Enterprise Kernel Release 7 for Oracle Linux 8 (x86_64) ol8_appstream Oracle Linux 8 Application Stream (x86_64) ol8_baseos_latest Oracle Linux 8 BaseOS Latest (x86_64)
そしてパッケージをアップデートすると、UEK 7 がインストールされます。今回は同時に OS を再起動(&& reboot)しています。
[root@lab-vm-04 ~]# dnf update -y && reboot
UEK 7.1(5.15.0-101) がインストールされて、UEK 6.3(5.4.17-2136.x) が削除されることがわかります。
[root@lab-vm-04 ~]# dnf update Latest Unbreakable Enterprise Kernel Release 7 for Oracle 55 kB/s | 3.0 kB 00:00 依存関係が解決しました。 ========================================================================================== パッケージ Arch バージョン リポジトリー サイズ ========================================================================================== インストール: kernel-uek x86_64 5.15.0-101.103.2.1.el8uek ol8_UEKR7 1.4 M アップグレード: e2fsprogs x86_64 1.46.2-2.el8 ol8_UEKR7 1.0 M e2fsprogs-libs x86_64 1.46.2-2.el8 ol8_UEKR7 242 k libbpf x86_64 2:0.6.0-6.el8 ol8_UEKR7 162 k libcom_err x86_64 1.46.2-2.el8 ol8_UEKR7 51 k libss x86_64 1.46.2-2.el8 ol8_UEKR7 55 k xfsprogs x86_64 5.15.0-1.0.3.el8 ol8_UEKR7 1.1 M 依存関係のインストール: kernel-uek-core x86_64 5.15.0-101.103.2.1.el8uek ol8_UEKR7 52 M kernel-uek-modules x86_64 5.15.0-101.103.2.1.el8uek ol8_UEKR7 61 M 削除中: kernel-uek x86_64 5.4.17-2136.313.6.el8uek @ol8_UEKR6 135 M トランザクションの概要 ========================================================================================== インストール 3 パッケージ アップグレード 6 パッケージ 削除 1 パッケージ ダウンロードサイズの合計: 117 M これでよろしいですか? [y/N]:
再起動が完了すると、カーネルが UEK 7.1 になりました。
[root@lab-vm-04 ~]# cat /etc/oracle-release Oracle Linux Server release 8.7 [root@lab-vm-04 ~]# uname -r 5.15.0-101.103.2.1.el8uek.x86_64
しかし UEK 7.1 の kernel-uek RPM にも、ptp_vmw のカーネル モジュールが含まれないようです。
[root@lab-vm-04 ~]# modinfo ptp_vmw modinfo: ERROR: Module ptp_vmw not found.
そこで、追加モジュールが含まれる kernel-uek-modules-extra RPM をインストールしてみます。
[root@lab-vm-04 ~]# dnf install -y kernel-uek-modules-extra
UEK の ptp_vmw.ko.xz が追加されました。
[root@lab-vm-04 ~]# modinfo ptp_vmw filename: /lib/modules/5.15.0-101.103.2.1.el8uek.x86_64/kernel/drivers/ptp/ptp_vmw.ko.xz license: Dual BSD/GPL author: VMware, Inc. description: VMware virtual PTP clock driver srcversion: 188B9501F71B9AD0C3834B4 alias: acpi*:VMW0005:* depends: retpoline: Y intree: Y name: ptp_vmw vermagic: 5.15.0-101.103.2.1.el8uek.x86_64 SMP mod_unload modversions sig_id: PKCS#7 signer: Oracle CA Server sig_key: 32:B0:29:2D:B0:CB:16:F0:A4:D9:94:54:74:8C:70:83:CB:80:AB:FE sig_hashalgo: sha512 signature: B0:C2:F4:79:58:BD:53:55:22:AB:51:AF:3B:26:3C:67:D8:12:A8:EF: BD:45:B3:62:3A:8A:7C:CB:1C:88:BA:65:11:7B:0C:3D:85:CF:F6:18: 8D:BA:04:8B:61:7F:66:1C:A6:08:52:4D:2E:BA:74:53:A2:9F:90:30: 24:8A:25:CF:1F:7B:90:46:74:7D:6B:D3:B2:D2:5C:1E:9F:11:E2:08: EA:1C:0D:F1:F3:9E:4C:C3:95:41:10:86:B9:6C:3E:FA:25:5A:74:84: 2B:F9:00:1C:60:9B:C0:44:6E:12:A2:7B:E2:2B:43:DE:93:13:A8:66: 47:6C:0A:45:56:D3:CF:16:8D:E9:CF:5B:3B:D2:90:A6:22:E9:C6:7A: 75:28:4A:CF:F9:2D:B8:E8:94:82:C7:FD:2D:38:67:7B:F3:B4:EC:56: B1:6F:13:C4:16:69:07:6C:9D:46:94:11:C2:A2:02:ED:90:F1:C2:E3: 2A:01:1A:E3:F3:4D:BF:EF:E8:CB:A3:F3:EA:D5:D1:5A:DF:BC:D2:D9: 2F:12:A6:E6:D8:54:7B:BE:C7:9C:46:76:B2:E8:B6:27:36:A0:22:20: 8B:D4:7E:BE:35:3E:66:5A:EB:2E:7F:3D:8D:2D:CB:A7:0D:55:3F:23: 83:AB:70:98:74:D7:B6:6A:4A:4D:0D:10:1B:09:1F:EA:BC:12:E7:1C: 43:95:3A:78:76:D8:BD:91:85:E9:09:8A:DC:BD:24:E1:8D:8F:63:B4: E2:17:B0:E1:A2:A5:7F:7C:7B:5A:CF:18:70:9F:D4:22:6D:30:D6:2D: 2E:14:40:79:53:65:65:B4:93:F4:B8:DA:7C:4A:DB:53:D0:50:23:10: EA:C2:3C:D6:BB:80:EC:F5:68:C0:09:49:06:01:38:24:32:DB:EA:DF: 5A:68:1D:62:B8:F3:4C:40:6E:90:13:A9:39:8C:04:E4:00:BC:1B:3D: C0:83:C2:E8:C0:5B:9E:ED:32:64:48:C6:D7:A5:4D:FE:51:CE:E3:F4: 29:B7:BB:61:CF:E7:84:C7:4B:59:32:26:B2:06:32:79:17:72:12:2A: 6F:87:E6:57:AE:0C:C0:B3:64:AA:08:2B:5B:BB:86:7A:B2:AA:E3:31: EE:7C:5C:9C:99:39:6F:96:69:A9:0A:59:91:BD:07:14:BD:D8:AF:8F: 02:4F:D8:2C:98:2D:6E:7B:DD:5C:39:DA:33:AA:53:78:B1:57:67:87: 07:9F:83:DC:3F:DD:7B:D6:22:D2:F0:D0:41:AA:0D:46:F7:2D:AA:1C: D9:6A:A9:78:D5:84:49:28:E5:F8:72:B1:C9:8B:E0:82:53:E8:FF:5A: 96:4F:95:16:0C:1D:19:DD:3B:32:E8:C9
これで、UEK でも ptp_vmw が利用できそうです。
[root@lab-vm-04 ~]# modprobe ptp_vmw [root@lab-vm-04 ~]# lsmod | grep ptp_vmw ptp_vmw 16384 0
おまけ
UKE 自体には、以前から ptp_vmw ドライバが追加されていました。
しかし、カーネル ビルドの config ファイルで CONFIG_PTP_1588_CLOCK_VMW=m が指定されていなかったので、カーネル モジュールが RPM には追加されていなかったようです。
そして、OL8 / OL9 どちらの RPM でも、kernel-uek ではなく kernel-uek-modules-extra に追加されています。
-
https://github.com/oracle/linux-uek/blob/uek7/u1/uek-rpm/ol8/mod-extra.list
-
https://github.com/oracle/linux-uek/blob/uek7/u1/uek-rpm/ol9/mod-extra.list
ちなみに、VMware Photon OS では、3.0 の頃から追加されていました。
-
https://github.com/vmware/photon/blob/3.0/SPECS/linux/config-esx#LL2230
-
https://github.com/vmware/photon/blob/4.0/SPECS/linux/config-esx#L2416
-
https://github.com/vmware/photon/blob/4.0/SPECS/linux/config-esx#LL2416
以上、Oracle UEK での ptp_vmw の話でした。