楊蓉
Google工程師的一個(gè)新的Linux內(nèi)核補(bǔ)丁解決了一個(gè)問(wèn)題,這個(gè)問(wèn)題是由許多人可能沒(méi)有體驗(yàn)過(guò)的情況引起的,那就是一臺(tái)服務(wù)器當(dāng)中插著太多的NVMe驅(qū)動(dòng)器,這個(gè)問(wèn)題使正確關(guān)閉一個(gè)驅(qū)動(dòng)器所需時(shí)間較長(zhǎng)。
還記得Sun公司的X4500存儲(chǔ)服務(wù)器嗎,它的代號(hào)為Thumper,它出現(xiàn)時(shí)確實(shí)很激進(jìn):一個(gè)3U的雙處理器服務(wù)器密密麻麻裝了48個(gè)驅(qū)動(dòng)器托架。當(dāng)他們不得不重新啟動(dòng)時(shí),需要很長(zhǎng)的時(shí)間。
一個(gè)有16個(gè)驅(qū)動(dòng)器的存儲(chǔ)服務(wù)器,每次重啟都會(huì)浪費(fèi) 72 s的時(shí)間。雖然也就是泡杯咖啡的時(shí)間,但仍然很煩人,因?yàn)檫@完全是不必要的。
問(wèn)題主要出在內(nèi)核的驅(qū)動(dòng)器關(guān)閉功能是同步的:對(duì)于每個(gè)驅(qū)動(dòng)器,它都會(huì)等待關(guān)閉命令完成,然后再進(jìn)行下一個(gè)。新的內(nèi)核補(bǔ)丁做了完全相同的事情,但改變了調(diào)用的方式,使其成為異步的,它向第一個(gè)驅(qū)動(dòng)器發(fā)出調(diào)用,然后立即轉(zhuǎn)到下一個(gè),并按順序進(jìn)行。當(dāng)它們都返回所需的狀態(tài)工作就完成了。
雖然這并不能直接幫助大多數(shù)人,但有時(shí)這類變化會(huì)產(chǎn)生令人非常愉快的作用。例如,有一個(gè)為內(nèi)核開發(fā)者提供的工具叫kexec,它允許一個(gè)內(nèi)核將另一個(gè)內(nèi)核加載到內(nèi)存中并啟動(dòng)它。不僅如此,還可以加速Linux的重新啟動(dòng)。由于計(jì)算機(jī)在加載操作系統(tǒng)之前必須讀在取固件過(guò)程中花費(fèi)1 min左右的時(shí)間,進(jìn)行一些自我測(cè)試等,如果能繞過(guò)這一點(diǎn),直接從一個(gè)操作系統(tǒng)重啟到另一個(gè),就可以把時(shí)間縮短到幾秒鐘而不是現(xiàn)在的幾分鐘。