Alibaba Cloud Linux 3與CentOS 7的區(qū)別
CentOS 7停止維護(hù)EOL(End of Life)后,您可以選擇將CentOS 7遷移至Alibaba Cloud Linux 3。遷移前可以通過本文了解Alibaba Cloud Linux 3與CentOS 7有哪些區(qū)別。
關(guān)于CentOS EOL的應(yīng)對(duì)方案,請(qǐng)參見CentOS EOL應(yīng)對(duì)方案。
各操作系統(tǒng)在官方平臺(tái)公布的生命周期計(jì)劃,請(qǐng)參見操作系統(tǒng)維護(hù)周期。
內(nèi)核及核心工具鏈區(qū)別
組件 | CentOS 7 x86 | Alibaba Cloud Linux 3 x86 | Alibaba Cloud Linux 3 Arm64 | 說明 |
gcc | 4.8.5_44.el7 | 10.2.1_3.8.al8 | 10.2.1-3.5.al8 | 在遷移到Alibaba Cloud Linux 3之后,您的應(yīng)用程序需要重新編譯以適配新版本的動(dòng)態(tài)鏈接庫(kù),否則可能出現(xiàn)鏈接失敗的情況。 |
glibc | 2.17_326.el7_9 | 2.32_1.16.al8 | 2.32-1.12.al8 | |
內(nèi)核 | 3.10.0-1160.114.2.el7 | 5.10.134-16.1.al8 | 更多內(nèi)核差異請(qǐng)參見內(nèi)核區(qū)別。 | |
binutils | 2.27_44.base.el7_9.1 | 2.35_12.2.al8 | 無 | |
systemd | 219_78.el7_9.9 | 239_74.0.3.al8 | 無 | |
grub2 | 2.02_0.87.0.2.el7.centos.14 | 2.02-148.0.1.al8.1 | 無 |
系統(tǒng)重要組件版本區(qū)別
如果您在CentOS 7上通過編譯安裝的方式使用更高版本的組件,而非直接使用yum源提供的組件,在遷移至Alibaba Cloud Linux 3后可能系統(tǒng)會(huì)出現(xiàn)無法登錄,應(yīng)用無法正常運(yùn)行等現(xiàn)象。此時(shí),您需要選擇在Alibaba Cloud Linux 3上對(duì)相關(guān)組件進(jìn)行重新編譯,或者使用Alibaba Cloud Linux 3 yum源提供的組件。
組件 | CentOS 7 x86 | Alibaba Cloud Linux 3 x86 & Arm64 | 說明 |
python | python2/python3.4/python3.6 | python2/python3.6/python3.8/python3.11 | 在CentOS上 |
java-1.8.0-alibaba-dragonwell | 無 | 3:8.15.16.372-2.al8 | 在執(zhí)行 |
java-1.8.0-openjdk | 1:1.8.0.412.b08-1.el7_9 | 1:1.8.0.412.b08-2.0.1.1.al8 | |
golang | 1.20.12-1.el7 | 1.20.12-8.0.1.al8 | 無 |
nginx | 1:1.20.1-10.el7 | 1:1.20.1-1.0.3.al8 | 無 |
php | 5.4.16-48.el7 | 7.4.33-1.0.1.al8 | 無 |
mysql | 無 | 8.0.36-1.0.1.1.al8 | 在執(zhí)行 |
mariadb | 5.5.68-1.el7 | 3:10.5.22-1.0.1.al8 | |
postgresql | 9.2.24-9.el7_9 | 13.14-1.0.1.al8 | 無 |
redis | 3.2.12-2.el7 | 6.2.7-1.0.2.al8 | 無 |
openssl | 1.0.2k_26.el7_9 | 1.1.1k_12.0.1.al8 | 無 |
系統(tǒng)重要組件區(qū)別
組件 | CentOS 7 x86 | Alibaba Cloud Linux 3 x86 & Arm64 |
包管理 | yum | dnf |
網(wǎng)絡(luò)數(shù)據(jù)包過濾框架 | iptables | nftables |
容器組件 | docker | podman 說明 您也可以引入docker-ce自行部署。 |
端口區(qū)別
版本 | 協(xié)議 | 端口 | 服務(wù) |
CentOS 7 | TCP/UDP | 111 | rpcbind |
TCP | 22 | SSH | |
TCP | 25 | smtp | |
UDP | 68 說明 由NetworkManager進(jìn)程監(jiān)聽。 | dhcp | |
UDP/UDP6 | 323 | chronyd | |
Alibaba Cloud Linux 3 | TCP/UDP/TCP6/UDP6 | 111 | rpcbind |
TCP | 22 | SSH | |
UDP | 68 說明 由dhclient進(jìn)程監(jiān)聽。 | dhcp | |
UDP/UDP6 | 323 | chronyd | |
TCP/UDP | 5355 | systemd-resolve |
內(nèi)核區(qū)別
sysctl系統(tǒng)參數(shù)
sysctl系統(tǒng)參數(shù)差異較多,本文僅給出重要的sysctl差異說明。
變更配置項(xiàng)
sysctl | CentOS 7 x86 | Alibaba Cloud Linux 3 x86 & Arm64 | 說明 | Linux社區(qū)補(bǔ)丁信息 | ||
值 | 讀寫屬性 | 值 | 讀寫屬性 | |||
kernel.panic | 0 | rw | 1 | rw | 默認(rèn)行為改變。 此選項(xiàng)用于控制內(nèi)核在發(fā)生panic后,需要等待n(sysctl的值)秒自動(dòng)重啟。
| 無 |
kernel.watchdog_thresh | 10 | rw | 50 | rw | 以秒為單位的watchdog超時(shí)時(shí)間。 云上鏈路更為復(fù)雜,調(diào)整該參數(shù)以降低誤報(bào)warning的概率。 | 無 |
kernel.nmi_watchdog | 1 | rw | 0 | rw | 是否開啟hard lockup檢測(cè)。 在ECS上不支持NMI中斷,因此開啟此功能并無意義。 如果您使用裸金屬,且需要該功能,您可以手工打開該配置。 | 無 |
kernel.hung_task_timeout_secs | 120 | rw | 240 | rw | 以秒為單位的,處于D狀態(tài)的進(jìn)程未被調(diào)度的超時(shí)時(shí)間。 云上鏈路更為復(fù)雜,調(diào)整該參數(shù)以降低誤報(bào)warning的概率。 | 無 |
vm.drop_caches | 0 | rw | 無 | -w | 讀寫權(quán)限變更。 該選項(xiàng)原本支持讀取上次寫入的值的行為誤導(dǎo)用戶該選項(xiàng)是設(shè)置系統(tǒng)到非緩存模式,而非發(fā)起一次清除緩存的任務(wù)。為防止誤解,去掉了該開關(guān)的讀權(quán)限。 |
|
vm.dirty_ratio | 30 | rw | 40 | rw | 該選項(xiàng)受到tuned的影響,在CentOS 7上tuned使用virtual-guest進(jìn)行調(diào)優(yōu),設(shè)置的值為30。在Alibaba Cloud Linux上使用ecs-performance模式,值為40。 | 無 |
vm.numa_zonelist_order | default | rw | Node | rw | 隨Linux社區(qū)版本迭代而失效。 該選項(xiàng)的作用是控制系統(tǒng)內(nèi)存分配時(shí)從各個(gè)node&zone選擇的順序,隨著Linux社區(qū)版本迭代,已不需要用戶手動(dòng)控制。 |
|
net.ipv4.tcp_mem | 無 | rw | 無 | rw | 該選項(xiàng)由3個(gè)整型的值(low, pressure, max)組成,分別代表:
該選項(xiàng)的默認(rèn)值與系統(tǒng)內(nèi)存大小緊密相關(guān),但在同樣的內(nèi)存規(guī)格上您會(huì)觀察到Alibaba Cloud Linux 3上緩沖區(qū)大小相比CentOS 7小一半左右,這是Linux社區(qū)版本迭代調(diào)整了默認(rèn)值的初始化算法導(dǎo)致的。 |
|
net.ipv4.tcp_fastopen | 0 | rw | 1 | rw | 隨Linux社區(qū)版本調(diào)整默認(rèn)值。 該選項(xiàng)用于控制系統(tǒng)是否支持發(fā)送和接收TCP Fast Open相關(guān)報(bào)文。
|
|
net.ipv4.tcp_fack | 1 | rw | 0 | rw | 隨Linux社區(qū)版本迭代而失效。 用于支持TCP FACK特性,該特性已被RACK特性替代,因此在Alibaba Cloud Linux 3上已失效。 |
|
net.core.somaxconn | 128 | rw | 4096 | rw | 隨Linux社區(qū)版本而調(diào)整默認(rèn)值。 該選項(xiàng)用于控制socket監(jiān)聽隊(duì)列的最大長(zhǎng)度,128已無法滿足現(xiàn)代服務(wù)器的需求,故調(diào)整為4096。 |
|
net.core.default_qdisc | pfifo_fast | rw | fq_codel | rw | 默認(rèn)的qdisc模型,fq_codel能更好地解決bufferbloat問題。 | 無 |
已移除配置項(xiàng)
已移除配置項(xiàng)是指在CentOS 7中存在,在Alibaba Cloud Linux 3中被移除的配置項(xiàng)。
sysctl參數(shù) | 值 | 讀寫屬性 | 說明 | Linux社區(qū)補(bǔ)丁信息 |
kernel.panic_on_stackoverflow | 0 | rw | 隨Linux社區(qū)版本迭代被移除。 該選項(xiàng)用于啟用內(nèi)核棧溢出檢測(cè),在后續(xù)迭代中,內(nèi)核棧已默認(rèn)帶上guard page進(jìn)行檢測(cè),故該功能失效。 |
|
kernel.random.read_wakeup_threshold | 64 | rw | 隨Linux社區(qū)版本迭代被移除。 |
|
kernel.compat-log | 1 | rw | 隨Linux社區(qū)版本迭代被移除。 在x86 64位架構(gòu)上不支持虛擬8086模式,如果配置了該選項(xiàng),則調(diào)用vm86old()和vm86()時(shí)會(huì)打印warning日志。由于該warning并不是必要的,所以后續(xù)被移除了,此選項(xiàng)也一并被移除。 |
|
kernel.numa_balancing_settle_count | 4 | rw | 隨Linux社區(qū)版本迭代被移除。 Linux對(duì)不同類型的任務(wù)分別采用更科學(xué)的指標(biāo)區(qū)分負(fù)載,從而不再需要該選項(xiàng)來管控頻率的閾值。 |
|
kernel.sched_shares_window_ns | 10000000 | rw | 隨Linux社區(qū)版本迭代被移除,該功能在CentOS 7上已失效。 |
|
kernel.sched_time_avg_ms | 1000 | rw | 隨Linux社區(qū)版本迭代被移除。 由于Linux對(duì)RT調(diào)度類采用PELT負(fù)載跟蹤算法,從而拋棄舊算法及相關(guān)參數(shù),該參數(shù)則是其中之一。 |
|
vm.hugepages_treat_as_movable | 0 | rw | 隨Linux社區(qū)版本迭代被移除。 該配置項(xiàng)本意是允許從 ZONE_MOVABLE區(qū)域分配不可遷移的大頁(yè),以減少內(nèi)存碎片,但該功能目前已嚴(yán)重影響內(nèi)存熱插拔,所以被移除。 |
|
vm.nr_pdflush_threads | 0 | r- | 隨Linux社區(qū)版本迭代被移除,該功能在CentOS 7上已失效。 |
|
net.ipv4.tcp_tw_recycle | 0 | rw | 隨Linux社區(qū)版本迭代被移除。 該配置項(xiàng)允許處于TIME-WAIT的socket被快速回收。由于在實(shí)現(xiàn)上假設(shè)遠(yuǎn)端同一地址的時(shí)間戳是單調(diào)遞增的,而NAT和TCP時(shí)間戳隨機(jī)漂移特性已打破該假設(shè),導(dǎo)致該功能無法正常使用,故被移除。 |
|
net.ipv4.tcp_thin_dupack | 0 | rw | 隨Linux社區(qū)版本迭代被移除,該功能已被TCP RACK特性替代。 |
|
net.ipv4.tcp_max_ssthresh | 0 | rw | 隨Linux社區(qū)版本迭代被移除。該配置項(xiàng)本意是用于人工調(diào)整TCP慢啟動(dòng)速度的,但目前已被更有效且更加自動(dòng)化的方式替代,故移除。 |
|
fs.negative-dentry-limit | 0 | rw | 該配置項(xiàng)為CentOS 7自研配置項(xiàng),非Linux社區(qū)通用功能,已在CentOS 8中被移除。 | Why negative-dentry-limit sysctl parameter is not available in Red Hat Enterprise Linux 8? |
fs.may_detach_mounts | 0 | rw | 該配置項(xiàng)為CentOS 7自研配置項(xiàng),非Linux社區(qū)通用功能,已在CentOS 8中被移除。 | What is the parameter fs.may_detach_mounts on Red Hat Enterprise Linux 7? |
/sys/參數(shù)
路徑 | CentOS 7 x86 | Alibaba Cloud Linux 3 x86 & Arm64 | 說明 |
/sys/block/<blk>/queue/read_ahead_kb | 128 | 4,096 |
|
/sys/module/virtio_net/parameters/napi_tx | 無 | 開啟 |
|
內(nèi)核cmdline
cmdline | CentOS 7 x86 | Alibaba Cloud Linux 3 x86 & Arm64 | 說明 |
cgroup.memory=nokmem | 關(guān)閉 | 開啟 | 該參數(shù)用于禁用對(duì)kernel memory的cgroup審計(jì)和限制功能,開啟該參數(shù)有助于提升系統(tǒng)性能。更多信息,請(qǐng)參見龍蜥社區(qū)。
|
crashkernel=auto | 開啟 | 關(guān)閉 | 該參數(shù)用于自動(dòng)計(jì)算kdump kernel預(yù)留內(nèi)存的大小。
|
net.ifnames=0 | 開啟 | 開啟 | 該參數(shù)用于配置網(wǎng)絡(luò)接口的命名規(guī)則為傳統(tǒng)模式(例如:eth0,eth1),關(guān)閉systemd的可預(yù)測(cè)的網(wǎng)絡(luò)接口功能。 CentOS與Alibaba Cloud Linux均默認(rèn)已配置該參數(shù),表示配置為傳統(tǒng)模式。 說明 網(wǎng)絡(luò)接口命名變更很容易對(duì)兼容性造成影響。更多信息,請(qǐng)參見出錯(cuò)提示“Unsupported network configuration”。 |
內(nèi)核Kconfig
內(nèi)核Kconfig差異較多,本文僅給出重要的內(nèi)核Kconfig差異說明。
Kconfig | CentOS 7 x86 | Alibaba Cloud Linux 3 x86 | Alibaba Cloud Linux 3 Arm64 | 說明 |
CONFIG_NR_CPUS | 5120 | 1024 | 1024 | 支持最大CPU數(shù)量。 目前阿里云上并無超過1024核的實(shí)例,該差異無影響。 |
CONFIG_NODES_SHIFT | 10 | 6 | 6 | 支持最大NUMA數(shù)量。 目前阿里云上并無超過64個(gè)NUMA節(jié)點(diǎn)的實(shí)例,該差異無影響。 |
CONFIG_PREEMPT_NONE | is not set | y | is not set | 內(nèi)核搶占模式。 none模式在云上能獲取更好的性能,但Arm64由于歷史原因沒有做調(diào)整。 Alibaba Cloud Linux 3將在5.10.134-17內(nèi)核支持以cmdline的方式動(dòng)態(tài)調(diào)整默認(rèn)搶占模式。 |
CONFIG_PREEMPT_VOLUNTARY | y | is not set | y | |
CONFIG_BTRFS_FS | m | is not set | is not set | Alibaba Cloud Linux 3不支持btrfs文件系統(tǒng),推薦使用ext4或xfs文件系統(tǒng)。 |
Arm-64 KB版本兼容性說明
您可以通過購(gòu)買Alibaba Cloud Linux 3 倚天優(yōu)化鏡像獲取和使用Arm-64 KB版本的Alibaba Cloud Linux鏡像。一般內(nèi)核默認(rèn)PAGE_SIZE為4 KB,在Arm64上可以構(gòu)建64KB PAGE_SIZE的內(nèi)核,64 KB內(nèi)核相比4 KB內(nèi)核,有如下優(yōu)勢(shì):
減少頁(yè)表?xiàng)l目數(shù)量,提升iTLB命中率
減少缺頁(yè)中斷次數(shù)
減少文件頁(yè)緩存分配次數(shù)
減少struct page 的內(nèi)存占用
但是4 KB內(nèi)核與64 KB內(nèi)核也存在如下兼容性問題:
Jemalloc兼容性問題
Jemalloc是一個(gè)高效、可擴(kuò)展的通用內(nèi)存分配器。Jemalloc需要在編譯構(gòu)建時(shí)指定PAGE_SIZE,4 KB環(huán)境(或者指定編譯參數(shù)--with-lg-page=12
)編譯構(gòu)建的Jemalloc只適用于4 KB內(nèi)核,在64 KB內(nèi)核會(huì)有報(bào)錯(cuò)信息<jemalloc>: Unsupported system page size
。如果要在64 KB內(nèi)核上應(yīng)用Jemalloc,需要在64 KB環(huán)境 (或者指定編譯參數(shù)--with-lg-page=16
)進(jìn)行編譯構(gòu)建,此時(shí)構(gòu)建的Jemalloc兼容4 KB內(nèi)核與64 KB內(nèi)核。
使用內(nèi)置Jemalloc的應(yīng)用(例如Redis)同理。
目前Alibaba Cloud Linux 3上的軟件包redis(redis-6.2.7-1.0.2.al8.aarch64)
、jemalloc(jemalloc-5.2.1-2.1.al8.aarch64)
均已支持64 KB內(nèi)核,其余內(nèi)置jemalloc的應(yīng)用也不存在兼容性問題。
內(nèi)存開銷
64 KB內(nèi)核在無負(fù)載和有負(fù)載情況均不存在多余的內(nèi)存開銷。
但要注意64 KB內(nèi)核需要關(guān)閉THP與hugetext,以減少內(nèi)存開銷。具體方法是在cmdline中:
添加
transparent_hugepage=never
不添加
hugetext
寫放大問題
在Buffer Write場(chǎng)景下,頁(yè)緩存(Page Cache)大小為64 KB,在臟頁(yè)同步,尤其是在部分寫入操作時(shí),可能會(huì)存在額外的寫放大。
在云環(huán)境中,特別是使用ext4文件系統(tǒng)時(shí),上述問題不存在。這是因?yàn)閑xt4使用buffer_head
結(jié)構(gòu)來管理磁盤塊與內(nèi)存頁(yè)面之間的映射,它能夠精確追蹤到每個(gè)塊的臟標(biāo)記。在進(jìn)行回寫操作時(shí),即使頁(yè)緩存大小為64 KB,ext4也能夠僅對(duì)實(shí)際修改過的數(shù)據(jù)塊(如1KB)進(jìn)行寫回操作,而不是整個(gè)頁(yè)面。這種方式有效避免了因部分寫入導(dǎo)致的寫放大問題,提高了I/O效率。
在Linux系統(tǒng)中,頁(yè)緩存(Page Cache)是內(nèi)核用于緩存文件系統(tǒng)數(shù)據(jù)的一種機(jī)制,它使用內(nèi)存頁(yè)面(通常是4KB或更大,如64KB)來存儲(chǔ)文件內(nèi)容。當(dāng)數(shù)據(jù)從磁盤讀取或?qū)懭氪疟P時(shí),頁(yè)緩存可以提高性能并減少實(shí)際的磁盤I/O。
當(dāng)對(duì)頁(yè)緩存中的頁(yè)面進(jìn)行修改后,該頁(yè)面被視為臟頁(yè),因?yàn)樗松形磳懟氐酱疟P的數(shù)據(jù)。
2 MB大頁(yè)
64 KB內(nèi)核默認(rèn)的大頁(yè)(PMD)為512 MB,如果想使用2 MB大頁(yè),需在cmdline中添加 default_hugepagesz=2M
,此時(shí)使用的為64 KB內(nèi)核的CONT-PTE大頁(yè)。
64 KB內(nèi)核不支持1 GB的大頁(yè),如果通過/etc/fstab
指定了1 GB大頁(yè),需要?jiǎng)h除,否則啟動(dòng)過程會(huì)報(bào)錯(cuò)。
透明大頁(yè)
64 KB內(nèi)核應(yīng)關(guān)閉透明大頁(yè),具體方法是在cmdline中添加 transparent_hugepage=never
。
4 KB PAGE_SIZE對(duì)應(yīng)透明大頁(yè)大小為2 MB,64 KB PAGE_SIZE對(duì)應(yīng)透明大頁(yè)大小為512 MB,64 KB環(huán)境下開啟透明大頁(yè)會(huì)使內(nèi)存占用增加,從而預(yù)留更多內(nèi)存,且因?yàn)殡y以滿足透明大頁(yè)的分配條件(需要連續(xù)的512 MB物理空間)無法分配透明大頁(yè),所以64 KB內(nèi)核默認(rèn)關(guān)閉透明大頁(yè)。
其他使用透明大頁(yè)的特性也應(yīng)關(guān)閉,例如hugetext。64 KB內(nèi)核本身能覆蓋hugetext收益,不用擔(dān)心因?yàn)?4 KB內(nèi)核關(guān)閉hugetext帶來收益衰減問題。