設(shè)計(jì):寬溫振動(dòng)與冗余切換的實(shí)戰(zhàn)解析)
干鐵路現(xiàn)場(chǎng)這一行的人應(yīng)該都有體會(huì)信號(hào)機(jī)房、軌旁控制柜、車廂電氣柜里那些計(jì)算機(jī)看著不起眼卻是整條線路能不能正常跑起來(lái)的“大腦”。這幾年我做過(guò)的加固計(jì)算平臺(tái)里有一類需求特別典型——客戶點(diǎn)名要“一對(duì)”基于第10代Xeon的加固系統(tǒng)專門為鐵路環(huán)境設(shè)計(jì)。這種項(xiàng)目不是攢臺(tái)工控機(jī)那么簡(jiǎn)單它背后牽扯到寬溫、振動(dòng)、電磁兼容、電源瞬斷、冗余切換這一整套邏輯。這篇文章我就以這套面向鐵路需求的加固型雙Xeon系統(tǒng)為例把從需求拆解、硬件選型、結(jié)構(gòu)設(shè)計(jì)到雙機(jī)切換和現(xiàn)場(chǎng)驗(yàn)收的完整鏈路梳理一遍。如果你正在做軌道交通、礦山、船舶或者任何“惡劣環(huán)境邊緣計(jì)算”方向的設(shè)備選型或方案設(shè)計(jì)這篇內(nèi)容應(yīng)該能幫你少踩不少坑。1. 項(xiàng)目整體設(shè)計(jì)與需求拆解1.1 鐵路現(xiàn)場(chǎng)對(duì)計(jì)算設(shè)備的“硬約束”先說(shuō)環(huán)境。鐵路行業(yè)最坑人的地方在于它的環(huán)境參數(shù)不是靠想象出來(lái)的而是有明確標(biāo)準(zhǔn)卡著的。軌道交通設(shè)備通常要參考EN 50155鐵路用電子設(shè)備和EN 61373車輛設(shè)備的振動(dòng)沖擊試驗(yàn)來(lái)設(shè)計(jì)。很多人一聽(tīng)“加固”就以為是加個(gè)厚鐵殼子真不是這么回事。溫度這一項(xiàng)就夠喝一壺。常規(guī)商用服務(wù)器的正常工作溫度在10℃到35℃之間而鐵路設(shè)備要求的是寬溫常見(jiàn)等級(jí)分T1-25℃到55℃和TX-40℃到70℃。軌旁機(jī)柜夏天被太陽(yáng)直射內(nèi)部溫度能輕松沖破60℃北方冬季夜間又能壓到零下三四十度。這種溫差跨度下普通消費(fèi)級(jí)主板上的電解電容、晶振、DC-DC電源模塊都會(huì)出問(wèn)題。所以這套系統(tǒng)的第一設(shè)計(jì)原則就是整機(jī)必須支持-40℃到70℃的寬溫工作而且是滿載工作不是“能開機(jī)”那種勉強(qiáng)狀態(tài)。振動(dòng)沖擊同樣讓通用服務(wù)器崩潰。列車過(guò)軌縫、道岔、制動(dòng)的時(shí)候車體振動(dòng)加速度不是鬧著玩的。如果你把設(shè)備直接安裝在轉(zhuǎn)向架附近那就得按Bogie-mounted等級(jí)來(lái)考核隨機(jī)振動(dòng)和沖擊的烈度比普通車載設(shè)備高一個(gè)數(shù)量級(jí)。即便裝在車廂內(nèi)或設(shè)備柜里長(zhǎng)期的低頻振動(dòng)也會(huì)讓內(nèi)存條松動(dòng)、SATA接口接觸不良、螺絲退扣。所以鐵路加固系統(tǒng)的內(nèi)部幾乎見(jiàn)不到大型散熱器和獨(dú)立顯卡這種“懸臂”結(jié)構(gòu)所有板卡都要通過(guò)加固支架壓緊連接器必須選用帶鎖扣或螺紋鎖緊的類型。供電環(huán)境也得單獨(dú)說(shuō)。列車上的直流母線電壓不是穩(wěn)定的直流而是伴隨大量紋波、浪涌和瞬斷。EN 50155里明確規(guī)定了電源中斷、電壓跌落、上電沖擊等測(cè)試要求。比如110V DC母線在機(jī)車過(guò)分相區(qū)時(shí)可能出現(xiàn)毫秒級(jí)的電壓跌落如果設(shè)備的電源模塊沒(méi)有足夠的保持時(shí)間系統(tǒng)就會(huì)無(wú)故重啟這在運(yùn)行中的列車上是非常嚴(yán)重的事故。所以鐵路用計(jì)算機(jī)的電源輸入部分必須做寬壓輸入、浪涌抑制、反接保護(hù)和足夠的儲(chǔ)能電容。1.2 為什么是“一對(duì)”而不是一臺(tái)更強(qiáng)的很多甲方提需求時(shí)都會(huì)問(wèn)能不能用一臺(tái)性能翻倍的高端服務(wù)器代替兩臺(tái)加固機(jī)答案是在鐵路場(chǎng)景里不行。原因不是性能不夠而是冗余架構(gòu)必須存在。軌道交通的信號(hào)、通信、監(jiān)控類業(yè)務(wù)對(duì)可用性要求極高核心系統(tǒng)需要有故障切換能力。單機(jī)方案無(wú)論做得多可靠都存在單點(diǎn)故障風(fēng)險(xiǎn)電源燒了、主板掛了、系統(tǒng)死機(jī)了整條鏈路就斷了。而一套雙機(jī)系統(tǒng)A機(jī)和B機(jī)同時(shí)運(yùn)行同樣的業(yè)務(wù)一臺(tái)故障時(shí)另一臺(tái)無(wú)縫接管業(yè)務(wù)中斷時(shí)間控制在秒級(jí)甚至毫秒級(jí)這在行業(yè)里是硬性要求。這里的“一對(duì)”可以做兩種部署形態(tài)。一種是把兩臺(tái)獨(dú)立的加固計(jì)算機(jī)放在同一個(gè)4U或6U機(jī)箱內(nèi)共享電源模塊和背板物理上成為一個(gè)整體單元便于柜內(nèi)集成。另一種是兩臺(tái)完全獨(dú)立的加固終端盒各自帶獨(dú)立電源和對(duì)外接口只在網(wǎng)絡(luò)層做冗余。我們這次做的項(xiàng)目更接近前一種——一個(gè)機(jī)箱內(nèi)裝兩個(gè)計(jì)算節(jié)點(diǎn)每個(gè)節(jié)點(diǎn)都能單獨(dú)拆裝和維護(hù)背后通過(guò)冗余網(wǎng)絡(luò)互聯(lián)再配合心跳線判斷彼此狀態(tài)。選“一對(duì)”還有一個(gè)現(xiàn)實(shí)原因維護(hù)窗口極短。鐵路線路上的設(shè)備通常運(yùn)行周期很長(zhǎng)出了問(wèn)題需要在不中斷業(yè)務(wù)的情況下更換故障節(jié)點(diǎn)。雙機(jī)熱備架構(gòu)天然支持故障節(jié)點(diǎn)在線更換一塊節(jié)點(diǎn)抽出、另一塊繼續(xù)頂著業(yè)務(wù)跑這在單機(jī)方案里根本做不到。1.3 選型在第10代Xeon上做文章選處理器是整個(gè)項(xiàng)目里爭(zhēng)執(zhí)最多的地方。客戶最初的傾向是用當(dāng)時(shí)主流的嵌入式Atom或者低功耗酷睿理由是功耗低、散熱壓力小。但我堅(jiān)持用第10代Xeon平臺(tái)原因很直接鐵路邊緣計(jì)算這幾年的負(fù)載已經(jīng)不再是簡(jiǎn)單的串口采集和IO控制越來(lái)越多的場(chǎng)景要跑視頻分析、AI推理、大數(shù)據(jù)特征提取低功耗處理器在算力上真的頂不住。第10代XeonComet Lake架構(gòu)LGA1200平臺(tái)放在今天來(lái)看單核性能和指令集支持依然是工業(yè)邊緣設(shè)備里的穩(wěn)妥選擇。和消費(fèi)級(jí)酷睿相比Xeon最大的優(yōu)勢(shì)是支持ECC內(nèi)存。鐵路設(shè)備通常7×24小時(shí)長(zhǎng)年運(yùn)行內(nèi)存一枚比特翻轉(zhuǎn)在消費(fèi)級(jí)平臺(tái)上可能就是一個(gè)隨機(jī)崩潰、一次數(shù)據(jù)損壞而在鐵路信號(hào)或安全監(jiān)控系統(tǒng)里這可能導(dǎo)致無(wú)法預(yù)估的連鎖反應(yīng)。ECC內(nèi)存能在硬件層面糾正單比特錯(cuò)誤并檢測(cè)雙比特錯(cuò)誤這種可靠性等級(jí)是普通DDR4沒(méi)法提供的。另外Xeon的PCIe通道數(shù)、VPro遠(yuǎn)程管理、長(zhǎng)周期供貨承諾通常是7到10年也是鐵路項(xiàng)目特別看重的點(diǎn)。一條線路從設(shè)計(jì)到開通再到維護(hù)可能超過(guò)十年中途換CPU平臺(tái)意味著整套底層軟件要重新適配這種隱性成本沒(méi)人愿意承擔(dān)。2. 硬件核心細(xì)節(jié)解析2.1 CPU與主板配置性能、壽命與ECC具體配置上這套系統(tǒng)選擇了第10代Xeon W系列以Xeon W-1290這類10核20線程的處理器為參考基準(zhǔn)TDP控制在80W左右搭配Intel C246芯片組支持128GB DDR4 ECC內(nèi)存。為什么不用更高主頻的型號(hào)因?yàn)榧庸虣C(jī)箱的散熱能力有限高主頻帶來(lái)的功耗和熱量增長(zhǎng)會(huì)讓你在散熱設(shè)計(jì)上付出成倍的代價(jià)。鐵路應(yīng)用尤其看重“平均故障間隔時(shí)間”MTBF芯片長(zhǎng)期在高溫高負(fù)載下運(yùn)行壽命會(huì)明顯縮短。所以寧可選擇核心數(shù)足夠、主頻適中、TDP可控的型號(hào)也不追求極端性能。主板選型有幾個(gè)關(guān)鍵點(diǎn)需要單獨(dú)說(shuō)生命周期一定要選支持7年以上長(zhǎng)期供貨的工業(yè)級(jí)主板不能用工控市場(chǎng)上東拼西湊的公板。鐵路項(xiàng)目的驗(yàn)收周期長(zhǎng)一個(gè)批次出了問(wèn)題后面全得跟著返工。BIOS定制能力需要支持關(guān)閉不必要的PCIe設(shè)備、調(diào)整風(fēng)扇策略如果有風(fēng)扇的話、開啟看門狗定時(shí)器。這些功能在鐵路現(xiàn)場(chǎng)維護(hù)時(shí)能救命。板載接口除了常規(guī)的千兆網(wǎng)口還要考慮板載串口、DIO、CAN等工業(yè)接口減少外接轉(zhuǎn)接卡的依賴。外接卡在振動(dòng)環(huán)境下就是隱患來(lái)源。為了讓大家有個(gè)直觀概念我用一個(gè)表格列出這套系統(tǒng)中單個(gè)節(jié)點(diǎn)的核心配置項(xiàng)目配置說(shuō)明處理器Intel Xeon W-129010核20線程TDP約80W芯片組Intel C246內(nèi)存最高128GB DDR4 ECC UDIMM支持4條存儲(chǔ)1個(gè)M.2 NVMe系統(tǒng)盤 2個(gè)2.5寸SATA SSD數(shù)據(jù)盤網(wǎng)絡(luò)4路千兆電口其中2路支持網(wǎng)卡綁定支持M12鎖緊接頭擴(kuò)展接口4路RS-232/422/485、8路DI/DO、2路CAN電源輸入24V/48V/72V/110V DC寬壓輸入帶浪涌抑制與反接保護(hù)工作溫度-40℃到70℃滿載防護(hù)等級(jí)整機(jī)IP54機(jī)箱內(nèi)部板卡區(qū)域IP65認(rèn)證參考EN 50155、EN 61373、EN 61000-6-2這套配置放在今天看性能不是最頂?shù)牡膬r(jià)值在于“穩(wěn)定”和“夠用”。鐵路邊緣側(cè)的視頻流分析、協(xié)議轉(zhuǎn)換、數(shù)據(jù)匯聚這套配置能從容扛住同時(shí)還有余量跑容器化應(yīng)用。2.2 加固結(jié)構(gòu)散熱、減振、連接器無(wú)風(fēng)扇設(shè)計(jì)是這類系統(tǒng)最讓機(jī)械工程師頭疼的部分。要在完全不使用風(fēng)扇的前提下把兩個(gè)Xeon節(jié)點(diǎn)的熱量帶出去通常的做法是讓整機(jī)外殼變成一塊巨大的散熱器鋁合金銑削的機(jī)箱鰭片、貼合CPU和芯片組的導(dǎo)熱銅管或均熱板、內(nèi)外空氣隔離的封閉式結(jié)構(gòu)。整機(jī)從外觀上看就是一塊帶鰭片的金屬疙瘩沒(méi)有通風(fēng)孔里面的板卡被完全密封起來(lái)。這個(gè)設(shè)計(jì)的優(yōu)勢(shì)很明顯沒(méi)有活動(dòng)部件不會(huì)積灰MTBF顯著提升。但代價(jià)是熱設(shè)計(jì)必須在選型階段就完成不能等樣機(jī)出來(lái)再補(bǔ)救。我們?cè)谠O(shè)計(jì)初期用熱仿真軟件跑過(guò)整機(jī)模型確定了散熱器鰭片的厚度、間距以及熱管數(shù)量。單純把CPU散熱片加大是不夠的內(nèi)存、SSD、電源模塊同樣會(huì)發(fā)熱整個(gè)機(jī)箱內(nèi)部的空氣流動(dòng)路徑都要在結(jié)構(gòu)設(shè)計(jì)階段規(guī)劃好。這里特別提醒一句如果你沒(méi)有熱仿真和實(shí)際環(huán)境試驗(yàn)的條件不要輕易嘗試“全密封無(wú)風(fēng)扇”方案很多項(xiàng)目就是在這一步翻車的——機(jī)器在家里跑得好好的上了現(xiàn)場(chǎng)連續(xù)高溫運(yùn)行幾天就開始降頻甚至重啟。連接器在鐵路場(chǎng)景里的重要性被很多人低估。普通RJ45網(wǎng)口在振動(dòng)環(huán)境下太容易松了插頭一抖就接觸不良。我們?nèi)繐Q成M12鎖緊式連接器網(wǎng)口、串口、電源口都是這樣。M12的螺紋鎖緊結(jié)構(gòu)一旦擰到位不刻意松脫基本不會(huì)掉而且它本身就是防水的對(duì)IP防護(hù)等級(jí)是加分項(xiàng)。內(nèi)部板卡之間的連接全部采用板對(duì)板連接器加鎖緊支架線纜能不用就不用必須用線纜的地方全部點(diǎn)膠固定接頭處用熱縮管加固。這些細(xì)節(jié)你從外面看不出來(lái)但到現(xiàn)場(chǎng)跑一年之后它們就是系統(tǒng)能不能穩(wěn)定運(yùn)行的勝負(fù)手。2.3 電源與信號(hào)防護(hù)鐵路供電環(huán)境的“隱形殺手”鐵路直流供電表面上看是110V DC實(shí)際上波形臟得嚇人。列車上大功率牽引電機(jī)啟停、空調(diào)壓縮機(jī)切入、車門電機(jī)動(dòng)作都會(huì)在母線上制造大量毛刺和浪涌。電源模塊如果扛不住這些系統(tǒng)就會(huì)出現(xiàn)各種莫名其妙的故障。這套系統(tǒng)的電源模塊我們選的是自帶浪涌抑制和EMC濾波的鐵路專用電源輸入范圍覆蓋從16.8V到137.5V DC這是EN 50155要求的各檔電壓范圍同時(shí)支持反接保護(hù)、過(guò)流保護(hù)、過(guò)壓保護(hù)。存儲(chǔ)數(shù)據(jù)的完整性也必須專門處理。突然斷電或電壓跌落時(shí)如果SSD正在寫入數(shù)據(jù)輕則文件損壞重則文件系統(tǒng)崩潰。我們的方案是在系統(tǒng)層面做兩層防護(hù)第一層SSD選擇帶斷電保護(hù)Power Loss Protection的型號(hào)硬件層面保證掉電時(shí)不丟數(shù)據(jù)第二層系統(tǒng)軟件上配置只讀文件系統(tǒng)或高可靠性文件系統(tǒng)把關(guān)鍵分區(qū)設(shè)為只讀掛載減少非預(yù)期寫入。這兩層配合才敢說(shuō)“列車斷一下電不會(huì)讓系統(tǒng)起不來(lái)”。3. 雙機(jī)系統(tǒng)裝配與軟件實(shí)現(xiàn)3.1 系統(tǒng)引導(dǎo)與固件配置硬件平臺(tái)定下來(lái)之后第一個(gè)要過(guò)的坎是BIOS配置。加固系統(tǒng)不像個(gè)人電腦裝好系統(tǒng)就完事很多底層設(shè)置必須提前鎖死否則到了現(xiàn)場(chǎng)一個(gè)參數(shù)被改動(dòng)排查起來(lái)非常痛苦。BIOS里我通常會(huì)按這樣一套邏輯配置開啟看門狗定時(shí)器系統(tǒng)死機(jī)后自動(dòng)重啟這是無(wú)人值守設(shè)備的第一道防線??撮T狗超時(shí)時(shí)間我們?cè)O(shè)的是180秒太短容易誤重啟太長(zhǎng)又起不到保護(hù)作用。關(guān)閉無(wú)關(guān)設(shè)備板載聲卡、未用到的SATA口、未用到的USB控制器全部在BIOS層面禁用減少驅(qū)動(dòng)沖突和被非法操作的可能。設(shè)置上電自動(dòng)開機(jī)鐵路設(shè)備掉電再恢復(fù)后必須自動(dòng)開機(jī)不能等人去按電源鍵。同時(shí)設(shè)置AC Power Loss為“Power On”。固定PCIe鏈路速度對(duì)PCIe插槽鎖定Gen3速率防止鏈路的自動(dòng)協(xié)商在惡劣環(huán)境下反復(fù)重訓(xùn)練導(dǎo)致設(shè)備離線。CPU功耗設(shè)置把Turbo Boost策略設(shè)置為“按需啟用但不激進(jìn)”既保持有限時(shí)間的峰值性能又控制長(zhǎng)時(shí)間運(yùn)行的整體發(fā)熱。裝系統(tǒng)這塊我們使用的是精簡(jiǎn)版的Linux發(fā)行版內(nèi)核開啟PREEMPT_RT實(shí)時(shí)補(bǔ)丁。為什么用實(shí)時(shí)內(nèi)核因?yàn)殍F路綜合監(jiān)控系統(tǒng)里有不少硬實(shí)時(shí)任務(wù)比如信號(hào)采集周期要求精確到毫秒級(jí)普通內(nèi)核的調(diào)度延遲有可能讓采集時(shí)序抖動(dòng)超標(biāo)。不過(guò)這里也要提醒一句實(shí)時(shí)內(nèi)核不是萬(wàn)能的如果你上層的應(yīng)用寫得一團(tuán)糟再怎么打?qū)崟r(shí)補(bǔ)丁也沒(méi)用。我見(jiàn)過(guò)不少項(xiàng)目把延遲問(wèn)題全甩給內(nèi)核其實(shí)源頭是應(yīng)用層用了不可中斷的鎖、日志同步寫盤這種操作。3.2 雙機(jī)冗余切換機(jī)制雙機(jī)系統(tǒng)的靈魂不在硬件而在切換機(jī)制。我們常見(jiàn)的做法是“主備熱備 心跳檢測(cè) 自動(dòng)仲裁”。A機(jī)和B機(jī)之間通過(guò)兩條心跳通道互聯(lián)一條專用網(wǎng)線一條串口心跳應(yīng)用層業(yè)務(wù)通過(guò)冗余網(wǎng)口對(duì)外提供服務(wù)。心跳檢測(cè)的策略很關(guān)鍵。最怕的是“假故障”——A機(jī)心跳線斷了B機(jī)立刻接管業(yè)務(wù)結(jié)果A機(jī)其實(shí)活得好好的兩臺(tái)機(jī)器同時(shí)對(duì)外發(fā)數(shù)據(jù)這在工業(yè)現(xiàn)場(chǎng)會(huì)造成嚴(yán)重的數(shù)據(jù)沖突。我們的做法是采用“多數(shù)派仲裁 業(yè)務(wù)層故障確認(rèn)”只有在心跳丟失且無(wú)法通過(guò)業(yè)務(wù)網(wǎng)口ping通對(duì)方、同時(shí)自身業(yè)務(wù)正常運(yùn)行的情況下才允許執(zhí)行主備切換。簡(jiǎn)單來(lái)說(shuō)不能因?yàn)橐粭l線斷了就輕舉妄動(dòng)。切換時(shí)間的指標(biāo)上這個(gè)項(xiàng)目要求的是從故障發(fā)生到備用機(jī)接管業(yè)務(wù)不超過(guò)2秒。這個(gè)目標(biāo)靠腳本輪詢是實(shí)現(xiàn)不了的必須用獨(dú)立的心跳檢測(cè)守護(hù)進(jìn)程配合內(nèi)核級(jí)網(wǎng)絡(luò)綁定和ARP通告。當(dāng)B機(jī)切換為主機(jī)時(shí)主動(dòng)向交換網(wǎng)絡(luò)發(fā)送免費(fèi)ARP把虛擬IP的流量引導(dǎo)到自身這樣終端用戶根本無(wú)感知。整個(gè)雙機(jī)系統(tǒng)的驗(yàn)證不是測(cè)一次就完事的。我們整理了一整套故障注入測(cè)試列表覆蓋的場(chǎng)景包括單節(jié)點(diǎn)斷電、單節(jié)點(diǎn)網(wǎng)口故障、心跳線斷開、CPU過(guò)載假死、應(yīng)用進(jìn)程崩潰、內(nèi)存壓力測(cè)試等。每次故障注入后觀察業(yè)務(wù)中斷時(shí)間、數(shù)據(jù)完整性、恢復(fù)過(guò)程是否自動(dòng)完成。下面是我們測(cè)試記錄中的一個(gè)片段故障場(chǎng)景注入方式業(yè)務(wù)中斷時(shí)間恢復(fù)結(jié)果A機(jī)斷電直接斷開A機(jī)電源約1.2秒B機(jī)接管數(shù)據(jù)無(wú)丟失A機(jī)主網(wǎng)口斷開拔掉業(yè)務(wù)網(wǎng)線約0.8秒B機(jī)接管虛擬IP流量自動(dòng)切換心跳線單側(cè)斷開拔掉A-B心跳線不切換系統(tǒng)報(bào)警維持A機(jī)主用A機(jī)應(yīng)用進(jìn)程掛死kill -9核心進(jìn)程約1.5秒檢測(cè)到業(yè)務(wù)異常B機(jī)接管測(cè)試?yán)镒钣袃r(jià)值的發(fā)現(xiàn)是如果心跳線只斷了一邊絕對(duì)不能立刻做主備切換必須靠業(yè)務(wù)層面再確認(rèn)一次。這是我們?cè)诙啻维F(xiàn)場(chǎng)故障復(fù)盤后總結(jié)出來(lái)的鐵律。3.3 現(xiàn)場(chǎng)整機(jī)驗(yàn)收流程樣機(jī)做完只是開始真正決定項(xiàng)目生死的是整機(jī)驗(yàn)收。鐵路設(shè)備的驗(yàn)收不是通電跑幾天就行的要按標(biāo)準(zhǔn)逐項(xiàng)過(guò)。我們的驗(yàn)收流程基本分四步第一步是高溫老化。整機(jī)滿負(fù)荷運(yùn)行在70℃環(huán)境下連續(xù)跑72小時(shí)同時(shí)監(jiān)控CPU核心溫度、機(jī)箱外殼溫度、SSD溫度、有無(wú)熱降頻現(xiàn)象。這一步能淘汰掉絕大部分散熱設(shè)計(jì)不過(guò)關(guān)的機(jī)器。我們?cè)诘谝淮胃邷乩匣瘯r(shí)發(fā)現(xiàn)過(guò)問(wèn)題雖然整機(jī)能開機(jī)但兩塊SSD在持續(xù)寫入時(shí)溫度飆升觸發(fā)了SSD自身的過(guò)熱保護(hù)性能掉到原來(lái)的一半。后來(lái)給SSD位置加了導(dǎo)熱墊讓熱量通過(guò)機(jī)箱殼體導(dǎo)出問(wèn)題才解決。第二步是低溫啟動(dòng)測(cè)試。整機(jī)在-40℃冷箱里冷凍12小時(shí)然后在低溫狀態(tài)下直接上電啟動(dòng)檢查各接口是否能正常識(shí)別。低溫啟動(dòng)失敗在成本敏感的項(xiàng)目里非常常見(jiàn)因?yàn)榈蜏叵码娙萑葜迪陆怠㈦娫磫?dòng)電流不足、晶振起振困難。我們這次選用的電源模塊和主板都經(jīng)過(guò)-40℃驗(yàn)證所以一次通過(guò)。如果你的物料沒(méi)有低溫規(guī)格千萬(wàn)別賭運(yùn)氣。第三步是振動(dòng)與沖擊測(cè)試。按EN 61373的標(biāo)準(zhǔn)做隨機(jī)振動(dòng)和沖擊試驗(yàn)重點(diǎn)關(guān)注設(shè)備是否出現(xiàn)重啟、網(wǎng)口是否斷連、存儲(chǔ)是否出現(xiàn)壞塊。振動(dòng)測(cè)試前所有外露螺釘要打上防松膠所有板卡插槽要檢查鎖緊機(jī)構(gòu)。我們?cè)?jīng)在振動(dòng)測(cè)試中遇到過(guò)內(nèi)存條因未壓緊導(dǎo)致系統(tǒng)隨機(jī)重啟的故障當(dāng)時(shí)排查了很久最后發(fā)現(xiàn)就是一根內(nèi)存沒(méi)卡到位。這種問(wèn)題在普通機(jī)房環(huán)境很難暴露但在鐵路振動(dòng)環(huán)境下會(huì)放大得特別明顯。第四步是EMC測(cè)試。鐵路電子設(shè)備要通過(guò)EN 50121-3-2的電磁兼容測(cè)試包括輻射發(fā)射、傳導(dǎo)發(fā)射、ESD、浪涌、射頻場(chǎng)感應(yīng)等。很多人不知道EMC不光是硬件設(shè)計(jì)的事系統(tǒng)軟件的配置也會(huì)影響測(cè)試結(jié)果。比如網(wǎng)口速率協(xié)商成百兆還是千兆輻射特性完全不一樣CPU是否開啟節(jié)能模式也會(huì)影響電源線上的噪聲。所以EMC測(cè)試階段一定要用最終的BIOS配置和軟件鏡像否則測(cè)試通過(guò)不了。4. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄4.1 高溫環(huán)境下的隱性降頻不少人在加固系統(tǒng)上會(huì)犯同一個(gè)錯(cuò)誤只看CPU標(biāo)稱的TDP不看散熱系統(tǒng)的實(shí)際散熱能力。我們這套整機(jī)雖然是無(wú)風(fēng)扇散熱但在極端高溫下CPU為了自我保護(hù)會(huì)自動(dòng)降頻。降頻本身不可怕可怕的是你不知道它什么時(shí)候降了、降了多少。如果應(yīng)用層的實(shí)時(shí)性要求高降頻帶來(lái)的性能波動(dòng)會(huì)讓任務(wù)超時(shí)。對(duì)策是在軟件層做兩層監(jiān)控一是通過(guò)讀取CPU MSR寄存器監(jiān)控實(shí)時(shí)頻率和溫度記錄到系統(tǒng)日志二是對(duì)核心業(yè)務(wù)線程做CPU核心綁核配合cpuset隔離把實(shí)時(shí)任務(wù)釘在指定核心上避免和其他進(jìn)程爭(zhēng)搶資源。這樣即便遇到極端高溫導(dǎo)致整體降頻核心業(yè)務(wù)線程的影響也能控制在可接受范圍內(nèi)。4.2 振動(dòng)測(cè)試后“找不到網(wǎng)卡”的真相項(xiàng)目測(cè)試中遇到過(guò)一次很詭異的情況振動(dòng)測(cè)試做完上電之后系統(tǒng)提示“network interface not found”。反復(fù)重啟幾次又好了。一開始以為是驅(qū)動(dòng)問(wèn)題后來(lái)發(fā)現(xiàn)根本不是——PCIe插槽上板卡因?yàn)檎駝?dòng)出現(xiàn)了輕微移位導(dǎo)致金手指接觸不良系統(tǒng)在啟動(dòng)時(shí)沒(méi)能枚舉到PCIe設(shè)備。重新插拔、壓緊加固支架后問(wèn)題消失。這類故障在隨機(jī)振動(dòng)下最容易復(fù)現(xiàn)。排查思路是先看dmesg里有沒(méi)有PCIe枚舉失敗的記錄再檢查板卡是否有物理位移的痕跡。預(yù)防手段只有一個(gè)就是前面反復(fù)強(qiáng)調(diào)的——所有可插拔部件都要有獨(dú)立的機(jī)械鎖緊結(jié)構(gòu)不能只靠摩擦力和卡扣。4.3 雙機(jī)誤切換的“乒乓效應(yīng)”雙機(jī)系統(tǒng)的經(jīng)典詭異故障是“乒乓切換”。意思是A機(jī)和B機(jī)因?yàn)槟撤N不明原因反復(fù)搶占主用狀態(tài)業(yè)務(wù)在兩者之間來(lái)回切每次切換都是一次短暫中斷整個(gè)系統(tǒng)看起來(lái)就像在“打擺子”。我們?cè)跍y(cè)試中模擬過(guò)這個(gè)場(chǎng)景觸發(fā)原因是心跳鏈路和業(yè)務(wù)鏈路是同一根物理線纜連接的交換機(jī)交換機(jī)某個(gè)端口出現(xiàn)閃斷導(dǎo)致兩臺(tái)機(jī)器同時(shí)檢測(cè)到對(duì)方“失聯(lián)”各自以為對(duì)方故障于是都搶著升主。解決乒乓效應(yīng)的標(biāo)準(zhǔn)答案是引入“防翻轉(zhuǎn)”機(jī)制系統(tǒng)切換后在短時(shí)間內(nèi)不允許再次切換稱為“翻轉(zhuǎn)抑制時(shí)間”。我們?cè)诖a里把這個(gè)時(shí)間設(shè)為10秒同時(shí)要求發(fā)起切換的節(jié)點(diǎn)必須經(jīng)過(guò)至少連續(xù)3次失敗檢測(cè)確認(rèn)才能進(jìn)入切換流程。自那以后乒乓切換再?zèng)]出現(xiàn)過(guò)。4.4 常見(jiàn)問(wèn)題速查表為了方便維護(hù)人員現(xiàn)場(chǎng)排查我整理了一份故障速查表。這里說(shuō)三個(gè)最值得記錄的故障現(xiàn)象可能原因檢查與處理建議系統(tǒng)低溫?zé)o法上電電源模塊低溫啟動(dòng)能力不足電池/電容容量下降確認(rèn)電源模塊支持-40℃檢查是否有加熱模塊手動(dòng)預(yù)加熱后再上電網(wǎng)絡(luò)偶發(fā)斷連丟包嚴(yán)重網(wǎng)口接觸不良電磁干擾網(wǎng)卡驅(qū)動(dòng)老化優(yōu)先更換M12鎖緊式連接器檢查網(wǎng)口變壓器和共模電感更新網(wǎng)卡固件雙機(jī)頻繁切換心跳檢測(cè)邏輯過(guò)于敏感網(wǎng)絡(luò)閃斷檢查心跳線及交換機(jī)端口增加故障確認(rèn)次數(shù)啟用翻轉(zhuǎn)抑制時(shí)間排查現(xiàn)場(chǎng)問(wèn)題時(shí)我的習(xí)慣永遠(yuǎn)是“先懷疑硬件再懷疑軟件最后懷疑配置”。很多工程師一上來(lái)就翻代碼日志結(jié)果查了半天發(fā)現(xiàn)是螺絲松了。這行當(dāng)干久了你就會(huì)明白加固系統(tǒng)里那些不起眼的“小問(wèn)題”才是真正的老大難。最后再分享一個(gè)體會(huì)做這種面向鐵路的加固設(shè)備最大的敵人往往不是技術(shù)難度而是“差不多”的心態(tài)。散熱差不多、接口差不多、可靠性差不多到了現(xiàn)場(chǎng)就會(huì)變成差很多。如果你也在做類似的項(xiàng)目建議從第一天起就把環(huán)境試驗(yàn)的標(biāo)準(zhǔn)定到上限設(shè)備選型多留余量別等上線了再追悔莫及。