<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          LWN:移除 CONFIG_ANDROID!

          共 2636字,需瀏覽 6分鐘

           ·

          2022-07-16 12:42

          關(guān)注了就能看到更多這么棒的文章哦~

          The end of CONFIG_ANDROID

          By Jonathan Corbet
          July 4, 2022
          DeepL assisted translation
          https://lwn.net/Articles/899743/

          內(nèi)核有數(shù)千個(gè) config 選項(xiàng),其中許多選項(xiàng)在以微妙或令人驚訝的方式改變內(nèi)核的行為。在這些選項(xiàng)中,CONFIG_ANDROID 是一個(gè)相對(duì)簡單的選項(xiàng),它的完整描述是 "啟用對(duì)安卓平臺(tái)所需的各種驅(qū)動(dòng)的支持"。事實(shí)證明,這個(gè)選項(xiàng)的作用不止于此,這一點(diǎn)令一些用戶感到驚訝。這引出了一個(gè)刪除該選項(xiàng)的計(jì)劃,但這個(gè)計(jì)劃也引入了一兩個(gè)意外,以及一些分歧。

          討論開始于 Alex Xu 報(bào)告了一個(gè) RCU(read-copy-update)的 error,這個(gè) error 在他的系統(tǒng)從 suspend 狀態(tài)恢復(fù)后會(huì)出現(xiàn)。此后不久,Xu 意識(shí)到這個(gè)問題與他的內(nèi)核在構(gòu)建時(shí)啟用了 CONFIG_ANDROID 這個(gè)改動(dòng)有關(guān);該選項(xiàng)的眾多影響之中,它也會(huì)大大減少 RCU 開始發(fā)出 stall warning 的時(shí)間閾值。RCU 的維護(hù)者 Paul McKenney 在這件事被報(bào)出來之后看起來不太同情:

          讓我們面對(duì)現(xiàn)實(shí)吧,CONFIG_ANDROID=y 的意圖和目的是非常直截了當(dāng)和明確無誤的。因此,也許不運(yùn)行安卓設(shè)備但又想獲得一點(diǎn)安卓功能的人應(yīng)該采取其他做法,而不是在他們的 .config 文件中直接設(shè)置 CONFIG_ANDROID=y。對(duì)我來說,我意外的是它怎么花了這么長時(shí)間才讓你受害。

          這個(gè)回答來自討論的一部分,沒有直接出現(xiàn)在 archives 中,但可以在 Xu 的回答中看到他引用了這一點(diǎn),他指出 Debian 和 Fedora 的內(nèi)核都啟用了 CONFIG_ANDROID,因?yàn)檫@是要讓 binder module 能工作的唯一方法。Xu 認(rèn)為,這個(gè)選項(xiàng)的意圖并不像人們想象的那樣 "直截了當(dāng)和明確無誤";這么簡單的一行描述中也沒有提到改變內(nèi)部 RCU timeout 值。"如果主要的發(fā)行版供應(yīng)商一直在犯這個(gè)'錯(cuò)誤',那么也許問題不是出在他們身上"。

          Christoph Hellwig 很快就提出了一個(gè) patch,將 CONFIG_ANDROID 完全刪除,稱其為 "顯然是個(gè)壞主意"。Greg Kroah-Hartman 同樣迅速同意,并將該 patch 排到了下一個(gè)合并窗口。沒有人反對(duì),直到 Jason Donenfeld 指出,這個(gè) config 還有其他令人意外的影響,刪除它可能會(huì)在 Android 系統(tǒng)上產(chǎn)生問題。

          具體來說,隨機(jī)數(shù)生成器(random-number generator)以及 WireGuard VPN tunnel 的實(shí)現(xiàn)都會(huì)因系統(tǒng) suspend 而采取一些措施。隨機(jī)數(shù)發(fā)生器將在系統(tǒng) resume 后重新獲取隨機(jī)數(shù)種子,而 WireGuard 將在 suspend 前清除其 key 相關(guān)的數(shù)據(jù)。這兩個(gè)動(dòng)作都是為了提高安全性,但由于電源管理的處理方式,它們?cè)诎沧肯到y(tǒng)上可能會(huì)出現(xiàn)問題。運(yùn)行安卓系統(tǒng)的設(shè)備是盡量傾向于多睡眠的;它們會(huì)找任何機(jī)會(huì)來進(jìn)入睡眠狀態(tài),以節(jié)省電力。經(jīng)常重置隨機(jī)數(shù)發(fā)生器可能會(huì)比較低效,而經(jīng)常清除 WireGuard key 可能會(huì)完全破壞通信。為了避免這些問題,如果內(nèi)核是用 CONFIG_ANDROID 構(gòu)建的,就不會(huì)進(jìn)行這些舉動(dòng)。

          去掉 CONFIG_ANDROID 也就去掉了這種特殊的行為;Donenfeld 擔(dān)心,這樣的變動(dòng)可能會(huì)在未來造成 regression。他要求 Hellwig 保證不會(huì)產(chǎn)生這些問題,或者提供一個(gè) fix 這些問題的 patch 作為新版本。隨后,雙方就誰有責(zé)任修復(fù)潛在問題、CONFIG_ANDROID 的使用是否正確、刪除是否構(gòu)成用戶空間 ABI 的 regression 等問題進(jìn)行了不太愉快的討論。

          最終,Kroah-Hartman 表示同意 Hellwig 的觀點(diǎn)。他說,安卓設(shè)備遇到的任何問題,在打了 patch 的內(nèi)核真正被用到這類設(shè)備上時(shí),早就被發(fā)現(xiàn)和修復(fù)了,但現(xiàn)在的改動(dòng)可能會(huì)修復(fù)與 desktop 有關(guān)的問題。因此,這一變動(dòng)似乎很快會(huì)合入 mainline 了。

          爭論的核心是使用 CONFIG_ANDROID 作為系統(tǒng)會(huì)要頻繁 suspend 和 resume 的指標(biāo)這一點(diǎn)。但是,正如已經(jīng)看到的,有許多啟用了 CONFIG_ANDROID 的系統(tǒng)并沒有表現(xiàn)出這種行為,但無論如何都會(huì)采用了相應(yīng)的行為。也可能有一些系統(tǒng)經(jīng)常 suspend,本應(yīng)該采用這種行為,但它們沒有運(yùn)行 Android,也沒有啟用 CONFIG_ANDROID。大家的共識(shí)似乎是,使用 CONFIG_ANDROID 來調(diào)節(jié) RCU stall timeout 或加密軟件對(duì)于電源管理事件的響應(yīng)動(dòng)作,這是一個(gè)需要 fix 的 bug。

          所以,能讓隨機(jī)數(shù)和 WireGuard 滿意,需要用一些其他的方式來表明系統(tǒng)會(huì)經(jīng)常掛起。有人談?wù)撨^采用一個(gè)新的配置選項(xiàng)或者一個(gè)可以從用戶空間寫入的 sysfs knob,這就可以允許在運(yùn)行時(shí)來改變行為了。編者建議內(nèi)核可以觀察實(shí)際的 suspend 行為并自己來選擇正確的行為,這個(gè)建議很快就被駁回了。

          現(xiàn)在看來,要做的其實(shí)是增加一個(gè)新的配置選項(xiàng),叫做 CONFIG_PM_USERSPACE_AUTOSLEEP,這個(gè)選項(xiàng)會(huì)讓內(nèi)核針對(duì)一個(gè)頻繁 suspend 的系統(tǒng)來進(jìn)行準(zhǔn)備,并啟用了(以前)Android 的專用行為。這個(gè)選項(xiàng)有一個(gè)更詳細(xì)的 help 信息,描述了它的實(shí)際作用,并警告說它 "不應(yīng)該僅僅為了好玩而啟用"。相關(guān)的安卓所必需的改動(dòng)已經(jīng)被創(chuàng)建,這似乎是一個(gè)每個(gè)人都滿意的解決方案。

          不過,這個(gè)解決方案的產(chǎn)生方式本可以更好。當(dāng)開發(fā)者為了一個(gè)共同的目標(biāo)而合作,而不是爭論誰做得不對(duì)的時(shí)候,內(nèi)核社區(qū)的工作效果最好。最終確實(shí)走向了這樣的情況,但是花了不少時(shí)間才達(dá)到這個(gè)效果。多位開發(fā)者賦予 CONFIG_ANDROID 一些令人困惑的含義,因此需要好多人才能把它弄清楚就不那么奇怪了。

          全文完
          LWN 文章遵循 CC BY-SA 4.0 許可協(xié)議。

          歡迎分享、轉(zhuǎn)載及基于現(xiàn)有協(xié)議再創(chuàng)作~

          長按下面二維碼關(guān)注,關(guān)注 LWN 深度文章以及開源社區(qū)的各種新近言論~



          瀏覽 47
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品大香蕉娱乐在线 | 影音先锋AV一区二区三区四区 | 国产乱妇无码毛片A片在线看下载 | 亚洲天堂a√ | 影音先锋成人在线资源 |