ps 做網(wǎng)站切圖線上營銷活動主要有哪些
一 EC是指Embedded Controller
主要應(yīng)用于移動計(jì)算機(jī)系統(tǒng)和嵌入式計(jì)算機(jī)系統(tǒng)中,為此類計(jì)算機(jī)提供系統(tǒng)管理功能。EC的主要功能是控制計(jì)算機(jī)主板上電時序、管理電池充電和放電,提供鍵盤矩陣接口、智能風(fēng)扇接口、串口、GPIO、PS/2等常規(guī)IO功能,EC還可能有SPI接口,可以連接Flash ROM(主板BIOS)及其它SPI設(shè)備。在沒有SIO(Super I/O)芯片的情況下,EC可以被定義成SIO。
下面是某EC芯片的內(nèi)部功能框圖。
該芯片主要分為以下三大部分:
主機(jī)域。包含:LPC、PNPCFG、RTCT邏輯設(shè)備,以及SMFI/SWUC/KBC/PMC邏輯設(shè)備的主機(jī)部分,EC2I的主機(jī)部分。
EC域。包含:EC8032、INTC、WUC KB掃描、GPIO、ECPM、SMB、PS/2、DAC、ADC、PWM、ETWD、EC2I、GCTRL、BRAM、EGPC、DBGR、CEC、SMFI/SWUC/KBC/PMC 的EC部分和EC2I的EC部分。
雙映射模塊。包含:CIR、BRAM、SSPI、PECI、UART1和UART2等。
技術(shù)細(xì)節(jié)請參閱相關(guān)文獻(xiàn)或芯片Datasheet
下面是某主板的部分時序控制示意圖。
從上圖可以看出,EC的好處是可以根據(jù)當(dāng)前設(shè)計(jì)方案,適當(dāng)調(diào)整關(guān)鍵信號的生效時間,讓各組電路全部準(zhǔn)備就緒后才開機(jī)。避免部分功能識不到或識別錯誤。特別是在工業(yè)應(yīng)用領(lǐng)域,有許多老舊的功能設(shè)備速度太慢,利用EC延長計(jì)算機(jī)上電到開機(jī)的時間,給這些功能設(shè)備留出足夠的等待時間,可以確保這些功能設(shè)備有足夠的時間進(jìn)行必要的初始化,確保該設(shè)備運(yùn)轉(zhuǎn)正常。
二 NVMe是一個邏輯設(shè)備接口規(guī)范
它是與AHCI類似的、基于設(shè)備邏輯接口的總線傳輸協(xié)議規(guī)范(相當(dāng)于通訊協(xié)議中的應(yīng)用層),用于訪問通過PCI Express(PCIe)總線附加的非易失性存儲器介質(zhì)(例如采用閃存的固態(tài)硬盤驅(qū)動器),雖然理論上不一定要求 PCIe 總線協(xié)議。
NVMe的優(yōu)點(diǎn)
NVMe標(biāo)準(zhǔn)是面向PCI-E SSD的,使用原生PCI-E通道與CPU直連可以免去SATA與SAS接口的外置控制器(PCH)與CPU通信所帶來的延時。
NVMe加入了自動功耗狀態(tài)切換和動態(tài)能耗管理功能,設(shè)備從Power State 0閑置50ms后可以切換到Power State 1,繼續(xù)閑置的話,在500ms后又會進(jìn)入功耗更低的Power State 2,切換時雖然會有短暫延遲,但SSD在閑置時可以把功耗控制在極低的水平,在功耗管理上NVMe標(biāo)準(zhǔn)的SSD會比現(xiàn)在主流的AHCI SSD擁有較大優(yōu)勢,這一點(diǎn)對移動設(shè)備來說尤其重要,可以顯著增加筆記本和平板電腦的續(xù)航能力。
NVMe的發(fā)展歷史
NVMe1.0標(biāo)準(zhǔn)與2011年3月推出,由NVMe規(guī)范組織成員公司(如Intel,戴爾,三星,鎂光等共計(jì)100多家公司)合作開發(fā)。2012年10月推出了1.1的版本。在2014年11月推出1.2版本之后,時隔近3年,2017年5月,NVMe規(guī)范組織正式發(fā)布了最新版的NVMe1.3版規(guī)范標(biāo)準(zhǔn)。在最新的1.3中添加了如設(shè)備自檢、引導(dǎo)分區(qū)、虛擬化、主機(jī)操控散熱管理等新特性,理論上能夠大大改進(jìn)SSD的性能。
三【存儲】SCSI、iSCSI協(xié)議詳解及對比
SCSI是小型計(jì)算機(jī)系統(tǒng)接口(Small Computer System Interface)的簡稱,于1979首次提出,是為小型機(jī)研制的一種接口技術(shù),現(xiàn)在已完全普及到了小型機(jī),高低端服務(wù)器以及普通PC上。SCSI協(xié)議定義了一套不同設(shè)備(磁盤,磁帶,處理器,光設(shè)備,網(wǎng)絡(luò)設(shè)備等)利用該框架進(jìn)行信息交互的模型和必要指令集。
SCSI指的是一個龐大協(xié)議體系,可以劃分為SCSI-1、SCSI-2、SCSI-3,最新的為SCSI-3,也是目前應(yīng)用最廣泛的SCSI版本。
??SCSI-1:1979年提出,支持同步和異步SCSI外圍設(shè)備;支持7臺8位的外圍設(shè)備,最大數(shù)據(jù)傳輸速度為5MB/s。
??SCSI-2:1992年提出,也稱為Fast SCSI,數(shù)據(jù)傳輸率提高到20MB/s。
??SCSI-3:1995年提出,Ultra SCSI(Fast-20)。Ultra 2 SCSI(Fast-40)出現(xiàn)于1997年,最高傳輸速率可達(dá)80MB/s。1998年9月,Ultra 3 SCSI(Utra 160 SCSI)正式發(fā)布,最高數(shù)據(jù)傳輸率為160MB/s。Ultra 320 SCSI的最高數(shù)據(jù)傳輸率已經(jīng)達(dá)到了320MB/s。
SCSI協(xié)議本質(zhì)上同傳輸介質(zhì)無關(guān),SCSI可以在多種介質(zhì)上實(shí)現(xiàn),甚至是虛擬介質(zhì)。例如基于光纖的FCP鏈路協(xié)議(FCP,Fibre Channel Protocol,是使用底層光纖通道連接的 SCSI接口 協(xié)議),基于SAS的鏈路協(xié)議(串行SCSI協(xié)議(SSP)用于傳輸SCSI命令),基于虛擬IP鏈路的iSCSI協(xié)議。通俗點(diǎn)說SCSI協(xié)議就是一個存儲設(shè)備與服務(wù)器之間接口傳遞的一個規(guī)范。
邏輯單元(LUN):LUN是SCSI目標(biāo)器中所描述的名字空間資源,一個目標(biāo)器可以包括多個LUN,而且每個LUN的屬性可以有所區(qū)別,比如LUN#0可以是磁盤,LUN#1可以是其他設(shè)備。
啟動器(Initiator):本質(zhì)上,SCSI是一個C/S架構(gòu),其中客戶端成為啟動器,負(fù)責(zé)向SCSI目標(biāo)器發(fā)送請求指令,一般主機(jī)系統(tǒng)都充當(dāng)了啟動器的角色。啟動器通常在軟件中實(shí)現(xiàn),其功能類似于硬件 iSCSI HBA,以從遠(yuǎn)程存儲服務(wù)器訪問目標(biāo)。使用基于軟件的 iSCSI 發(fā)起程序需要連接到具有足夠帶寬的現(xiàn)有以太網(wǎng)網(wǎng)絡(luò)以承載預(yù)期的存儲流量。
目標(biāo)器(Target):處理SCSI指令的服務(wù)端稱為目標(biāo)器,它接收來自主機(jī)的指令并解析處理,比如磁盤陣列的角色就是目標(biāo)器。 SCSI的Initiator與Target共同構(gòu)成了一個典型的C/S模型,每個指令都是“請求/應(yīng)答”這樣的模型來實(shí)現(xiàn)。為了提供對存儲或輸出設(shè)備的訪問,目標(biāo)配置有一個或多個邏輯單元號 (LUN)。在 iSCSI 中,LUN 顯示為目標(biāo)的按順序編號的磁盤驅(qū)動器,盡管目標(biāo)通常只有一個 LUN。啟動器與目標(biāo)執(zhí)行 SCSI 協(xié)商以建立到 LUN 的連接。LUN 以模擬 SCSI 磁盤塊設(shè)備的形式響應(yīng),它可以以原始形式使用,也可以使用客戶端支持的文件系統(tǒng)進(jìn)行格式化。iscsi 通過使用 ACL 提供 LUN 屏蔽。這確保了只有指定的客戶端節(jié)點(diǎn)才能登錄到特定的目標(biāo)。在目標(biāo)服務(wù)器上,可以在 TPG 級別設(shè)置 ACL 以保護(hù) LUN 組,或?yàn)槊總€ LUN 單獨(dú)設(shè)置。
??Initiator主要任務(wù):發(fā)出SCSI請求。
??Target主要任務(wù):回答SCSI請求,通過LUN提供業(yè)務(wù),并通過任務(wù)管理器提供任務(wù)管理功能。
iSCSI
iSCSI是由Cisco和 IBM兩家發(fā)起的,2003年2月由IETF(互聯(lián)網(wǎng)工程任務(wù)組)認(rèn)證通過,是一項(xiàng)比較成熟的技術(shù)。它將SCSI命令封裝在TCP/IP包里,并使用一個iSCSI幀頭。它基于IP協(xié)議棧,假設(shè)以不可靠的網(wǎng)絡(luò)為基礎(chǔ),依靠TCP恢復(fù)丟失的數(shù)據(jù)包。iSCSI繼承了兩大最傳統(tǒng)技術(shù):SCSI和TCP/IP協(xié)議。這為iSCSI的發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ)?;趇SCSI的存儲系統(tǒng)只需要不多的投資便可實(shí)現(xiàn)SAN存儲功能,甚至直接利用現(xiàn)有的TCP/IP網(wǎng)絡(luò)。相對于以往的網(wǎng)絡(luò)存儲技術(shù),它解決了開放性、容量、傳輸速度、兼容性、安全性等問題,其優(yōu)越的性能使其備受始關(guān)注與青睞。
如上圖所示,iSCSI (Internet SCSI)把SCSI命令和塊狀數(shù)據(jù)封裝在TCP中在IP網(wǎng)絡(luò)中傳輸。iSCSI作為SCSI的傳輸層協(xié)議,基本出發(fā)點(diǎn)是利用成熟的IP網(wǎng)絡(luò)技術(shù)來實(shí)現(xiàn)和延伸SAN。 iSCSI協(xié)議是SCSI遠(yuǎn)程過程調(diào)用模型到TCP/IP協(xié)議的映射。SCSI協(xié)議層負(fù)責(zé)生成CDB,并將其送到iSCSI協(xié)議層,然后由 iSCSI協(xié)議層進(jìn)一步封裝成PDU,經(jīng)IP網(wǎng)絡(luò)進(jìn)行傳送。
iSCSI工作流程
??iSCSI系統(tǒng)由SCSI適配器發(fā)送一個SCSI命令。
??命令封裝到TCP/IP包中并送入到以太網(wǎng)絡(luò)。
??接收方從TCP/IP包中抽取SCSI命令并執(zhí)行相關(guān)操作。
??把返回的SCSI命令和數(shù)據(jù)封裝到TCP/IP包中,將它們發(fā)回到發(fā)送方。
??系統(tǒng)提取出數(shù)據(jù)或命令,并把它們傳回SCSI子系統(tǒng)。
具體來講,發(fā)起端(Initiator):
??SCSI層負(fù)責(zé)生成CDB(命令描述符塊),將CDB傳給iSCSI。
??iSCSI層負(fù)責(zé)生成iSCSI PDU(協(xié)議數(shù)據(jù)單元),并通過IP網(wǎng)絡(luò)將PDU發(fā)給target。
目標(biāo)器(Target):
??iSCSI層收到PDU,將CDB傳給SCSI層。
??SCSI層負(fù)責(zé)解釋CDB的意義,必要時發(fā)送響應(yīng)。
總結(jié)? SCSI與ISCSI區(qū)別:
??iSCSI,即internet SCSI,是IETF制訂的一項(xiàng)標(biāo)準(zhǔn),用于將SCSI數(shù)據(jù)塊映射成以太網(wǎng)數(shù)據(jù)包。從根本上說,iSCSI協(xié)議是一種跨過IP網(wǎng)絡(luò)來傳輸潛伏時間短的 SCSI數(shù)據(jù)塊的方法;簡單的說, iSCSI可以實(shí)現(xiàn)在IP網(wǎng)絡(luò)上運(yùn)行SCSI協(xié)議,使其能夠在諸如高速千兆以太網(wǎng)上進(jìn)行路由選擇。
??SCSI 的意義是小型計(jì)算機(jī)系統(tǒng)接口(Small Computer System Interface);今天的SCSI已劃分為SCSI-1和SCSI-2,以及最新的SCSI-3三個類型。不過,目前最為流行的版本還要算是SCSI-2
iSCSI + Service API = RBD(Reliable Block Device)
四?什么是NUMA,我們?yōu)槭裁匆私釴UMA
NUMA到底指的是什么?我們怎么可以感受到它的存在?以及NUMA的存在對于我們編程會有什么影響?今天我們一起來看一下。
NUMA(Non-Uniform Memory Access),即非一致性內(nèi)存訪問,是一種關(guān)于多個CPU如何訪問內(nèi)存的架構(gòu)模型,早期,在計(jì)算機(jī)系統(tǒng)中,CPU是這樣訪問內(nèi)存的:
在這種架構(gòu)中,所有的CPU都是通過一條總線來訪問內(nèi)存,我們把這種架構(gòu)叫做SMP架構(gòu)(Symmetric Multi-Processor),也就是對稱多處理器結(jié)構(gòu)??梢钥闯鰜?#xff0c;SMP架構(gòu)有下面4個特點(diǎn):
- CPU和CPU以及CPU和內(nèi)存都是通過一條總線連接起來
- CPU都是平等的,沒有主從關(guān)系
- 所有的硬件資源都是共享的,即每個CPU都能訪問到任何內(nèi)存、外設(shè)等
- 內(nèi)存是統(tǒng)一結(jié)構(gòu)和統(tǒng)一尋址的(UMA, Uniform Memory Architecture)
SMP架構(gòu)在CPU核不多的情況下,問題不明顯,有實(shí)驗(yàn)證明,SMP服務(wù)器CPU利用率最好的情況是2至4個CPU:(如上圖右邊)
但是隨著CPU多核技術(shù)的發(fā)展,一顆物理CPU中集成了越來越多的core,導(dǎo)致SMP架構(gòu)的性能瓶頸越來越明顯,因?yàn)樗械奶幚砥鞫纪ㄟ^一條總線連接起來,因此隨著處理器的增加,系統(tǒng)總線成為了系統(tǒng)瓶頸,另外,處理器和內(nèi)存之間的通信延遲也較大。
為了解決SMP架構(gòu)下不斷增多的CPU Core導(dǎo)致的性能問題,NUMA架構(gòu)應(yīng)運(yùn)而生,NUMA調(diào)整了CPU和內(nèi)存的布局和訪問關(guān)系,具體示意如下圖:
在NUMA架構(gòu)中,將CPU劃分到多個NUMA Node中,每個Node有自己獨(dú)立的內(nèi)存空間和PCIE總線系統(tǒng)。各個CPU間通過QPI總線進(jìn)行互通。
CPU訪問不同類型節(jié)點(diǎn)內(nèi)存的速度是不相同的,訪問本地節(jié)點(diǎn)的速度最快,訪問遠(yuǎn)端節(jié)點(diǎn)的速度最慢,即訪問速度與節(jié)點(diǎn)的距離有關(guān),距離越遠(yuǎn)訪,問速度越慢,所以叫做非一致性內(nèi)存訪問,這個訪問內(nèi)存的距離我們稱作Node Distance。
雖然NUMA很好的解決了SMP架構(gòu)下CPU大量擴(kuò)展帶來的性能問題,但是其自身也存在著不足,當(dāng)Node節(jié)點(diǎn)本地內(nèi)存不足時,需要跨節(jié)點(diǎn)訪問內(nèi)存,節(jié)點(diǎn)間的訪問速度慢,從而也會帶來性能的下降。所以我們在編寫應(yīng)用程序時,要充分利用NUMA系統(tǒng)的這個特點(diǎn),盡量的減少不同CPU模塊之間的交互,避免遠(yuǎn)程訪問資源,如果應(yīng)用程序能有方法固定在一個CPU模塊里,那么應(yīng)用的性能將會有很大的提升。
在Linux系統(tǒng)上,可以查看到NUMA架構(gòu)下CPU和內(nèi)存的分布情況,不過在這之前,我們先得理清幾個概念:
- Socket:表示一顆物理 CPU 的封裝(物理 CPU 插槽),簡稱插槽。為了避免將邏輯處理器和物理處理器混淆,Intel 將物理處理器稱為插槽,Socket表示可以看得到的真實(shí)的CPU核 。
- Core:物理 CPU 封裝內(nèi)的獨(dú)立的一組程序執(zhí)行的硬件單元,比如寄存器,計(jì)算單元等,Core表示的是在同一個物理核內(nèi)邏輯層面的核。同一個物理CPU的多個Core,有自己獨(dú)立的L1和L2 Cache,共享L3 Cache。
- Thread:使用超線程技術(shù)虛擬出來的邏輯 Core,需要 CPU 支持。為了便于區(qū)分,邏輯 Core 一般被寫作 Processor。在具有 Intel 超線程技術(shù)的處理器上,每個內(nèi)核可以具有兩個邏輯處理器,這兩個邏輯處理器共享大多數(shù)內(nèi)核資源(如內(nèi)存緩存和功能單元)。此類邏輯處理器通常稱為 Thread 。超線程可以在一個邏輯核等待指令執(zhí)行的間隔(等待從cache或內(nèi)存中獲取下一條指令),把時間片分配到另一個邏輯核。高速在這兩個邏輯核之間切換,讓應(yīng)用程序感知不到這個間隔,誤認(rèn)為自己是獨(dú)占了一個核。對于每個邏輯線程,擁有完整獨(dú)立的寄存器集合和本地中斷邏輯,共享執(zhí)行單元和一二三級Cache,超線程技術(shù)可以帶來20%~30%的性能提升。
- Node:即NUMA Node,包含有若干個 CPU Core 的組。
Socket、Core和Threads之間的關(guān)系示意如下:
在Linux系統(tǒng)中,可以用lscpu查看NUMA和CPU的對應(yīng)關(guān)系:
從上圖可以看到,這臺服務(wù)器有兩個NUMA node,有兩個Socket,每個Socket也就是一個物理CPU,有14個邏輯Core,每個邏輯Core有兩個線程(服務(wù)器開啟了超線程),所以總共的CPU個數(shù)(以超線程計(jì)數(shù))為:2*14*2 = 56個。
使用numactl -H命令可以看到NUMA下的內(nèi)存分布:(上圖右)
所以這臺服務(wù)器上CPU和內(nèi)存在NUMA下的分布如下:
NUMA架構(gòu)下的CPU,先從邏輯Core開始編號,如果開啟了超線程,就從Core總數(shù)的后面繼續(xù)編號,例如上圖中從cpu8開始之后的都是開啟超線程之后的CPU線程。
另外,在實(shí)際編程中,我們還可以通過numastat命令查看NUMA系統(tǒng)下內(nèi)存的訪問命中率:
- numa_hit:成功分配給此節(jié)點(diǎn)的頁面數(shù)量。
- numa_miss:由于預(yù)期節(jié)點(diǎn)上的內(nèi)存較低,在此節(jié)點(diǎn)上分配的頁面數(shù)量。每個 numa_miss 事件在另一個節(jié)點(diǎn)上都有對應(yīng)的 numa_foreign 事件。
- numa_foreign:最初用于分配給另一節(jié)點(diǎn)的頁面數(shù)量。每個 numa_foreign 事件在另一節(jié)點(diǎn)上都有對應(yīng)的 numa_miss 事件。
- interleave_hit:成功分配給此節(jié)點(diǎn)的交集策略頁面數(shù)量。
- local_node:此節(jié)點(diǎn)上的進(jìn)程在這個節(jié)點(diǎn)上成功分配的頁面數(shù)量。
- other_node:通過另一節(jié)點(diǎn)上的進(jìn)程在這個節(jié)點(diǎn)上分配的頁面數(shù)量。
如果miss值和foreign值越高,就要考慮線程綁定以及內(nèi)存分配使用的問題。
需要注意的是,NUMA Node和socket并不一定是一對一的關(guān)系,在AMD的CPU中,可能更多見于NUMA Node比socket個數(shù)多(一般AMD的CPU的NUMA可以在BIOS中進(jìn)行配置),而Intel的CPU中,NUMA Node可能比socket的個數(shù)還少。
例如在下面這臺服務(wù)器上,使用的是AMD的EPYC 7001,NUMA有8個,但是Socket只有兩個:
NUMA架構(gòu)下的編程
NUMA架構(gòu)顯著的特點(diǎn)就是CPU訪問本地內(nèi)存快,訪問遠(yuǎn)程內(nèi)存慢。所以我們在NUMA架構(gòu)下編寫程序,要揚(yáng)長避短,多核多線程編程中,我們要盡可能的利用CPU Core的親和性,將線程綁定到對應(yīng)的CPU上,并且該線程從該CPU對應(yīng)的本地內(nèi)存上去申請內(nèi)存,這樣才能最大限度發(fā)揮NUMA架構(gòu)的優(yōu)勢,達(dá)到比較好的處理性能。
簡單來說,就是本地的處理器、本地的內(nèi)存來處理本地的設(shè)備上產(chǎn)生的數(shù)據(jù)。如果有一個PCI設(shè)備(比如網(wǎng)卡)在Node0上,就用Node0上的核來處理該設(shè)備,處理該設(shè)備用到的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)緩沖區(qū)都從Node0上分配。
在DPDK中,有一個rte_socket_id()函數(shù),可以獲取當(dāng)前線程所在的NUMA Node,在使用DPDK提供申請內(nèi)存的接口中,一般都需要傳入?yún)?shù)NUMA id,也是基于提高NUMA架構(gòu)下的報文轉(zhuǎn)發(fā)性能考慮。