計算機(jī)新手必備內(nèi)存實(shí)用知識
在電腦硬件中,CPU和顯卡、內(nèi)存均是重中之重,因此我們在選擇這些核心硬件一定要慎重考慮。下面就讓小編帶你去看看計算機(jī)新手必備內(nèi)存實(shí)用知識,希望能幫助到大家!
內(nèi)存總是不夠?HBase&GeoMesa配置優(yōu)化了解一下
1、先熟悉一下HBase的內(nèi)存模型
HBase系統(tǒng)中有兩塊大的內(nèi)存管理模塊,一塊是MemStore ,一塊是BlockCache,前置是用于集群寫入所屬內(nèi)存,而后者用于緩存熱數(shù)據(jù),提供查詢速度。這兩者均可以通過配置文件進(jìn)行配置。當(dāng)前集群均配置了0.4和0.4的比例。而考慮到HBase集群是多寫少讀的情景,為此而引入了MSLAB機(jī)制來優(yōu)化HBase的MemStore 負(fù)擔(dān)。內(nèi)存的使用率會呈現(xiàn)很優(yōu)美的鋸齒圖形。
2、分析內(nèi)存使用率和業(yè)務(wù)關(guān)系
起初認(rèn)為是讀寫業(yè)務(wù)量已經(jīng)超過了集群負(fù)載能力,但集群業(yè)務(wù)也不大,寫和讀的TPS,帶寬吞吐量均未達(dá)到集群限定的能力,而且CPU利用率大多半都被GC占用,但內(nèi)存就是持高不下,即使業(yè)務(wù)了停了一天,內(nèi)存還是不怎么下降,很明顯和業(yè)務(wù)量無關(guān)。那么和compaction有關(guān)?經(jīng)觀察的確可以看compact時特別消耗時間。此時感覺看到了希望,調(diào)整各個參數(shù),把compact操作提升了10+倍之后,內(nèi)存還是持高不下 。剩下最根治的辦法就是分析內(nèi)存,看一下內(nèi)存數(shù)據(jù)都是什么?有無內(nèi)存泄露問題。
3、分析dunp文件
節(jié)點(diǎn)dump下regionserver的內(nèi)存,分析發(fā)現(xiàn)內(nèi)存中有50個RpcServer.FifoRWQ.default.read.handler線程,每個線程持有了1.2%左右的總內(nèi)存,那么所有的線程持有的內(nèi)存占有量大于為50__1.2%=60%。隨著查詢次數(shù)增多,線程持續(xù)的內(nèi)存還會持續(xù)增加,如下圖。
分析每一個線程持有的內(nèi)存數(shù)據(jù),全部都是業(yè)務(wù)信息。
那么繼續(xù)分析,此業(yè)務(wù)信息所屬對象:org.locationtech.geomesa.filter.factory.FastFilterFactory。而對比同規(guī)模的集群,的確是此異常集群開啟了GeoMesa特性。找到問題所在,那就看源碼分析是唯一出路。
導(dǎo)致集群隨著查詢次數(shù)增多,內(nèi)存一直持續(xù)不下。能否去掉此處緩存策略呢?為什么緩存此查詢信息呢,目的就是為了減少同樣的查詢再次被優(yōu)化的步驟。那么我們查詢添?xiàng)l件key有沒有重復(fù)使用,此處有個嚴(yán)格規(guī)定,就是key中不僅保證使用相同的GeoMesa函數(shù)還有使用相同的參數(shù),基于這個原則,業(yè)務(wù)上查詢條件是沒有重復(fù)的。我們配置了可選參數(shù)useFilterCache,默認(rèn)是開啟的,沒必要緩存此查詢條件,應(yīng)予以刪除。
結(jié)論
在配置文件中添加了useFilterCache參數(shù),默認(rèn)是開啟的,根據(jù)業(yè)務(wù)需要選擇開始和關(guān)閉filterCache特效。經(jīng)分析我們業(yè)務(wù)場景沒必要緩存此查詢條件,應(yīng)予以關(guān)閉。優(yōu)化后的集群內(nèi)存使用率情況就恢復(fù)了正常狀態(tài)。
計算機(jī)內(nèi)存和CPU的基礎(chǔ)知識
內(nèi)存的基本單元是一個字節(jié)。一臺有32兆內(nèi)存的電腦大概能容納3200萬字節(jié)的信息。在內(nèi)存里的每一個字節(jié)通過一個唯一的數(shù)字來標(biāo)識作為它的地址,如圖1.4展示的一樣。
通常內(nèi)存都是大塊大塊地使用而不是單個字節(jié)。在PC機(jī)結(jié)構(gòu)中,命名了這些內(nèi)存大塊,如圖1.2展示的一樣。
在內(nèi)存里的數(shù)據(jù)都是數(shù)字的。字符通過用數(shù)字來表示字符的字符編碼來儲存。其中一個最普遍的字符編碼稱為ASCII的編碼是Unicode。在這兩種編碼中最主要的區(qū)別是ASCII使用一個字節(jié)來編碼一個字符,但是Unicode每個字符使用兩個字節(jié)(或一個字)。例如ASCII使用來表示字符大寫A;Unicode使用來表示。因?yàn)锳SCII使用一個字節(jié),所以它僅能表示256種不同的字符。Unicode將ASCII的值擴(kuò)展成一個字,允許表示更多的字符。這對于表示全世界所有的語言非常重要。
CPU
中央處理器(CPU)是執(zhí)行指令的物理設(shè)備。CPU執(zhí)行的指令通常非常簡單。指令可能要求他們使用的數(shù)據(jù)存儲在一個CPU稱為寄存器的特殊儲存位置中。CPU可以比訪問內(nèi)存更快地訪問寄存器里的數(shù)據(jù)。然而,在CPU里的寄存器是有限的,所以程序員必須注意只保存現(xiàn)在使用的數(shù)據(jù)到寄存器中。各類CPU執(zhí)行的指令組成了該CPU的機(jī)器語言。機(jī)器語言擁有比高級語言更基本的結(jié)構(gòu)。機(jī)器語言指令被編碼成未加工的數(shù)字,而不是友好的文本格式。為了更有效的運(yùn)行,CPU必須能很快地解釋一個指令的目的.機(jī)器語言就是為了這個目的設(shè)計的,而不是讓人們更容易理解而設(shè)計。一個其他語言寫的程序必須轉(zhuǎn)換成CPU的本地機(jī)器語言,才能在電腦上運(yùn)行。編譯器是一個將用用程序語言寫的程序翻譯成特殊結(jié)構(gòu)的電腦的機(jī)器語言的程序。通常,每一種類型的CPU都有它自己唯一的機(jī)器語言。這是為什么為Mac寫的程序不能在IBM類型PC機(jī)運(yùn)行的一個原因。電腦通過使用時鐘來同步指令的執(zhí)行。時鐘脈沖在一個固定的頻率(稱為時鐘頻率)。當(dāng)你買了一臺1.5GHz的電腦,1.5GHz就是時鐘頻率。時鐘并不記錄分和秒。它以不變的速率簡單跳動。電子計算機(jī)通過使用這個跳動來正確執(zhí)行它們的操作,就像節(jié)拍器的跳動如何來幫助你以正確的節(jié)奏播放音樂。一個指令需要跳動的次數(shù)(或就像他們經(jīng)常說的執(zhí)行周期)依賴CPU的產(chǎn)生和模仿。周期的次數(shù)取決于它之前的指令和其他因素。
CPU 80x86系列
IBM型號的PC機(jī)包含了一個來自Intel 80x86家族(或它的克隆)的CPU。在這個家族的所有CPU都有一些普遍的特征,包括有一種基本的機(jī)器語言。無論如何,最近的成員極大地加強(qiáng)了這個特征。
8088,8086: 這些CPU從編程的觀點(diǎn)來看是完全相同的。它們是用在早期PC機(jī)上的CPU。它們提供一些16位的寄存器:AX,BX,CX,DX,SI,DI,BP,SP,CS,DS,SS,ES,IP,F(xiàn)LAGS。它們僅僅支持1M字節(jié)的內(nèi)存,而且只能工作在實(shí)模式下。在這種模式下,一個程序可以訪問任何內(nèi)存地址,甚至其它程序的內(nèi)存!這會使排除故障和保證安全變得非常困難!而且,程序的內(nèi)存需要分成段。每段不能大
于64K。
80286: 這種CPU使用在AT系列的PC機(jī)中。它在8088/86的基本機(jī)器語言中加入了一些新的指令。然而,它主要的新的特征是16位保護(hù)模式。在這種模式下,它可以訪問16M字節(jié)的內(nèi)存和通過阻止訪問其它程序的內(nèi)存來保護(hù)程序??墒?,程序依然是分成不能大于64K的段。
80386: 這種CPU極大地增強(qiáng)了80286的性能。首先,它擴(kuò)展了許多寄存器來容納32位數(shù)據(jù)(EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP,EIP)而且增加了兩個新的16位寄存器(FS,GS)。它同樣增加了一個新的32位保護(hù)模式。在這種模式下,它可以訪問4G字節(jié)。程序同樣分成段,但是現(xiàn)在每段大小同樣可以到4G。
80486/Pentium/Pentium Pro: 這些80x86家族的成員增加了不多的新的特征。它們主要是提高了指令執(zhí)行的速度。Pentium MMX: 這些處理器在Pentium基礎(chǔ)上增加了MMX指令(多媒體擴(kuò)展)。這些指令可以提高普通的圖像操作的速率。
Pentium II: 它是擁有MMX 指令的Pentium處理器。(Pentium III 本質(zhì)上就是一個更快的Pentium II。)
8086 16位寄存器
最初的8086CPU提供4個16位通用寄存器:AX,BX,CX 和DX。這些寄存器都可以分解成兩個8位寄存器。例如:AX寄存器可以分解成AH和AL寄存器,像圖1.5展示的一樣。AH寄存器包含AX的上(或高)8位,而AL包含AX的低8位。通常AH和AL都當(dāng)做獨(dú)立的一個字節(jié)的寄存器來用;但是,清楚它們不能獨(dú)立于AX是非常重要的。改變AX的值將會改變AH和AL的值反之亦然。通用寄存器多數(shù)使用在數(shù)據(jù)移動和算術(shù)指令中。
這有兩個16位指針寄存器:SI 和DI 。通常它們都是當(dāng)作指針來使用,但是在許多情況下也可以像通用寄存器一樣使用。但是,它們不可以分解成8位寄存器。16位BP和SP 寄存器用來指向機(jī)器語言堆棧里的數(shù)據(jù),被各自稱為基址寄存器和堆棧指針寄存器。這些將在以后討論。
16位CS,DS,SS 和ES 寄存器是段寄存器。它們指出程序不同部分所使用的內(nèi)存。CS代表代碼段,DS 代表數(shù)據(jù)段,SS 代表堆棧段和ES代表附加段。ES當(dāng)作一個暫時段寄存器來使用。這些寄存器的細(xì)節(jié)描述在后面的文章中。
指令指針寄存器(IP) 與CS寄存器一起使用來跟蹤C(jī)PU下一條執(zhí)行指令的地址。通常,當(dāng)一條指令執(zhí)行時,IP提前指向內(nèi)存里的下一條指令。
FLAGS寄存器儲存了前面指令執(zhí)行結(jié)果的重要信息。這些結(jié)果在寄存器里以單個的位儲存。例如:如果前面指令執(zhí)行結(jié)果是0,Z位為1,反之為0。并不是所有指令都修改FLAGS里的位,查看附錄里的表看單個指令是如何影響FLAGS寄存器的。
80386 32位寄存器
80386及以后的處理器擴(kuò)展了寄存器。例如:16位AX寄存器擴(kuò)展成了32位。為了向后兼容,AX依然表示16位寄存器而EAX 用來表示擴(kuò)展的32位寄存器。AX是EAX 的低16位就像AL是AX(EAX)的低8位一樣。但是沒有直接訪問EAX 高16位的方法。其它的擴(kuò)展寄存器是EBX,ECX,EDX,ESI 和EDI 。
許多其它類型的寄存器同樣也擴(kuò)展了。BP變成了EBP;SP 變成了ESP;FLAGS變成了EFLAGSEFLAGS 而IP變成了EIP。但是,不同于指針寄存器和通用寄存器,在32位保護(hù)模式下(下面將討論的)只有這此寄存器的擴(kuò)展形式被使用。
又到了學(xué)點(diǎn)內(nèi)存知識的季節(jié)
什么是DDR?
DDR,全稱:DDR SDRAM ,Double Data Rate Synchronous Dynamic Random Access Memary,即,雙數(shù)據(jù)速率同步動態(tài)隨機(jī)存取記憶體,也就是我們常用的內(nèi)存,它從SDRAM的基礎(chǔ)上發(fā)展起來,以后依次出現(xiàn)了DDR SDRAM、DDR2 SDRAM、DDR3 SDRAM、DDR4 SDRAM。它們的能效不斷提升。文章結(jié)尾附一張純良心內(nèi)存能效參數(shù)表。
DDR間有什么區(qū)別?
1、SDRAM
SDRAM內(nèi)部組成如,可見其組成可以分為幾個部分,存儲陣列、IO門控單元、行列地址解碼器、行列地址鎖存器、邏輯控制單元(包含模式寄存器)、數(shù)據(jù)輸入輸出寄存器等。
存儲矩陣內(nèi)部結(jié)構(gòu),以8位內(nèi)存單元為例,每個內(nèi)存單元的數(shù)據(jù)輸出是并聯(lián)在一起,通過行列地址線選中一個存儲單元,
存儲容量大小和數(shù)據(jù)位寬度、行地址、列地址、塊數(shù)量等的關(guān)系:
單片容量(bit)=單片位寬×行數(shù)×列數(shù)×塊數(shù)量
2、DDR SDRAM
DDR的內(nèi)部結(jié)構(gòu)與SDRAM相比,數(shù)據(jù)讀寫部分改進(jìn)比較大。其一,使用了兩位預(yù)讀取的技術(shù);其二,增加了DLL(delay lock loop演示鎖定回路);其三,增加了數(shù)據(jù)掩碼控制和數(shù)據(jù)總線反轉(zhuǎn)控制;此外,時鐘信號和數(shù)據(jù)選通信號改為差分信號。
3、DDR2 SDRAM
DDR2 SDRAM整體布局變化不大,在輸入輸出數(shù)據(jù)總線接口上變化比較多。
DDR2在DDR的基礎(chǔ)上增加了ODT(on-die termination片上終結(jié),即通過內(nèi)部邏輯選擇合適的終端電阻進(jìn)行匹配)功能,預(yù)讀取提高到了4位,即每傳輸4個字節(jié)/字,只有第一個字節(jié)/字有潛伏期。
4、DDR3 SDRAM
DDR3 SDRAM在輸入輸出數(shù)據(jù)總線接口上繼續(xù)提升性能,在存儲結(jié)構(gòu)上改進(jìn)工藝,堆疊更多的存儲塊,提高單顆芯片的容量。
在功能上的改進(jìn)有,增加了讀寫平衡功能。
5、DDR4 SDRAM
DDR4 SDRAM在輸入輸出數(shù)據(jù)總線接口上繼續(xù)改善性能,在存儲結(jié)構(gòu)上繼續(xù)改進(jìn)工藝,不僅堆疊更多的存儲塊,而且使用硅片穿孔工藝把把堆疊成的存儲塊進(jìn)行并列放置,集中到一顆芯片中,提高單顆芯片的容量。
計算機(jī)新手必備內(nèi)存實(shí)用知識相關(guān)文章: