高性能服務系列【二】CPU和內存

現代計算機的系統架構十分復雜。在服務器中,雙路處理器已經十分常見。最近Arm處理器實現雙路共384核心,要知道目前Linux內核最高只支持256核,這就有點尷尬。

多路處理器將越來越普遍,對性能的影響和傳統架構有不小的差別,這個議題放到后面再討論。首先需要厘清幾個概念,在計算機的主板上,有幾個CPU插座,就是掛載幾顆CPU,通常是Socket插槽。還有H插槽式的,主要在筆記本等小型設備。而每顆CPU可以集成很多核,又叫Core,這里Core說的是物理Core。每個物理Core又能夠支持兩個邏輯核。所以和CPU相關的概念至少有三個:1、處理器,是指插在主板插槽那個芯片。雙路處理器是指兩顆芯片。2、物理核,是在芯片中真正集成的,光刻機實打實刻出來。3、邏輯核,通過超線程技術,在物理核基礎上模擬出來。這三個概念會在下面內容中,會有嚴格的區分。在操作系統命令中,主要看到的是邏輯核,不太關注到物理核和多路處理器。

雖然傳統架構相對簡單,但和現代架構要解決的問題卻是一樣的。我們以傳統的單處理器為例,主板上搭載北橋芯片和南橋芯片。北橋芯片主要負責高速連接,通過內存控制器,連接內存和顯卡。CPU通過前端總線FSB和北橋芯片讀寫內存和顯卡。南橋芯片主要負責低速連接,如I/O接口,包括網卡和磁盤,還有鍵盤鼠標等。這里要畫個重點,北橋芯片和南橋芯片的作用,這個很容易被忽略。

先聲明下,邏輯核在高速緩存上如何共享,我沒有專門研究過,可能會有所不同。在物理核上,主要有L1和L2高速緩存,L3高速緩存目前是片內共享的,即整個CPU內部共享的。更早之前,L2和L3是集成在主板上。L1高速緩存被拆分成L1d和L1i,即數據緩存和指令緩存。

說完前面的基礎資料后,我們來看下一個指令執行時的延遲是什么情況。

1、如果數據在寄存器中,1個cycle。

2、如果數據在高速緩存中,3-20個cycle。

3、如果數據在主存中,則需要通過FSB,向北橋芯片的內存控制器發起讀取指令,240個cycle。

上述的3個值不是精準的值,但數量級差不多。

說完以上內容,就很容易理解幾個場景下,這些硬件如何影響到性能,以及影響程度有多大。

1、等待I/O,通過低速南橋芯片讀寫數據,對延遲影響無需贅述。

2、線程切換,線程的上下文被回寫到主存,再次被調度時,至少要面對幾個性能懲罰,緩存缺失,邏輯核漂移。

對于這個問題的解決,多數會采用CPU親和的解決方案。這里有個坑,并不是相鄰的邏輯核就是在一起。

3、原子操作和內存屏障,這個問題和緩存一致性協議是一起的。多核在同時讀寫一塊內存時,都要考慮這個問題。

但我們在前面說過,L3緩存是片內共享,所以在單路處理器系統中,基本在L3緩存就解決了。包括目前由disruptor引起很火的偽共享問題,并沒有所說的,對性能有那么大的影響。

4、緩存行和巨頁問題,這是作為基礎知識就好了。主要體現在內存管理這塊。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/715410.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/715410.shtml
英文地址,請注明出處:http://en.pswp.cn/news/715410.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL中json類型的字段

有些很復雜的信息,我們一般會用擴展字段傳一個json串,字段一般用text類型存在數據庫。mysql5.7以后支持json類型的字段,還可以進行sql查詢與修改json內的某個字段的能力。 1.json字段定義 ip_info json DEFAULT NULL COMMENT ip信息, 2.按…

GO基本類型一些記錄

基本類型一些記錄 1.直接粘貼文本進println(" ")2.中文字符串長度別用len( )3.byte本質是uint8 1.直接粘貼文本進println(" ") GoLand會自動補充轉義符 2.中文字符串長度別用len( ) 用相應編碼庫的方法,一般utf8即可 utf8.RuneCountInStrin…

PySide6實現word轉化pdf

目錄 一:實現思路 二:實現代碼 三:完整代碼和界面 一:實現思路 利用PySide6創建兩個按鈕和一個顯示區域,一個選擇文件按鈕,一個轉化按鈕和信息展示,操作文件按鈕選擇一個待轉化的word文檔。并且展示文件路徑到信息展示區,操作轉化按鈕,讀取選擇的文件轉化為pdf。并…

ThreadLocal介紹

文章目錄 ThreadLocal源碼分析:set方法get方法remove方法 ThreadLocal內存泄漏問題 ThreadLocal ThreadLocal提供了線程局部變量,每個線程都可以通過set和get方法來對這個變量進行操作,但不會和其他線程的局部變量沖突,實現了線程…

Doris實戰——拈花云科的數據中臺實踐

目錄 前言 一、業務背景 二、數據中臺1.0—Lambda 三、新架構的設計目標 四、數據中臺2.0—Apache Doris 4.1 新架構數據流轉 4.2 新架構收益 五、新架構的落地實踐 5.1 模型選擇 5.1.1 Unique模型 5.1.2 Aggregate模型 5.2 資源管理 5.3 批量建表 5.4 計算實現…

Stable Diffusion 模型分享:Realistic Stock Photo(真實的庫存照片)

本文收錄于《AI繪畫從入門到精通》專欄,專欄總目錄:點這里。 文章目錄 模型介紹生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下載地址 模型介紹 條目內容類型大模型基礎模型SDXL 1.0來源CIVITAI作者PromptSharingSamaritan文件名稱reali…

原生GO開發的博客系統

Go博客實戰教程,是一個練手級項目教程,使用原生Go開發,未使用任何框架。 如何使用原生Go開發一個web項目 循序漸進,掌握編程思維和思路 初步具有工程思維,能適應一般的開發工作 1. 搭建項目 package mainimport (&q…

Vue3_2024_1天【Vue3創建和響應式,對比Vue2】

前言: Vue3對比Vue2版本,它在性能、功能、易用性和可維護性方面都有顯著的提升和改進。 性能優化:模板編譯器的優化、對Proxy的支持以及使用了更加高效的Virtual DOM算法等。這使得Vue3的打包大小減少了41%,初次渲染提速55%&#…

【MATLAB源碼-第153期】基于matlab的OFDM系統插入導頻和訓練符號兩種信道估計方式誤碼率對比仿真。

操作環境: MATLAB 2022a 1、算法描述 OFDM(Orthogonal Frequency Division Multiplexing,正交頻分復用)是一種高效的無線信號傳輸技術,廣泛應用于現代通信系統,如Wi-Fi、LTE和5G。OFDM通過將寬帶信道劃分…

使用docker方式測試部署django項目(客戶催)

需求 1:已有django項目–weidanyewu 2:希望在服務器上測試部署–客戶催 3:沒完善django的啟動 4:使用臨時數據庫進行演示 5:使用python3.10版本鏡像 6:展示端口80 7:后臺執行django程序 8&#…

【C語言】熟悉文件順序讀寫函數

前言 本篇詳細介紹了 文件順序讀寫常用函數,快來看看吧~ 歡迎關注個人主頁:逸狼 創造不易,可以點點贊嗎~ 如有錯誤,歡迎指出~ 目錄 前言 ?編輯 文件順序讀寫函數 fgetc函數 示例 fputc函數 逐個字符寫入 寫入26個字母 文…

手寫模擬器,解放雙手!效果炸裂的生產工具

手寫模擬器是一款基于Handright的仿手寫圖片生成軟件,可以讓你的電腦和手機也能寫出漂亮的手寫字,你只需要輸入你想要寫的內容,選擇你喜歡的字體和背景,就可以生成一張高仿真的手寫圖片,用于各種場合,比如做…

uniapp中canvas的基礎使用

canvas簡介 canvas是uniapp中提供的一個組件,用于生成自定義的圖形界面。通過canvas,我們可以通過JavaScript代碼在頁面上繪制各種圖形和圖像。 使用canvas 在頁面中添加canvas 首先需要在頁面的template中添加一個canvas組件: <template><view><canvas ca…

linux:iostat 用法詳解

文章目錄 描述語法參數例子 描述 iostat 是一個在類Unix操作系統中常用的系統監控工具&#xff0c;尤其是Linux系統中&#xff0c;它主要用于收集和報告中央處理器(CPU)使用情況以及磁盤輸入/輸出(I/O)統計數據。以下是 iostat 命令的基本用法及其參數詳解&#xff1a; 語法 …

代碼隨想錄三刷 day11 | 棧與隊列之 20. 有效的括號 1047. 刪除字符串中的所有相鄰重復項 150. 逆波蘭表達式求值

三刷day11 20. 有效的括號1047. 刪除字符串中的所有相鄰重復項150. 逆波蘭表達式求值 20. 有效的括號 題目鏈接 解題思路&#xff1a; 有三種不匹配的情況&#xff1a; 第一種情況&#xff0c;字符串里左方向的括號多余了 。 第二種情況&#xff0c;括號沒有多余&#xff0c;…

[伴學筆記]01-操作系統概述 [南京大學2024操作系統]

文章目錄 前言jyy:01-操作系統概述 [南京大學2024操作系統]為什么要學操作系統?學習操作系統能得到什么? 什么是操作系統?想要明白什么是操作系統:時間線:1940s1950s-1960s1960-1970s年代. 信息來源: 前言 督促自己,同時分享所得,閱讀完本篇大約需要10分鐘,希望為朋友的技術…

編碼規則轉換

思考&#xff1a; 如何將一個機內碼轉換為區內碼&#xff1f; 只要將機內碼減去 A0A0 就可以啦 如果只讓我們用加法器來解決呢&#xff1f; 注意我們的數據占用了 32 位&#xff0c;如果想用補碼進行減法運算的話&#xff0c;符號位怎么辦&#xff1f;&#xff1f;&#xf…

《探索數據結構之美:如何高效實現哈希表》

摘要&#xff1a;哈希表是一種基于鍵值對的數據結構&#xff0c;它通過哈希函數將鍵映射到表中一個位置&#xff0c;以實現快速的插入、刪除和查找操作。在本期播客中&#xff0c;我們將深入剖析哈希表的數據結構&#xff0c;分享如何用Python語言實現一個哈希表項目。此外&…

【深度學習筆記】計算機視覺——微調

微調 前面的一些章節介紹了如何在只有6萬張圖像的Fashion-MNIST訓練數據集上訓練模型。 我們還描述了學術界當下使用最廣泛的大規模圖像數據集ImageNet&#xff0c;它有超過1000萬的圖像和1000類的物體。 然而&#xff0c;我們平常接觸到的數據集的規模通常在這兩者之間。 假…

【計算機是怎么跑起來的】軟件,體驗一次手工匯編

【計算機是怎么跑起來的】軟件,體驗一次手工匯編 二進制機器語言匯編語言操作碼操作數寄存器內存地址和I/O地址參考書:計算機是怎么跑起來的 第三章外設在路上。。。先整理一下本書涉及的理論知識,反正后面做視頻也要重寫QAQ 程序的作用是驅動硬件工作,所以在編寫程序之前必…