CPU的製造和概念

来源:https://www.cnblogs.com/88223100/archive/2023/09/08/Manufacturing-and-Concept-of-CPU.html
-Advertisement-
Play Games

為了讓程式能快點,特意瞭解了CPU的各種原理,比如多核、超線程、NUMA、睿頻、功耗、GPU、大小核再到分支預測、cache_line失效、加鎖代價、IPC等各種指標(都有對應的代碼和測試數據)都會在這系列文章中得到答案。當然一定會有程式員最關心的分支預測案例、Disruptor無鎖案例、cache ...


為了讓程式能快點,特意瞭解了CPU的各種原理,比如多核、超線程、NUMA、睿頻、功耗、GPU、大小核再到分支預測、cache_line失效、加鎖代價、IPC等各種指標(都有對應的代碼和測試數據)都會在這系列文章中得到答案。當然一定會有程式員最關心的分支預測案例、Disruptor無鎖案例、cache_line偽共用案例等等。

這次讓我們從最底層的沙子開始用8篇文章來回答各種疑問以及大量的實驗對比案例和測試數據。

大的方面主要是從這幾個疑問來寫這些文章:

  • 同樣程式為什麼CPU跑到800%還不如CPU跑到200%快?
  • IPC背後的原理和和程式效率的關係?
  • 為什麼資料庫領域都愛把NUMA關了,這對嗎?
  • 幾個國產晶元的性能到底怎麼樣?

系列文章

CPU的製造和概念

Perf IPC以及CPU性能

CPU性能和CACHE

CPU 性能和Cache Line

十年後資料庫還是不敢擁抱NUMA?

Intel PAUSE指令變化是如何影響自旋鎖以及MySQL的性能的

AMD Zen CPU 架構 以及 AMD、海光、Intel、鯤鵬的性能對比

Intel、海光、鯤鵬920、飛騰2500 CPU性能對比

一次海光物理機資源競爭壓測的記錄

飛騰ARM晶元(FT2500)的性能測試

image-20210802161410524

幾個重要概念

為了增加對文章的理解先解釋下幾個高頻概念

Wafer:晶圓,一片大的純硅圓盤,新聞里常說的12寸、30寸晶圓廠說的就是它,光刻機在晶圓上蝕刻出電路

Die:從晶圓上切割下來的CPU(通常一個Die中包含多個core、L3cache、記憶體介面、GPU等,core裡面又包含了L1、L2cache),Die的大小可以自由決定,得考慮成本和性能, Die做成方形便於切割和測試,伺服器所用的Intel CPU的Die大小一般是大拇指指甲大小。

封裝:將一個或多個Die封裝成一個物理上可以售賣的CPU

路:就是socket、也就是封裝後的物理CPU

node:同一個Die下的多個core以及他們對應的記憶體,對應著NUMA

售賣的CPU實物

購買到的CPU實體外觀和大小,一般是40mm X 50mm大小,可以看出一個CPU比一個Die大多了。

How to Perform a CPU Stress Test and Push It to the Limit | AVG

Coffee Lake-Refresh Desktop CPU List Surfaces: 35W Core i9-9900T & 8-Core  Xeon E-2200 Confirmed

enter image description here

裸片Die 製作

晶圓為什麼總是圓的呢?生產過程就是從沙子中提純硅,硅晶柱生長得到晶圓,生長是以圓柱形式的,所以切割下來的晶圓就是圓的了:

img

硅晶柱切片:

img

直徑為 300 毫米的純硅晶圓(從硅柱上切割下來的圓片),俗稱 12 寸晶圓,大約是 400 美金。但尺寸並不是衡量硅晶圓的最重要指標,純度才是。日本的信越公司可以生產 13 個 9 純度的晶圓。

高純硅的傳統霸主依然是德國Wacker和美國Hemlock(美日合資),中國任重而道遠。太陽能級高純硅要求是99.9999%,低純度的硅全世界超過一半是中國產的,但是不值錢。而晶元用的電子級高純硅要求99.999999999%,幾乎全賴進口,直到2018年江蘇鑫華公司才實現量產,目前年產0.5萬噸,而中國一年進口15萬噸。核心材料技術這塊毫無疑問“外國仍然把中國摁在地上摩擦”。

晶元設計

主要依賴EDA, EDA工具是電子設計自動化(Electronic Design Automation)的簡稱,從電腦輔助設計(CAD)、電腦輔助製造(CAM)、電腦輔助測試(CAT)和電腦輔助工程(CAE)的概念發展而來的,是IC基礎設計能力。利用EDA工具,工程師將晶元的電路設計、性能分析、設計出IC版圖的整個過程交由電腦自動處理完成。

EDA軟體方面早已形成了三巨頭——Synopsys、Cadence、Mentor。Synopsys是EDA三巨頭之首,國內從事EDA軟體開發的華大九天和這三家比起來不是一個數量級。國內IC設計公司幾乎100%採用國外EDA工具,在未來的相當長的一段時間里,我們應該看不到縮小和Synopsys、Cadence、Mentor技術差距的可能性。

光刻

使用特定波長的光,透過光罩(類似印炒裡面的母版),照射在塗有光刻膠的晶圓上,光罩上晶元的設計圖像,就複製到晶圓上了,這就是光刻,這一步是由光刻機完成的,光刻機是晶元製造中光刻環節的核心設備。你可以把光刻理解為,就是用光罩這個母版,一次次在晶圓上印電路的過程。

img

光刻是最貴的一個環節,一方面是光罩越來越多,越來越貴,另一方面光刻機也很貴。光刻機是半導體製造設備中價格占比最大,也是最核心的設備。2020 年荷蘭公司 ASML 的極紫外光源(EUV)光刻機每台的平均售價是 1.45 億歐元,而且全世界獨家供貨,年產量 31 台,有錢也未必能買得到。

image-20210601160424815

短波長光源是提高光刻機分辨力的有效方,光刻機的發展歷史,就從紫外光源(UV)、深紫外光源(DUV),發展到了現在的極紫外光源(EUV)。

回顧光刻機的發展歷史,從 1960 年代的接觸式光刻機、接近式光刻機,到 1970 年代的投影式光刻機,1980 年代的步進式光刻機,到步進式掃描光刻機、浸入式光刻機和現在的深紫外光源(DUV)和極紫外光源(EUV)光刻機,一邊是設備性能的不斷提高,另一邊是價格逐年上升,且供應商逐漸減少。到了 EUV 光刻機,ASML(阿斯麥) 就是獨家供貨了。英特爾有阿斯麥15%的股份,台積電有5%,三星有3%,另外美國弄了一個《瓦森納協定》,敏感技術不能賣,中國、北韓、伊朗、利比亞均是被限制國家。

品質合格的die切割下去後,原來的晶圓成了下圖的樣子,是挑剩下的Downgrade Flash Wafer。殘餘的die是品質不合格的晶圓。黑色的部分是合格的die,會被原廠封裝製作為成品NAND顆粒,而不合格的部分,也就是圖中留下的部分則當做廢品處理掉。

從晶圓上切割檢測合格的Die(螺片),所以Die跟Wafer不一樣不是圓的,而是是方形的,因為方形的在切割封測工藝上最簡單

img

一個大晶圓,拿走了合格的Die後剩下的次品:

img

可見次品率不低,後面會談到怎麼降低次品率,次品率決定了CPU的價格。

台積電一片 5nm 晶圓的加工費高達 12500 美金。根據台積電的財報推算,台積電平均每片晶圓可以產生近 4000 美金(300mm 晶圓)的利潤。無論是哪個數字,對比 400 美金的純硅晶圓原料來說,這都是一個至少增值 10 倍的高價值的加工過程。

隨著Die的縮小,浪費的比例也從36%縮小成為12.6%。根據極限知識,我們知道如果Die的大小足夠小,我們理論上可以100%用上所有的Wafer大小。從中我們可以看出越小的Die,浪費越小,從而降低CPU價格,對CPU生產者和消費者都是好事。

光刻機有一個加工的最大尺寸,一般是 858mm²,而 Cerebras 和台積電緊密合作,做了一個 46255mm²,1.2T 個晶體管的世界第一大晶元。這也是超摩爾定律的一個突破。

AMD在工藝落後Intel的前提下,又想要堆核,只能採取一個Package封裝4個獨立Die的做法,推出了Zen1 EPYC伺服器晶元,即不影響良率,又可以核心數目好看,可謂一舉兩得。

可惜連接四個Die的片外匯流排終歸沒有片內通信效率高,在好些benchmark中敗下陣來,可見沒有免費的午餐。

img

Intel的Pakcage內部是一個Die, Core之間原來是Ring Bus,在Skylake後改為Mesh。AMD多Die封裝的目的是省錢和增加靈活性!AMD每個Zeppelin Die都比Intel的小,這對良品率提高很大,節約了生產費用。

這種膠水核強行將多個die拼一起是沒考慮跨die之間的延遲,基本上跨die跟intel跨socket(numa)時延一樣了。

一顆晶元的 1/3 的成本,是花在封測階段的

img

一個晶體管(納米尺度),註意三個黃色的導電銅點

image-20230621183939476

對應的一個邏輯意義上的NPMOS 晶體管:

image-20230621184113927

MOS :金屬-氧化物-半導體,而擁有這種結構的晶體管我們稱之為MOS晶體管。 MOS晶體管有P型MOS管和N型MOS管之分。 由MOS管構成的集成電路稱為MOS集成電路,由NMOS組成的電路就是NMOS集成電路,由PMOS管組成的電路就是PMOS集成電路,由NMOS和PMOS兩種管子組成的互補MOS電路,即CMOS電路

Die和core

One die with multiple cores,下圖是一個Die內部圖:

enter image description here

或者Skylake:

skylake sp mesh core tile zoom with client shown.png

將兩個Die封裝成一塊CPU(core多,成本低):

data f1

第4代酷睿(Haswell)的die:

image-20210601162558479

第4代酷睿(Haswell)的die主要分為幾個部分:GPU、4個core、System Agent(uncore,類似北橋)、cache和記憶體控制器和其他小部件。比如我們發現core 3和4有問題,我們可以直接關閉3和4。壞的關掉就是i5, 都是好的就當i7來賣。

北橋和南橋

早期CPU core和記憶體硬碟的連接方式(FSB 是瓶頸):

image-20210602113401202

個人PC主板實物圖:

img

由於FSB變成了系統性能的瓶頸和對多CPU的制約,在台式機和筆記本電腦中,MCH(Memory Control Hub)被請進CPU中,伺服器市場雖然短暫的出現了IOH。

Image

集成北橋後的記憶體實物圖:

image-20210602114931825

北橋已經集成到CPU中,南橋還沒有,主要是因為:集成後Die增大不少,生產良品率下降成本上升;不集成兩者採用不同的工藝;另外就是CPU引腳不夠了!

Image

SoC(System on Chip):南橋北橋都集成在CPU中,單晶元解決方案。ATOM就是SoC

現代CPU的基本架構

下圖是一個兩路的伺服器結構,每路4個記憶體channel

image-20220711110145506

一個Core的典型結構

Intel skylake 架構圖

skylake server block diagram.svg

iTLB:instruct TLB

dTLB:data TLB

多個core加上L3等組成一個Die:

img

多核和多個CPU

如果要實現一臺48core的計算能力的伺服器,可以有如下三個方案

方案1:一個大Die集成48core:Intel Skylake SP Mesh Architecture Conceptual Diagram

方案2:一個CPU封裝8個Die,也叫MCM(Multi-Chip-Module),每個Die 6個core

image-20210602165525641

四個Die之間的連接方法:

image-20210602172555232

上圖最下麵的方案為Intel採用的EMIB(Embedded Multi-die Interconnect Bridge)方案,cost 最低。中間的方案是使用“硅中介層”(Interposer,AMD採用的方案)。這意味著你能在兩枚主要晶元的下麵放置和使用第三枚晶元。這枚晶元的目的是使得多個設備的連接更加容易,但是也帶來了更高的成本。

方案3:四個物理CPU(多Socket),每個物理CPU(Package)裡面一個Die,每個Die12個core:

image-20210602171352551

三者的比較:

性能肯定是大Die最好,但是良品率低、成本高;

方案2的多個Die節省了主板上的大量佈線和VR成本,總成本略低,但是方案3更容易堆出更多的core和記憶體

image-20210602170727459

面積和性能

我們使用了當時Intel 用在數據中心計算的大核CPU IvyBridge與當時用於 存儲系列的小核CPU Avoton(ATOM), 分別測試阿裡巴巴的workload,得到性能吞吐如下:

Intel 大小CPU 核心 阿裡 Workload Output(QPS)
Avoton(8 cores) 2.4GHZ 10K on single core
Ivy Bridge(2650 v2 disable HT) 2.6GHZ 20K on single core
Ivy Bridge(2650 v2 enable HT) 2.4GHZ 25K on single core
Ivy Bridge(2650 v2 enable HT) 2.6GHZ 27K on single core
  1. 大小核心直觀比較:超線程等於將一個大核CPU 分拆成兩個小核,Ivy Bridge的數據顯示超線程給 Ivy Bridge 1.35倍(27K/20K) 的提升
  2. 性能與晶元面積方面比較:現在我們分別評判 兩種CPU對應的性能密度 (performance/core die size) ,該數據越大越好,根據我們的計算和測量發現 Avoton(包含L1D, L1I, and L2 per core)大約是 3~4平方毫米,Ivy Bridge (包含L1D, L1I, L2 )大約是12~13平方毫米, L3/core是 6~7平方毫米, 所以 Ivy Bridge 單核心的晶元面積需要18 ~ 20平方毫米。基於上面的數據我們得到的 Avoton core的性能密度為 2.5 (10K/4sqmm),而Ivy Bridge的性能密度是1.35 (27K/20sqmm),因此相同的晶元面積下 Avoton 的性能是 Ivy Bridge的 1.85倍(2.5/1.35).
  3. 性能與功耗方面比較: 從功耗的角度看性能的提升的對比數據,E5-2650v2(Ivy Bridge) 8core TDP 90w, Avoton 8 core TDP 20瓦, 性能/功耗 Avoton 是 10K QPS/20瓦, Ivy Bridge是 27KQPS/90瓦, 因此 相同的功耗下 Avoton是 Ivy Bridge的 1.75倍(10K QPS/20)/ (27KQPS/95)
  4. 性能與價格方面比較: 從價格方面再進行比較,E5-2650v2(Ivy Bridge) 8core 官方價格是1107美元, Avoton 8 core官方價格是171美元性能/價格 Avoton是 10KQPS/171美元,Ivy Bridge 是 27KQPS/1107美元, 因此相同的美元 Avoton的性能是 Ivy Bridge 的2.3倍(1 10KQPS/171美元)/ (27KQPS/1107美元)

總結:在數據中心的場景下,由於指令數據相關性較高,同時由於記憶體訪問的延遲更多,複雜的CPU體繫結構並不能獲得相應性能提升,該原因導致我們需要的是更多的小核CPU,以達到高吞吐量的能力,因此2014 年我們向Intel提出數據中心的CPU傾向“小核”CPU,需要將現有的大核CPU的超線程由 2個升級到4個/8個, 或者直接將用更多的小核CPU增加伺服器的吞吐能力,經過了近8年,最新數據表明Intel 會在每個大核CPU中引入4個超線程,和在相同的晶元面積下單socket CPU 引入200多個小核CPU,該方案與我們的建議再次吻合

為什麼這20年主頻基本沒有提升了

今天的2.5G CPU性能和20年前的2.5G比起來性能差別大嗎?

因為能耗導致CPU的主頻近些年基本不怎麼提升了,不是技術上不能提升,是性價比不高.

在提升主頻之外可以提升性能的有:提升跳轉預測率,增加Decoded Cache,增加每周期的併發讀個數,增加執行通道,增加ROB, RS,Read & Write buffer等等,這些主要是為了增加IPC,當然增加core數量也是提升整體性能的王道。另外就是優化指令所需要的時鐘周期、增加並行度更好的指令等等指令集相關的優化。

img

the industry came up with many different solution to create better computers w/o (or almost without) increasing the clock speed.

比較兩代CPU性能變化

Intel 最新的CPU Ice Lake(8380)和其上一代(8280)的性能對比數據:

img

img

上圖最終結果導致了IPC提升了20%

But tock Intel did with the Ice Lake processors and their Sunny Cove cores, and the tock, at 20 percent instructions per clock (IPC) improvement on integer work

img

ICE Lake在網路轉發上的延時更小、更穩定了:

img

兩代CPU整體性能差異

img

指令集優化

新增等效於某種常見指令組合的指令。原來多個指令執行需要多個時鐘周期,合併後的單條指令可以在一個時鐘周期執行完成。例如FMA指令,就是一條指令計算A×B+C,而無需分兩個時鐘周期計算。這種指令一般來說現有程式直接就能用上,無需優化。限制在於只對特定代碼有效,還是以FMA為例,更普遍的普通加法、乘法運算都不能從中獲益。

案例, ssse3(Supplemental Streaming SIMD Extensions 3 ) 是simd的一種,在libc-2.17.so中就有使用到,如下是mysqld進程中採集到的

1 2 3 4 5 2.79% mysqld [.] MYSQLparse 2.27% libc-2.17.so [.] __memcpy_ssse3_back //ssse3 2.19% mysqld [.] ha_insert_for_fold_func 1.95% mysqld [.] rec_get_offsets_func 1.35% mysqld [.] malloc

AVX(Advanced Vector Extension,高級矢量擴展指令集)

英特爾在1996年率先引入了MMX(Multi Media eXtensions)多媒體擴展指令集,也開創了SIMD(Single Instruction Multiple Data,單指令多數據)指令集之先河,即在一個周期內一個指令可以完成多個數據操作,MMX指令集的出現讓當時的MMX Pentium處理器大出風頭。

SSE(Streaming SIMD Extensions,流式單指令多數據擴展)指令集是1999年英特爾在Pentium III處理器中率先推出的,並將矢量處理能力從64位擴展到了128位。

AVX 所代表的單指令多數據(Single Instruction Multi Data,SIMD)指令集,是近年來 CPU 提升 IPC(每時鐘周期指令數)上為數不多的重要革新。隨著每次數據寬度的提升,CPU 的性能都會大幅提升,但同時晶體管數量和能耗也會有相應的提升。因此在對功耗有較高要求的場景,如筆記本電腦或伺服器中,CPU 運行 AVX 應用時需要降低頻率從而降低功耗。

2013 年, 英特爾 發佈了AVX-512 指令集,其指令寬度擴展為512bit,每個時鐘周期內可打包32 次雙精度或64 次單精度浮點運算,因此在圖像/ 音視頻處理、數據分析、科學計算、數據加密和壓縮和 深度學習 等應用場景中,會帶來更強大的性能表現,理論上浮點性能翻倍,整數計算則增加約33% 的性能。

Linus Torvalds :

AVX512 有很明顯的缺點。我寧願看到那些晶體管被用於其他更相關的事情。即使同樣是用於進行浮點數學運算(通過 GPU 來做,而不是通過 AVX512 在 CPU 上),或者直接給我更多的核心(有著更多單線程性能,而且沒有 AVX512 這樣的垃圾),就像 AMD 所做的一樣。

我希望通過常規的整數代碼來達到自己能力的極限,而不是通過 AVX512 這樣的功率病毒來達到最高頻率(因為人們最終還是會拿它來做 memory-to-memory copy),還占據了核心的很大面積。

關於性能提升的小結

所以今天的2.6G單核skylake,能秒掉20年前2.6G的酷睿, 尤其是複雜場景。

image-20210715094527563

image-20210715094637227

CPU能耗公式:

P = C Vf

C是常數,f就是頻率,V 電壓。 f頻率加大後因為充放電帶來的Gate Delay,也就是頻率增加,充放電時間短,為了保證信號的完整性就一定要增加電壓來加快充放電。

所以最終能耗和f頻率是 f^3 的指數關係。

The successive nodes of CMOS technologies lead to x1.4 decrease of the gate delays. It led to a 25% increase per year of clock frequencies from 740 kHz (Intel 4004) to 3 GHz (Intel Xeons with 45-nm nodes).

每一代光刻工藝的改進可以降低1.4倍的門延遲

即使不考慮散熱問題,Core也沒法做到無限大,目前光刻機都有最大加工尺寸限制。光刻機加工的最大尺寸,一般是 858mm²,而 Cerebras 和台積電緊密合作,做了一個 46255mm²,1.2T 個晶體管的世界第一大晶元。這也是超摩爾定律的一個突破。

image-20210715100609552

主頻和外頻

主頻=外頻×倍頻繫數

不只是CPU需要一個切換頻率,像GPU、cache、記憶體都需要一個外頻來指導他們的電壓脈衝的切換頻率。CPU的發展比其它設備快,所以沒法統一一個,於是就各自在外頻的基礎上X倍頻繫數。

超頻:認為加大CPU的倍頻繫數,切換變快以後最大的問題是電容在短時間內充電不完整,這樣導致信號失真,所以一般配套需要增加電壓(充電更快),帶來的後果是溫度更高。

睿頻:大多時候多核用不上,如果能智能地關掉無用的核同時把這些關掉的核的電源累加到在用的核上(通過增加倍頻來實現),這樣單核擁有更高的主頻。也就是把其它核的電源指標和發熱指標給了這一個核來使用。

img

多core通訊和NUMA

uma下cpu訪問記憶體

早期core不多統一走北橋匯流排訪問記憶體,對所有core時延統一

x86 UMA

NUMA

如下圖,左右兩邊的是記憶體條,每個NUMA的cpu訪問直接插在自己CPU上的記憶體必然很快,如果訪問插在其它NUMA上的記憶體條還要走QPI,所以要慢很多。

undefined

如上架構是4路CPU,每路之間通過QPI相連,每個CPU內部8core用的是雙Ring Bus相連,Memory Control Hub集成到了Die裡面。一路CPU能連4個SMB,每個SMB有兩個channel,每個channel最多接三個記憶體條(圖中只畫了2個)。

快速通道互聯[1][2](英語:Intel QuickPath Interconnect,縮寫QPI[3][4],是一種由英特爾開發並使用的點對點處理器互聯架構,用來實現CPU之間的互聯。英特爾在2008年開始用QPI取代以往用於至強安騰處理器的前端匯流排FSB),用來實現晶元之間的直接互聯,而不是再通過FSB連接到北橋。Intel於2017年發佈的SkyLake-SP Xeon中,用UPI(UltraPath Interconnect)取代QPI。

Ring Bus

2012年英特爾發佈了業界期待已久的Intel Sandy Bridge架構至強E5-2600系列處理器。該系列處理器採用 Intel Sandy Bridge微架構和32nm工藝,與前一代的至強5600系列相比,具有更多的內核、更大的緩存、更多的記憶體通道,Die內採用的是Ring Bus。

Ring Bus設計簡單,雙環設計可以保證任何兩個ring stop之間距離不超過Ring Stop總數的一半,延遲控制在60ns,帶寬100G以上,但是core越多,ring bus越長性能下降迅速,在12core之後性能下降明顯。

於是採用如下兩個Ring Bus併列,然後再通過雙向匯流排把兩個Ring Bus連起來。

在至強HCC(High Core Count, 核很多版)版本中,又加入了一個ring bus。兩個ring bus各接12個Core,將延遲控制在可控的範圍內。倆個Ring Bus直接用兩個雙向Pipe Line連接,保證通訊順暢。與此同時由於Ring 0中的模塊訪問Ring 1中的模塊延遲明顯高於本Ring,親緣度不同,所以兩個Ring分屬於不同的NUMA(Non-Uniform Memory Access Architecture)node。這點在BIOS設計中要特別註意。

Intel Xeon E5-2600 V4 High Core Count Die

或者這個更清晰點的圖:

03-05-Broadwell_HCC_Architecture

Mesh網路

Intel在Skylake和Knight Landing中引入了新的片內匯流排:Mesh。它是一種2D的Mesh網路:

Intel Skylake SP Mesh Architecture Conceptual Diagram

undefined

一個skylake 28core die的實現:

Skylake SP 28 Core Die Mesh

Mesh網路引入片內匯流排是一個巨大的進步,它有很多優點:

  1. 首先當然是靈活性。新的模塊或者節點在Mesh中增加十分方便,它帶來的延遲不是像ring bus一樣線性增加,而是非線性的。從而可以容納更多的內核。
  2. 設計彈性很好,不需要1.5 ring和2ring的委曲求全。
  3. 雙向mesh網路減小了兩個node之間的延遲。過去兩個node之間通訊,最壞要繞過半個ring。而mesh整體node之間距離大大縮減。
  4. 外部延遲大大縮短

RAM延遲大大縮短:

Broadwell Ring V Skylake Mesh DRAM Example

上圖左邊的是ring bus,從一個ring裡面訪問另一個ring裡面的記憶體控制器。最壞情況下是那條綠線,拐了一個大圈才到達記憶體控制器,需要310個cycle。而在Mesh網路中則路徑縮短很多。

Mesh網路帶來了這麼多好處,那麼缺點有沒有呢?網格化設計帶來複雜性的增加,從而對Die的大小帶來了負面影響

CPU的匯流排為銅薄膜,雖然摩爾定律使單位面積晶體管的密度不斷增加,但是對於連接導線的電阻卻沒有明顯的下降,導線的RC延遲幾乎決定現有CPU性能,因此數據傳輸在CPU的角度來看是個極為沉重的負擔。 雖然2D-mesh為數據提供了更多的遷移路徑減少了數據堵塞,但也同樣為數據一致性帶來更多問題,例如過去ring-bus 結構下對於存在於某個CPU私用緩存的數據爭搶請求只有兩個方向(左和右), 但是在2D-mesh環境下會來自於4個方向(上,下,左,右)

image-20210602104851803

SUB_NUMA Cluster(SNC)

在intel 8269的CPU中,core比較多,core之間通信採取的是mesh架構,實際在BIOS中的NUMA NODE設置上,還有個sub_numa的設置,開啟後,一個Die拆成了兩個node

image-20220418101937564

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 [root@registry Linux]# lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 104 On-line CPU(s) list: 0-103 Thread(s) per core: 2 Core(s) per socket: 26 座: 2 NUMA 節點: 4 廠商 ID: GenuineIntel CPU 系列: 6 型號: 85 型號名稱: Intel(R) Xeon(R) Platinum 8269CY CPU @ 2.50GHz 步進: 7 CPU MHz: 1200.000 CPU max MHz: 2501.0000 CPU min MHz: 1200.0000 BogoMIPS: 5000.00 虛擬化: VT-x L1d 緩存: 32K L1i 緩存: 32K L2 緩存: 1024K L3 緩存: 36608K NUMA 節點0 CPU: 0-3,7-9,13-15,20-22,52-55,59-61,65-67,72-74 NUMA 節點1 CPU: 4-6,10-12,16-19,23-25,56-58,62-64,68-71,75-77 NUMA 節點2 CPU: 26-29,33-35,39-41,46-48,78-81,85-87,91-93,98-100 NUMA 節點3 CPU: 30-32,36-38,42-45,49-51,82-84,88-90,94-97,101-103

不過在8269上開啟sub_numa對性能的影響不是特別大,mlc測試如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 [root@registry Linux]# ./mlc Intel(R) Memory Latency Checker - v3.9 Measuring idle latencies (in ns)... Numa node Numa node 0 1 2 3 0 77.3 81.6 129.8 136.1 1 82.1 78.1 134.1 137.6 2 129.8 135.8 73.5 81.7 3 134.4 137.7 81.7 78.5   Measuring Peak Injection Memory Bandwidths for the system Bandwidths are in MB/sec (1 MB/sec = 1,000,000 Bytes/sec) Using all the threads from each core if Hyper-threading is enabled Using traffic with the following read-write ratios ALL Reads : 232777.7 3:1 Reads-Writes : 216680.7 2:1 Reads-Writes : 213856.4 1:1 Reads-Writes : 197430.7 Stream-triad like: 194310.3   Measuring Memory Bandwidths between nodes within system Bandwidths are in MB/sec (1 MB/sec = 1,000,000 Bytes/sec) Using all the threads from each core if Hyper-threading is enabled Using Read-only traffic type Numa node Numa node 0 1 2 3 0 58908.9 59066.0 50548.0 50479.6 1 59111.3 58882.6 50539.0 50479.3 2 50541.7 50495.8 58950.2 58934.0 3 50526.3 50492.4 59171.9 58701.5   Measuring Loaded Latencies for the system Using all the threads from each core if Hyper-threading is enabled Using Read-only traffic type Inject Latency Bandwidth Delay (ns) MB/sec ========================== 00000 242.78 232249.0 00002 242.90 232248.8 00008 242.63 232226.0 00015 247.47 233159.0 00050 250.26 233489.7 00100 245.88 233253.4 00200 109.72 183071.9 00300 93.95 128676.2 00400 88.51 98678.4 00500 85.15 80026.2 00700 83.74 58136.1 01000 82.16 41372.4 01300 81.59 32184.0 01700 81.14 24896.1 02500 80.80 17248.5 03500 80.32 12571.3 05000 79.58 9060.5 09000 78.27 5411.6 20000 76.09 2911.5   Measuring cache-to-cache transfer latency (in ns)... Local Socket L2->L2 HIT latency 45.0 Local Socket L2->L2 HITM latency 45.1 Remote Socket L2->L2 HITM latency (data address homed in writer socket) Reader Numa Node Writer Numa Node 0 1 2 3 0 - 48.2 107.2 109.2 1 50.6 - 111.2 113.1 2 107.6 109.6 - 48.0 3 111.6 113.5 49.7 - Remote Socket L2->L2 HITM latency (data address homed in reader socket) Reader Numa Node Writer Numa Node 0 1 2 3 0 - 48.6 169.1 175.0 1 46.3 - 167.9 172.1 2 171.4 175.3 - 48.6 3 169.7 173.6 45.1 -   [root@registry Linux]# numactl -H available: 4 nodes (0-3) node 0 cpus: 0 1 2 3 7 8 9 13 14 15 20 21 22 52 53 54 55 59 60 61 65 66 67 72 73 74 node 0 size: 64162 MB node 0 free: 60072 MB node 1 cpus: 4 5 6 10 11 12 16 17 18 19 23 24 25 56 57 58 62 63 64 68 69 70 71 75 76 77 node 1 size: 65536 MB node 1 free: 63575 MB node 2 cpus: 26 27 28 29 33 34 35 39 40 41 46 47 48 78 79 80 81 85 86 87 91 92 93 98 99 100 node 2 size: 65536 MB node 2 free: 63834 MB node 3 cpus: 30 31 32 36 37 38 42 43 44 45 49 50 51 82 83 84 88 89 90 94 95 96 97 101 102 103 node 3 size: 65536 MB node 3 free: 63867 MB node distances: node 0 1 2 3 0: 10 11 21 21 1: 11 10 21 21 2: 21 21 10 11 3: 21 21 11 10 [root@registry Linux]# lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 104 On-line CPU(s) list: 0-103 Thread(s) per core: 2 Core(s) per socket: 26 座: 2 NUMA 節點: 4 廠商 ID: GenuineIntel CPU 系列: 6 型號: 85 型號名稱: Intel(R) Xeon(R) Platinum 8269CY CPU @ 2.50GHz 步進: 7 CPU MHz: 1200.000 CPU max MHz: 2501.0000 CPU min MHz: 1200.0000 BogoMIPS: 5000.00 虛擬化: VT-x L1d 緩存: 32K L1i 緩存: 32K L2 緩存: 1024K L3 緩存: 36608K NUMA 節點0 CPU: 0-3,7-9,13-15,20-22,52-55,59-61,65-67,72-74 NUMA 節點1 CPU: 4-6,10-12,16-19,23-25,56-58,62-64,68-71,75-77 NUMA 節點2 CPU: 26-29,33-35,39-41,46-48,78-81,85-87,91-93,98-100 NUMA 節點3 CPU: 30-32,36-38,42-45,49-51,82-84,88-90,94-97,101-103
  SKL-SP H0 SKL-SP H0 SKL-SP H0 SKL-SP H0
DDR4 speed MT/s (32GB RDIMMs) 2666 2666 2400 2400
Page Policy Adaptive Adaptive Adaptive Adaptive
SNC (sub-NUMA cluster) disabled enabled disabled enabled
Uncore frequency (Mhz) 2400 2400 2400 2400
L1 cache latency (nsec) 1.1 1.1 1.1 1.1
L2 cache latency (nsec) 4.7 4.6 4.7 4.6
L3 cache latency (nsec) 19.5 17.8 19.5 17.8
Local mem latency (nsec) 83 81 85 83
Remote mem latency (nsec) 143 139 145 141

uncore

Uncore“ is a term used by Intel to describe the functions of a microprocessor that are not in the core, but which must be closely connected to the core to achieve high performance.[1] It has been called “system agent“ since the release of the Sandy Bridge microarchitecture.[2]

The core contains the components of the processor involved in executing instructions, including the ALUFPUL1 and L2 cache. Uncore functions include QPI controllers, L3 cachesnoop agent pipeline, on-die memory controller, on-die PCI Express Root Complex, and Thunderbolt controller).[3] Other bus controllers such as SPI and LPC are part of the chipset.[4]

一些Intel CPU NUMA結構參考

Intel Xeon Platinum 8163(Skylake)阿裡雲第四代伺服器採用的CPU,Skylake架構,主頻2.5GHz,計算性能問題。8163這款型號在intel官網上並沒有相關信息,應該是阿裡雲向阿裡雲定製的,與之相近的Intel Xeon Platinum 8168,價格是$5890,約合¥38900元。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 lscpu: Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 96 On-line CPU(s) list: 0-95 Thread(s) per core: 2 Core(s) per socket: 24 Socket(s): 2 NUMA node(s): 4 Vendor ID: GenuineIntel CPU family: 6 Model: 85 Model name: Intel(R) Xeon(R) Platinum 8260 CPU @ 2.40GHz Stepping: 6 CPU MHz: 2400.000 CPU max MHz: 3900.0000 CPU min MHz: 1000.0000 BogoMIPS: 4800.00 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 1024K L3 cache: 36608K NUMA node0 CPU(s): 0-3,7-9,13-15,19,20,48-51,55-57,61-63,67,68 NUMA node1 CPU(s): 4-6,10-12,16-18,21-23,52-54,58-60,64-66,69-71 NUMA node2 CPU(s): 24-27,31-33,37-39,43,44,72-75,79-81,85-87,91,92 NUMA node3 CPU(s): 28-30,34-36,40-42,45-47,76-78,82-84,88-90,93-95   Model: 85 Model name: Intel(R) Xeon(R) Platinum 8268 CPU @ 2.90GHz Stepping: 6 CPU MHz: 3252.490 BogoMIPS: 5800.00 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 1024K L3 cache: 36608K NUMA node0 CPU(s): 0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92 NUMA node1 CPU(s): 1,5,9,13,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77,81,85,89,93 NUMA node2 CPU(s): 2,6,10,14,18,22,26,30,34,38,42,46,50,54,58,62,66,70,74,78,82,86,90,94 NUMA node3 CPU(s): 3,7,11,15,19,23,27,31,35,39,43,47,51,55,59,63,67,71,75,79,83,87,91,95     lscpu: Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 192 On-line CPU(s) list: 0-191 Thread(s) per core: 1 Core(s) per socket: 24 Socket(s): 8 //每個物理CPU 24個物理core,這24個core應該是分佈在2個Die中 NUMA node(s): 16 Vendor ID: GenuineIntel CPU family: 6 Model: 85 Model name: Intel(R) Xeon(R) Platinum 8260 CPU @ 2.40GHz Stepping: 7 CPU MHz: 2400.000 CPU max MHz: 3900.0000 CPU min MHz: 1000.0000 BogoMIPS: 4800.00 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 1024K L3 cache: 36608K NUMA node0 CPU(s): 0-3,7-9,13-15,19,20 NUMA node1 CPU(s): 4-6,10-12,16-18,21-23 NUMA node2 CPU(s): 24-27,31-33,37-39,43,44 NUMA node3 CPU(s): 28-30,34-36,40-42,45-47 NUMA node4 CPU(s): 48-51,55,56,60-62,66-68 NUMA node5 CPU(s): 52-54,57-59,63-65,69-71 NUMA node6 CPU(s): 72-75,79-81,85-87,91,92 NUMA node7 CPU(s): 76-78,82-84,88-90,93-95 NUMA node8 CPU(s): 96-99,103,104,108-110,114-116 NUMA node9 CPU(s): 100-102,105-107,111-113,117-119 NUMA node10 CPU(s): 120-123,127,128,132-134,138-140 NUMA node11 CPU(s): 124-126,129-131,135-137,141-143 NUMA node12 CPU(s): 144-147,151-153,157-159,163,164 NUMA node13 CPU(s): 148-150,154-156,160-162,165-167 NUMA node14 CPU(s): 168-171,175-177,181-183,187,188 NUMA node15 CPU(s): 172-174,178-180,184-186,189-191   //v62 #lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 104 On-line CPU(s) list: 0-103 Thread(s) per core: 2 Core(s) per socket: 26 Socket(s): 2 NUMA node(s): 2 Vendor ID: GenuineIntel CPU family: 6 Model: 85 Model name: Intel(R) Xeon(R) Platinum 8269CY CPU @ 2.50GHz Stepping: 7 CPU MHz: 3200.097 CPU max MHz: 3800.0000 CPU min MHz: 1200.0000 BogoMIPS: 4998.89 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 1024K L3 cache: 36608K NUMA node0 CPU(s): 0-25,52-77 NUMA node1 CPU(s): 26-51,78-103   //2016Intel開始出售Intel Xeon E5-2682 v4。 這是一種基於Broadwell架構的桌面處理器,主要為辦公系統而設計。 它具有16 核心和32 數據流並使用, 售價約為7000人民幣 #lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 64 On-line CPU(s) list: 0-63 Thread(s) per core: 2 Core(s) per socket: 16 Socket(s): 2 NUMA node(s): 2 Vendor ID: GenuineIntel CPU family: 6 Model: 79 Model name: Intel(R) Xeon(R) CPU E5-2682 v4 @ 2.50GHz Stepping: 1 CPU MHz: 2499.902 CPU max MHz: 3000.0000 CPU min MHz: 1200.0000 BogoMIPS: 5000.06 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 40960K NUMA node0 CPU(s): 0-15,32-47 NUMA node1 CPU(s): 16-31,48-63 Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch ida arat epb invpcid_single pln pts dtherm spec_ctrl ibpb_support tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local cat_l3

intel 架構迭代

Intel processor roadmap

2006年90、65納米工藝酷睿core Yonah上市,32位架構,仍然算是奔騰Pro系列;2006推出酷睿處理器是介於NetBurst和Core之間,其實是NetBurst的改版,Core 2是第一個基於Core架構的原生雙核處理器,65nm工藝,使得AMD K8架構優勢全無,直接投入開發原生四核架構K10去了。

2006年7月酷睿2處理器代號為“Conroe”,採用x86-64指令集與65納米雙核心架構。該處理器基於全新的酷睿微架構,雖然時脈大大降低,但在效率方面和性能方面有了重大改進。從這一時期開始,在深度流水線和資源混亂的運行引擎上維持每個周期的高指令(IPC)

2008年的 Nehalem (酷睿i7)是採用 45nm 工藝的新架構,主要優勢來自重新設計的I/O和存儲系統,這些系統具有新的Intel QuickPath Interconnect和集成的記憶體控制器,可支持三通道的DDR3記憶體。引入片內4-12MB的L3 Cache;重新加入超線程;分支預測分級;取消北橋,IMC(集成記憶體控制器)從北橋挪到片內

2009年的 Westmere 升級到 32nm;退出第一代I5/I3,Xeon 系列也開始推出第一代E命名的E7-x8xx系列。

2010年的 Lynnfield/Clarkdale 基於 45nm/32nm 工藝的新架構,第一代智能酷睿處理器;

2011年的 Sandy Bridge ,基於 32nm 工藝的新架構,第二代智能酷睿處理器,增加AVX指令集擴展, 對虛擬化提供更好支持;實現了GPU和CPU的融合

2012年的 IVY Bridge,是 Sandy Bridge 的 22nm 升級版,第三代智能酷睿處理器,Tick級改進;

2013年的 Haswell ,基於 22nm 工藝的新架構,第四代智能酷睿處理器,Tock級改進;

2014年的 Broadwell,是 Haswell 的 14nm 升級版,第五代智能酷睿處理器;

2015年則推出 SkyLake,基於 14nm 工藝的新架構, Tock級改進,Ring-Bus改成了Mesh架構,第6代Core i系列,8163就是這款;socket之間UPI互聯,記憶體頻率通道增強。不再使用Xeon命名,而是改用Bronze/Silver/Gold/Platinum 4個系列。青銅和白銀系列支持雙路(原本的 E5-24xx、E7-28xx 系列),黃金系列支持四路(原本的 E5-46xx、E7-48xx 系列),白金系列支持八路(原本的 E7-88xx 系列);

2019年的Cascade Lake(X2XX命名)也是Skylake的優化,是Intel首個支持基於3D XPoint的記憶體模塊的微體繫結構。同年也正式宣佈了十代酷睿處理器,即i9-10900k,還是Skylake微內核不變。

2020年的10nm Ice Lake自家工廠無能,改由台積電加工。

Core 架構代號是 Yonah,把 NetBurst 做深了的流水線級數又砍下來了,主頻雖然降下來了(而且即使後來工藝提升到 45nm 之後也沒有超過 NetBurst 的水平),但是卻提高了整個流水線中的資源利用率,所以性能還是提升了;把奔騰 4 上曾經用過的超線程也砍掉了;對各個部分進行了強化,雙核共用 L2 cache 等等。

從 Core 架構開始是真的走向多核了,就不再是以前 “膠水粘的” 偽雙核了,這時候已經有最高 4 核的處理器設計了。

Core 從 65nm 改到 45nm 之後,基於 45nm 又推出了新一代架構叫 Nehalem,新架構Nehalem採用 Intel QPI 來代替原來的前端匯流排PCIE 和 DMI 控制器直接做到片內了,不再需要北橋。

2006年Intel也提出了Tick-Tock架構戰略。Tick年改進位程工藝,微架構基本不做大改,重點在把晶體管的工藝水平往上提升;Tock年改進微架構設計,保持工藝水平不變,重點在用更複雜、更高級的架構設計。然後就是一代 Tick 再一代 Tock交替演進。

從2006年酷睿架構開始,基本是摁著AMD在地上摩擦,直到2017年的AMD Zen殺回來,性能暴增。img

Sandy Bridge 引入核間的ring bus

感覺Broadwell前面這幾代都是在優化cache、通信;接下來的Broadwell和SkyLake就開始改進不大了,瘋狂擠牙膏(唯一比較大的改進就是Ring bus到Mesh

image-20210602154509596

命名規律

Intel E3、E5、E7代表了3個不同檔次的至強CPU。EX是按性能和應用場景分的,以前是E3 E5 E7,E3核最少,輕負載應用,E5 核多均衡型,E7是超高性能,核最多。Xeon E5是針對高端工作站及伺服器的處理器系列,此系列每年更新,不過架構落後Xeon E3一代。從skylake開始,不再使用EX(E3/E5/E7)了,而是銅、銀、金、鉑金四種組合。

V2 是ivy bridge,V3 是 haswell, V4 是broadwell,不帶VX的是sandy bridge。所以2682是boradwell系列CPU。
然後到了4114,就是Silver,8186就是Platinum,81是skylake,82是cscadelake,再下一代是83。

cascade lake naming scheme.svg

不同的架構下的參數

image.png<

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我們來看看如何通過幾個步驟快速的實現一個功能相對齊全的CLI程式。和做飯一樣,能夠快速獲得成就感的方式是找半成品直接下鍋炒一盤 ...
  • 重定位表(Relocation Table)是Windows PE可執行文件中的一部分,主要記錄了與地址相關的信息,它在程式載入和運行時被用來修改程式代碼中的地址的值,因為程式在不同的記憶體地址中載入時,程式中使用到的地址也會受到影響,因此需要重定位表這個數據結構來完成這些地址值的修正。當程式需要被加... ...
  • 本教程適用於idea所有版本,並支持目前最新的2023.2.1版本。直接激活到2099年,支持windows、mac、linux。本文先講windows,mac和linux的跟win的激活方式大差不差。如果已經有了idea,想激活到2099的直接看步驟5 1.先去idea官網下載,官網下載地址:ht ...
  • 支持.Net Core(2.0及以上)與.Net Framework(4.5及以上) 可以部署在Docker, Windows, Linux, Mac。 分散式唯一Id,顧名思義,是指在全世界任何一臺電腦上都不會重覆的唯一Id。 在單機/單伺服器/單資料庫的小型應用中,不需要用到這類東西。但在高並 ...
  • # 前言 ### 在上一篇文章[【基於ASP.NET ZERO,開發SaaS版供應鏈管理系統】](https://www.cnblogs.com/freedyang/p/17679280.html)中有提到對Webhook功能的擴展改造,本文詳細介紹一下具體過程。 ### Webhook功能操作說明 ...
  • 一說tp大多數人想到的是PHP使用tp,但今天不說PHP 說說c#使用tp 由於tp比較久遠 網上的資料又是少之又少 接下來說說tp的一些基本用法 1.首先就是數據綁定了 <%tp:foreach collection="{$model.Items}" var="m"%> <td>{$m.name} ...
  • [toc] # Linux運維工程師面試題(9) > 祝各位小伙伴們早日找到自己心儀的工作。 > 持續學習才不會被淘汰。 > 地球不爆炸,我們不放假。 > 機會總是留給有有準備的人的。 > 加油,打工人! ## 1 pod 的生命周期 第一階段: - Pending:正在創建 Pod 但是 Pod ...
  • 下麵的系列文章記錄瞭如何使用一塊linux開發扳和一塊OLED屏幕實現視頻的播放: 1) [項目介紹](https://www.cnblogs.com/kfggww/p/17672932.html) 2) [為OLED屏幕開發I2C驅動](https://www.cnblogs.com/kfggww ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...