返回
2025/03/25
10. 理解 Oracle Linux 的兩種核心 “UEK” 與 “RHCK”
Oracle Linux 有兩種核心:與 RHEL 相容的 Red Hat Compatible Kernel (RHCK) 和 Oracle Linux 獨有的 Unbreakable Enterprise Kernel (UEK)。
如果您從未使用過 Oracle Linux,您可能會對 Unbreakable Enterprise Kernel 感到擔憂。在本文中,我們將解釋 Unbreakable Enterprise Kernel,以及其相容性和判斷何時使用的標準。
Red Hat Compatible Kernel 與 Unbreakable Enterprise Kernel
作為基本介紹,我們將提供 Red Hat Compatible Kernel 和 Unbreakable Enterprise Kernel 的概述。
什麼是 Red Hat Compatible Kernel?
顧名思義,Red Hat Compatible Kernel (RHCK) 是與 RHEL 相容的核心,僅僅是 RHEL 核心原始碼的重建版本。由於只是重建版本,只要版本號相同,它與 RHEL 的行為相同,包括錯誤。
下表顯示了 Oracle Linux 每個主要版本的 RHCK 和 glibc 版本。為了強調同一 Linux 主要版本內的相容性,核心和 glibc 等重要組件的基礎版本不會改變。相反,當有更新時,發行號將如下所述改變。
Linux 版本 | RHCK 版本 | glibc 版本 |
---|---|---|
Oracle Linux 9 | 5.14.0 | 2.34 |
Oracle Linux 8 | 4.18.0 | 2.28 |
Oracle Linux 7 | 3.10.0 | 2.17 |
下圖顯示了核心和 glibc 的 RPM 套件名稱。當發布更新套件時,基礎版本保持不變,發行號會更新。
圖 1 核心/glibc 版本與發行
什麼是 Unbreakable Enterprise Kernel?
Unbreakable Enterprise Kernel (UEK) 是 Oracle Linux 獨特的核心,基於比 RHCK 更新的核心,並與 RHCK 相容。以下手冊提供了其功能的參考。
官方文件:Unbreakable Enterprise Kernel
Unbreakable Enterprise Kernel (UEK) 是由 Oracle 構建並通過 Oracle Linux 支援的 Linux 核心。其重點在於性能、穩定性和盡可能少的回溯(backports),方法是盡可能緊密地追蹤主線原始碼。UEK 經過充分測試,用於運行 Oracle 的工程系統、Oracle 雲基礎架構以及 Oracle 客戶的大型企業部署。
Unbreakable Enterprise Kernel 預設包含並啟用於 Oracle Linux 核心中。它基於最新的穩定主線開發 Linux 核心,並包括與 Oracle 資料庫、Oracle 中間件和 Oracle 硬體工程團隊合作開發的優化,以確保穩定性和對最苛刻企業工作負載的最佳性能。
主要要點如下:
- UEK 是由 Oracle 開發並支援的 Linux 核心。
- Oracle Linux 的預設核心
- 基於新的穩定主線 Linux 核心版本
- 與 Exadata 和 Oracle 資料庫團隊合作開發,注重性能和穩定性
- 在包括 Exadata 和 Oracle 雲基礎架構的大型企業工作負載環境中測試
Oracle Linux 與核心版本的關係
UEK 的版本號根據其基於的核心而變化,例如命名為 UEK6 和 UEK7。與 RHCK 的主要區別在於 Oracle Linux 的主要版本與 UEK 版本並不固定。下表顯示了 UEK 與 Oracle Linux 的對應關係。從此表可見,Oracle Linux 8 可以使用 UEK6 和 UEK7。
UEK 版本 | 核心版本 | Oracle Linux 7 | Oracle Linux 8 | Oracle Linux 9 |
---|---|---|---|---|
UEK7 | 5.15.0 | × | ○ | ○ |
UEK6 | 5.4.17 | ○ | ○ | × |
UEK5 | 4.14.35 | ○ | × | × |
UEK4 | 4.1.12 | ○ | × | × |
下表比較了 Oracle Linux 的 RHCK 和 UEK 核心版本。Oracle Linux 9 於 2022 年發布,因此 RHCK 和 UEK 版本之間的差異很小。然而,由於 Oracle Linux 7 和 Oracle Linux 8 已發布一段時間,RHCK 和 UEK 版本之間的差異較大。
Linux 版本 | RHCK | UEK |
---|---|---|
Oracle Linux 9 | 5.14.0 | 5.15.0 |
Oracle Linux 8 | 4.18.0 | 5.4.17, 5.15.0 |
Oracle Linux 7 | 3.10.0 | 4.1.12, 4.14.35, 5.4.17 |
Linux 核心版本命名慣例
既然我們已經介紹了 Linux 核心版本,讓我們再次看看命名慣例。實際上,沒有絕對的標準,因為它已經多次改變,且 kernel.org 的原始核心與 Linux 發行版之間的命名慣例略有不同。
kernel.org 的命名慣例
首先,讓我們看看官方 Linux 核心網站 kernel.org 使用的命名慣例。Linux 核心命名為「abc」,並按以下方式稱呼。然而,這種命名慣例並非絕對。
a:主要版本號
b:次要版本號
c:補丁號或修訂號
此外,5.19 之後的下一個版本是 6.0,但這並不是因為功能有了重大變化。只是因為不希望 b 的數字太大,當 b 達到大約 20 時,通常會將 a 增加一。而 c 是補丁級別的修改,例如錯誤修復。因此,現在通常將版本號或發行號稱為「ab」或「abc」的組合。
在下圖中,主要版本被劃掉,因為它不再經常使用,但當您想明確第一個數字時仍會使用。
圖 2 Linux 核心版本命名慣例
看看下圖。它顯示了 Linux 核心的開發歷史。灰色部分是開發期間,在一定時間後,開發轉向下一個版本。換句話說,特定的 Linux 版本「abc」每隔幾年重複一次「開發 → 支援 → LTS(長期支援)」的生命週期。LTS 核心每年發布一次,支援約五年。
來源:https://en.wikipedia.org/wiki/Linux_kernel_version_history
圖 3 Linux 核心版本歷史 6.x

圖 4 Linux 核心版本歷史 5.x

Linux 發行版的命名慣例
Linux 發行版與 kernel.org 的命名慣例略有不同。Linux 發行版核心命名為「abc-z」,但實際上,大多數發行版是「ab0-z」,其中 c 是零。這不僅適用於 RHEL,也適用於 Ubuntu,以及 UEK7 及之後的版本。
下圖顯示了 Linux 發行版中核心版本的稱呼方式。目前沒有普遍共識,似乎根據使用情境和個人而有所不同。
圖 5 Linux 發行版名稱
「基礎版本」這個術語是平台的新名詞。它表示基於的 kernel.org 版本。然而,c 被強制設為零,因此即使 基礎版本是 5.15.0,其基於的核心版本不一定是 5.15.0。例如,UEK7 是版本 5.15.0,但它基於 5.15.6。
$ rpm -q --changelog kernel-uek-5.15.0-105.125.6.2.2.el9uek | tail -n 2
- Linux 5.15.6 (Greg Kroah-Hartman)
主線、長期、穩定和 rc 之間的關係
讓我們看看官方 Linux 核心頁面,Linux 核心檔案。列出了多個 Linux 核心版本,標籤包括主線(mainline)、長期(longterm)、穩定(stable)和 rc。我將在下文解釋每一個。
圖 6 Linux 核心檔案

下圖顯示了從 kernel.org 摘錄的一些核心版本並添加了評論。主線是主要開發。一旦 rc(釋出版本候選)可用,它就成為正式版本,因此主線和穩定指的是同一狀態。在穩定版本中,每隔幾個版本會成為長期版本,並長期支援。
圖 7 kernel.org 上的生命週期
什麼是回溯(backporting)?
這裡有一個需要記住的詞:回溯(backporting)。回溯指的是將新版本軟體中包含的功能或修復應用到舊版本軟體上。
例如,將版本 6.0 中引入的新補丁應用到版本 5.0 稱為回溯。通常,兩個版本之間的差異越大,程式碼基礎的差異越大,應用起來就越困難。此外,有時舊版本中不存在該錯誤,因此回溯並不必要。
有些人可能想知道回溯的反義詞是什麼。例如,將軟體版本 5.0 的錯誤修復應用到較新的軟體版本 6.0 的情況。我做了一些研究,但沒有普遍的術語,似乎使用了回溯、合併、前移(forward-porting)等詞。許多人似乎不假思索地稱之為回溯。
以下文字是開頭介紹的 UEK 描述的一部分。
其重點在於性能、穩定性和最小的回溯,方法是盡可能緊密地追蹤主線原始碼。
考慮到我們迄今討論的內容,Oracle 提出了以下主張:
- 較新的主線原始碼基礎更可能具有更好的性能和穩定性,因為它們包含更多新功能和錯誤修復。
- 從較新的主線原始碼開始意味著原始碼的差異較少,因此需要最少的回溯。
Linux 內部基礎知識
關於 UEK 最重要的知識之一是其與 RHEL 核心(RHCK)的相容性。要理解相容性,對 Linux 作業系統的知識至關重要。因此,我們將解釋 Linux 內部結構的基礎知識。
Linux 作業系統的主要組件
下圖顯示了 Linux 作業系統的主要組件及其關係。在試圖理解 Linux 作業系統時,記住這些資訊很重要。
- Linux 核心
核心是 Linux 作業系統的核心組件。它接收來自應用程式的請求,並執行進程管理和記憶體管理以執行程式。它還使用核心模組(即設備驅動程式)來管理檔案系統和控制設備進行輸入輸出。核心的角色可以總結如下。最好將其理解為對硬體作用的功能。- 對 CPU、記憶體、磁碟、網路卡等的硬體資源管理
- 對運行在 Linux 上的應用程式的進程管理和控制
- 核心模組
核心模組是擴展核心功能的二進位檔案。它們主要是設備驅動程式,格式為可按需載入。這允許通過簡單添加驅動程式來支援新硬體,並減少記憶體使用。 - 系統庫
系統庫(或簡稱庫)是程式常用的功能集合,提供了作業系統提供的大多數功能。最著名的是 glibc,即 Linux 中使用的標準 C 庫。它被稱為 glibc,因為它最初由 GNU 開發為 GNU C 庫。
圖 8. Linux 的內部結構
理解基礎知識(庫函數與系統呼叫)
圖 8 中的應用程式指的是各種程式,包括作業系統標準包含的命令和工具。這些程式通過調用庫函數和系統呼叫運行。讓我們理解它們之間的區別。
「庫」安裝在 /lib64
和 /usr/lib
中。如果您使用 nm
命令顯示 glibc 的符號資訊,您會看到它包含 printf()
。符號資訊指的是庫或可執行程式中包含的功能和變數。
printf()
根據給定的參數運行,必要時向核心發出指令。
$ rpm -qf /lib64/libc.so.6
glibc-2.34-60.0.3.el9.x86_64
$ nm /lib64/libc.so.6 | grep "T printf"
000000000006f430 T printf
000000000006e8f0 T printf_size
000000000006f350 T printf_size_info
「系統呼叫」提供了操作硬體的功能,例如檔案輸入輸出、新進程創建、網路通訊等。在圖 8 中,系統呼叫直接從應用程式調用。然而,它也可以通過包含在 glibc 中的系統呼叫包裝函數調用。
您讀到這裡了嗎?您可以看到像 glibc 這樣的庫非常重要。因此,基於 RHEL 的發行版在主要版本改變之前不會改變 glibc 版本。
核心模式與使用者模式
描述 核心模式 和 使用者模式。
訪問硬體資源的程式(如核心和設備驅動程式)在稱為「核心模式」的特殊特權模式下運行。它們在單一、隔離的記憶體空間中運行,利用 CPU 的保護功能,且由於不需要上下文切換,運行速度非常快。核心不僅運行每個進程,還提供對硬體的受保護訪問。
相反,一般程式在稱為「使用者模式」的記憶體空間中運行。在使用者模式下運行的程式無法直接訪問硬體。相反,它們通過系統呼叫訪問核心功能,最終由核心訪問硬體。
基礎知識總結
讓我們簡要總結迄今介紹的 Linux 內部基礎知識。
- 核心和 glibc 都是 Linux 的重要組件,但角色不同
- 核心負責控制硬體。
- 庫為常用程式提供功能。最重要的是 glibc。
- 要訪問硬體,需要進行系統呼叫。
- 程式通過系統呼叫或庫函數訪問硬體。
容器如何運作
接下來,我們將解釋容器。您可能在解釋核心後會想,「為什麼是容器?」那是因為理解容器的運作方式是理解核心相容性的好主題。
容器結構
下圖比較了基於虛擬化管理程式和基於容器的虛擬化:虛擬機器有客戶作業系統和核心,而容器只包含應用程式和庫,但沒有核心。
圖 9 虛擬化管理程式型與容器型的區別
容器不需要核心的原因是它使用主機作業系統中的核心。雖然容器使用 Linux 功能(如 cgroups 和 Namespace)來隔離彼此,但它們只是運行在主機作業系統上的進程。請看下圖。只要容器包含運行應用程式所需的庫和程式,它就能運行。
圖 10 容器如何運作
Linux 核心相容性
這裡有一個重要的內容。
即使創建容器映像的作業系統與主機作業系統的 Linux 版本不同,它也能運作。
例如,假設運行容器引擎的主機作業系統是 Ubuntu Server 22.04 LTS。在這種情況下,即使容器映像使用 Oracle Linux 9 創建,只要包含必要的庫和二進位檔案,它也能運作。雖然兩者都需要是 Linux,但即使 Linux 核心版本略有不同,它們也能運作。
然而,這是技術上是否運作的問題,與供應商是否提供技術支援無關。
圖 11 Linux 核心相容性
讓我詳細解釋一下。請看下方的圖 12。Linux 系統呼叫中應用程式與核心之間的介面稱為應用程式二進位介面(ABI)。Linux 核心在開發時考慮了相容性,以便從早期版本存在的系統呼叫可以用相同的規格調用。因此,即使 Linux 核心版本略有不同,應用程式的運作方式也相同。
圖 12 通過應用程式二進位介面維持相容性
應用程式二進位介面 (ABI)
ABI 是一個介面定義,具體來說是系統呼叫名稱、參數資料類型、參數數量、返回值資料類型和值等。Linux 核心的開發確保這些不會改變。如果 ABI 不變,調用系統呼叫時就不會出現錯誤。
然而,如果核心版本不同,系統呼叫的內部實現可能不同。但是,系統呼叫是對硬體的基本指令,例如「將資料寫入磁碟」或「分配記憶體」。因此,外部行為也被設計為相同。這就是相容性維持的方式。
圖 13 通過 ABI 維持的相容性
需要注意的不相容性
另一方面,您應該注意哪些不相容性?請看下方的圖 14。這些是像設備驅動程式這樣的核心模組。即使核心版本號匹配,如果末尾的發行號不同,它們也可能無法運作。一些核心模組可以吸收發行號的細微差異,但建議重新編譯。
雖然與核心無關,但應用程式相容性需要注意的一點是語言、框架等使用的庫。庫經常更新,通常有限制,例如 XXX 庫 2.0 或更高版本。
圖 14. 核心模組不相容性
比較 UEK 與 RHCK
現在我們已經介紹了基礎知識,終於可以進入比較的主題:相容性和功能。
與 RHCK 的相容性
這是關於 UEK 與 RHCK 之間的相容性。如果您讀到這裡,您可能已經知道了。UEK 的開發維持了與 RHCK 的 ABI 相容性。因此,如果是在使用者模式下運行的普通應用程式,它是相容的。
然而,有幾點需要注意。
商業軟體產品的支援
第一點是商業軟體產品是否得到支援。即使商業軟體產品支援 Oracle Linux,它可能支援 RHCK 但不支援 UEK。實際上,在使用者模式下運行的應用程式通常不會有問題,但如果您想優先考慮供應商的支援政策,請使用 RHCK。
需要注意相容性的商業軟體範例之一是防毒產品。一些防毒產品作為核心模組運行,因此在這種情況下,您需要檢查它們是否相容。
日本軟體的選擇不多,但您可以在 Oracle Linux ISV 目錄 中檢查 Oracle Linux 的相容性。
使用知名製造商的伺服器時
最重要的一點是 Oracle Linux 是否包含在支援的硬體列表中。如果製造商不支援,出現問題時他們很可能無法幫助您。
此外,由於伺服器配備了特殊硬體(如 RAID 控制器和 NIC),製造商可能提供自己的設備驅動程式。如果驅動程式不受支援,您可能無法使用它們。
請查看製造商的網頁或 Oracle Linux 硬體認證列表 以獲取支援資訊,其中還包括 RHCK 和 UEK 支援的資訊。
功能差異
很難概括功能的差異,因為它們因核心版本而異,但一般來說,UEK 基於較新的主線核心,因此具有更好的性能和更多功能。
例如,在 Oracle Linux 9 中,UEK7 的基礎版本是 5.15.0,而 RHCK 的基礎版本是 5.14.0。此時差異不大。然而,如下表所示,即使在同一主要版本內,UEK 也會改變。幾年後,Oracle Linux 9 將發布 UEK8,核心版本的差異將擴大。
Linux 版本 | UEK4 | UEK5 | UEK6 | UEK7 |
---|---|---|---|---|
Oracle Linux 9 | × | × | × | ○ |
Oracle Linux 8 | × | × | ○ | ○ |
Oracle Linux 7 | ○ | ○ | ○ | × |
UEK 獨有的著名功能包括 ocfs2 和 btfs。還有其他功能,但詳情請參閱「Unbreakable Enterprise Kernel 發行說明」中的「新功能和變更」。
圖 15. Unbreakable Enterprise Kernel 第 7 版發行說明

總結:何時使用 UEK 或 RHCK?
UEK 專為大規模 Oracle 資料庫和 Oracle Linux KVM 工作負載設計,基於較新的核心,這意味著它通常提供更好的性能和功能。
然而,UEK 並非絕對必要。我認為您應該根據情況和目的使用它們。在以下情況 1 和 2 中,您應考慮使用 RHCK。重要的是理解 UEK 與 RHCK 的區別並適當使用它們。我還將介紹一個總結迄今解釋內容的表格。
- 如果您使用的是物理伺服器且製造商僅支援 RHCK
請使用 RHCK。 - 如果您使用商業軟體且供應商僅支援 RHCK
最好使用 RHCK。然而,如果您在自己的系統上使用並能承受風險,UEK 也是一個選項。
UEK 與 RHCK 的優點與缺點
項目 | 優點 | 缺點 |
---|---|---|
功能與性能 | 根據您比較的 UEK 和 RHCK 版本,UEK 可能具有更好的功能和性能,因為它使用較新的主線核心,並可能對 Oracle 資料庫進行優化。 | |
在使用者模式下運行的應用程式的相容性 | 相容 | 對於商業套裝產品,根據供應商的支援政策,可能無法獲得支援。 |
在核心模式下運行的核心模組 | 以原始碼提供的設備驅動程式等很可能相容 | 在核心模式下運行的防毒軟體和設備驅動程式通常不相容。 |
其他 | 知名製造商的伺服器可能支援 Oracle Linux (RHCK) 但不支援 UEK。 |