<var id="nn1zj"></var><cite id="nn1zj"><span id="nn1zj"><menuitem id="nn1zj"></menuitem></span></cite>
<ins id="nn1zj"><noframes id="nn1zj"><var id="nn1zj"></var>
<menuitem id="nn1zj"></menuitem>
<ins id="nn1zj"><noframes id="nn1zj"><menuitem id="nn1zj"><span id="nn1zj"><thead id="nn1zj"></thead></span></menuitem>
<cite id="nn1zj"><span id="nn1zj"></span></cite>
<cite id="nn1zj"></cite>
<cite id="nn1zj"></cite>
<menuitem id="nn1zj"><span id="nn1zj"><menuitem id="nn1zj"></menuitem></span></menuitem>
<cite id="nn1zj"><video id="nn1zj"><listing id="nn1zj"></listing></video></cite>
還未設置個性簽名
成為VIP會員 享9項特權: 開通會員

完善資料讓更多小伙伴認識你,還能領取20積分哦, 立即完善>

3天內不再提示

TiFlash整體模塊分層及DeltaTree 引擎優化方案

要長高 ? 來源:pingcap ? 作者:黃俊深 ? 2022-06-22 14:49 ? 次閱讀

作者:黃俊深,PingCAP TiFlash 資深研發工程師
TiFlash 是 TiDB 的分析引擎,是 TiDB HTAP 形態的關鍵組件。TiFlash 源碼閱讀系列文章將從源碼層面介紹 TiFlash 的內部實現。本文為系列文章的第一篇,將對 TiDB HTAP 的整體形態進行介紹,并詳細解析存儲層 DeltaTree 引擎進行優化的設計思路以及其子模塊。

今天的主角 -- TiFlash 是 TiDB HTAP 形態的關鍵組件,它是 TiKV 的列存擴展,通過 Raft Learner 協議異步復制,但提供與 TiKV 一樣的快照隔離支持。我們用這個架構解決了 HTAP 場景的隔離性以及列存同步的問題。自 5.0 引入 MPP 后,也進一步增強了 TiDB 在實時分析場景下的計算加速能力。

上圖描述了 TiFlash 整體邏輯模塊的劃分,通過 Raft Learner Proxy 接入到 TiDB 的 multi-raft 體系中。我們可以對照著 TiKV 來看:計算層的 MPP 能夠在 TiFlash 之間做數據交換,擁有更強的分析計算能力;作為列存引擎,我們有一個 schema 的模塊負責與 TiDB 的表結構進行同步,將 TiKV 同步過來的數據轉換為列的形式,并寫入到列存引擎中;最下面的一塊,是稍后會介紹的列存引擎,我們將它命名為 DeltaTree 引擎。

有持續關注 TiDB 的用戶可能之前閱讀過 《TiDB 的列式存儲引擎是如何實現的?》 這篇文章,近期隨著 TiFlash 開源 ,也有新的用戶想更多地了解 TiFlash 的內部實現。這篇文章會從更接近代碼層面,來介紹 TiFlash 內部實現的一些細節。

這里是 TiFlash 內一些重要的模塊劃分以及它們對應在代碼中的位置。在今天的分享和后續的系列里,會逐漸對里面的模塊開展介紹。

# TiFlash 模塊對應的代碼位置

dbms/

└── src

    ├── AggregateFunctions, Functions, DataStreams # 函數、算子

    ├── DataTypes, Columns, Core # 類型、列、Block

    ├── IO, Common, Encryption   # IO、輔助類

    ├── Debug     # TiFlash Debug 輔助函數

    ├── Flash     # Coprocessor、MPP 邏輯

    ├── Server    # 程序啟動入口

    ├── Storages

    │   ├── IStorage.h           # Storage 抽象

    │   ├── StorageDeltaMerge.h  # DeltaTree 入口

    │   ├── DeltaMerge           # DeltaTree 內部各個組件

    │   ├── Page                 # PageStorage

    │   └── Transaction          # Raft 接入、Scehma 同步等。 待重構 https://github.com/pingcap/tiflash/issues/4646

    └── TestUtils # Unittest 輔助類

TiFlash 中的一些基本元素抽象

TiFlash 這款引擎的代碼是 18 年從 ClickHouse fork。ClickHouse 為 TiFlash 提供了一套性能十分強勁的向量化執行引擎,我們將其當做 TiFlash 的單機的計算引擎使用。在此基礎上,我們增加了針對 TiDB 前端的對接,MySQL 兼容,Raft 協議和集群模式,實時更新列存引擎,MPP 架構等等。雖然和原本的 Clickhouse 已經完全不是一回事,但代碼自然地 TiFlash 代碼繼承自 ClickHouse,也沿用著 CH 的一些抽象。比如:

IColumn 代表內存里面以列方式組織的數據。IDataType 是數據類型的抽象。Block 則是由多個 IColumn 組成的數據塊,它是執行過程中,數據處理的基本單位。

在執行過程中,Block 會被組織為流的形式,以 BlockInputStream 的方式,從存儲層 “流入” 計算層。而 BlockOutputStream,則一般從執行引擎往存儲層或其他節點 “寫出” 數據。

IStorage 則是對存儲層的抽象,定義了數據寫入、讀取、DDL 操作、表鎖等基本操作。

DeltaTree 引擎

雖然 TiFlash 基本沿用了 CH 的向量化計算引擎,但是存儲層最終沒有沿用 CH 的 MergeTree 引擎,而是重新研發了一套更適合 HTAP 場景的列存引擎,我們稱為 DeltaTree,對應代碼中的 " StorageDeltaMerge "。

DeltaTree 引擎解決的是什么問題

A. 原生支持高頻率數據寫入,適合對接 TP 系統,更好地支持 HTAP 場景下的分析工作。

B. 支持列存實時更新的前提下更好的讀性能。它的設計目標是優先考慮 Scan 讀性能,相對于 CH 原生的 MergeTree 可能部分犧牲寫性能

C. 符合 TiDB 的事務模型,支持 MVCC 過濾

D. 數據被分片管理,可以更方便的提供一些列存特性,從而更好的支持分析場景,比如支持 rough set index

poYBAGKyuhmAAUYgAACzVreZnqg324.png

為什么我們說 DeltaTree 引擎具備上面特性呢

回答這個疑問之前,我們先回顧下 CH 原生的 MergeTree 引擎存在什么問題。MergeTree 引擎可以理解為經典的 LSM Tree(Log Structured Merge Tree)的一種列存實現,它的每個 "part 文件夾" 對應 SSTFile(Sorted Strings Table File)。最開始,MergeTree 引擎是沒有 WAL 的,每次寫入,即使只有 1 條數據,也會將數據需要生成一個 part。因此如果使用 MergeTree 引擎承接高頻寫入的數據,磁盤上會形成大量碎片的文件。這個時候,MergeTree 引擎的寫入性能和讀取性能都會出現嚴重的波動。這個問題直到 2020 年,CH 給 MergeTree 引擎引入了 WAL,才部分緩解這個壓力 ClickHouse/8290 。

那么是不是有了 WAL,MergeTree 引擎就可以很好地承載 TiDB 的數據了呢?還不足夠。因為 TiDB 是一個通過 MVCC 實現了 Snapshot Isolation 級別事務的關系型數據庫。這就決定了 TiFlash 承載的負載會有比較多的數據更新操作,而承載的讀請求,都會需要通過 MVCC 版本過濾,篩選出需要讀的數據。而以 LSM Tree 形式組織數據的話,在處理 Scan 操作的時候,會需要從 L0 的所有文件,以及其他層中 與查詢的 key-range 有 overlap 的所有文件,以堆排序的形式合并、過濾數據。在合并數據的這個入堆、出堆的過程中, CPU 的分支經常會 miss,cache 命中也會很低。測試結果表明,在處理 Scan 請求的時候,大量的 CPU 都消耗在這個堆排序的過程中。

另外,采用 LSM Tree 結構,對于過期數據的清理,通常在 level compaction 的過程中,才能被清理掉(即 Lk-1 層與 Lk 層 overlap 的文件進行 compaction)。而 level compaction 的過程造成的寫放大會比較嚴重。當后臺 compaction 流量比較大的時候,會影響到前臺的寫入和數據讀取的性能,造成性能不穩定。

MergeTree 引擎上面的三點:寫入碎片、Scan 時 CPU cache miss 嚴重、以及清理過期數據時的 compaction ,造成基于 MergeTree 引擎構建的帶事務的存儲引擎,在有數據更新的 HTAP 場景下,讀、寫性能都會有較大的波動。

DeltaTree 的解決思路以及模塊劃分

poYBAGKyui6AKLU7AAD1e0FQw5c290.png

在看實現之前,我們來看看 DeltaTree 的療效如何。上圖是 Delta Tree 與基于 MergeTree 實現的帶事務支持的列存引擎在不同數據量(Tuple number)以及不同更新 TPS (Transactions per second) 下的讀 (Scan) 耗時對比。可以看到 DeltaTree 在這個場景下的讀性能基本能達到后者的兩倍。

pYYBAGKyukGANwTVAAD9t2-KZNk246.png

那么 DeltaTree 具體面對上述問題,是如何設計的呢?

首先,我們在表內,把數據按照 handle 列的 key-range,橫向分割進行數據管理,每個分片稱為 Segment。這樣在 compaction 的時候,不同 Segment 間的數據就獨立地進行數據整理,能夠減少寫放大。這方面與 PebblesDB[1] 的思路有點類似。

另外,在每個 Segment 中,我們采用了 delta-stable 的形式,即最新的修改數據寫入的時候,被組織在一個寫優化的結構的末尾( DeltaValueSpace.h ),定期被合并到一個為讀優化的結構中( StableValueSpace.h )。Stable Layer 存放相對老的,數據量較大的數據,它不能被修改,只能被 replace。當 Delta Layer 寫滿之后,與 Stable Layer 做一次 Merge(這個動作稱為 Delta Merge),從而得到新的 Stable Layer,并優化讀性能。很多支持更新的列存,都是采用類似 delta-stable 這種形式來組織數據,比如 Apache Kudu[2]。有興趣的讀者還可以看看《Fast scans on key-value stores》[3] 的論文,其中對于如何組織數據,MVCC 數據的組織、對過期數據 GC 等方面的優劣取舍都做了分析,最終作者也是選擇了 delta-main 加列存這樣的形式。

Delta Layer 的數據,我們通過一個 PageStorage 的結構來存儲數據,Stable Layer 我們主要通過 DTFile 來存儲數據、通過 PageStorage 來管理生命周期。另外還有 Segment、DeltaValueSpace、StableValueSpace 的元信息,我們也是通過 PageStorage 來存儲。上面三者分別對應 DeltaTree 中 StoragePool 這一數據結構的 log, data 以及 meta。

PageStorage 模塊

上面提到, Delta Layer 的數據和 DeltaTree 存儲引擎的一些元數據,這類較小的數據塊,在序列化為字節串之后,作為 "Page" 寫入到 PageStorage 來進行存儲。PageStorage 是 TiFlash 中的一個存儲的抽象組件,類似對象存儲。它主要設計面向的場景是 Delta Layer 的高頻讀取:比如在 snapshot 上,以 PageID (或多個 PageID) 做點查的場景;以及相對于 Stable Layer 較高頻的寫入。PageStorage 層的 "Page" 數據塊典型大小為數 KiB~MiB。

PageStorage 是一個比較復雜的組件,今天先不介紹它內部的構造。讀者可以先理解 PageStorage 至少提供以下 3 點功能:

提供 WriteBatch 接口,保證寫入 WriteBatch 的原子性

提供 Snapshot 功能,可以獲取一個不阻塞寫的只讀 view

提供讀取 Page 內部分數據的能力(只讀選擇的列數據)

讀索引 DeltaTree Index

前面提到,在 LSM-Tree 上做多路歸并比較耗 CPU,那我們是否可以避免每次讀都要重新做一次呢?答案是可以的。事實上有一些內存數據庫已經實踐了類似的思路。具體的思路是,第一次 Scan 完成后,我們把多路歸并算法產生的信息想辦法存下來,從而使下一次 Scan 可以重復利用。這份可以被重復利用的信息我們稱為 Delta Index,它由一棵 B+ Tree 實現。利用 Delta Index,把 Delta Layer 和 Stable Layer 合并到一起,輸出一個排好序的 Stream。Delta Index 幫助我們把 CPU bound、而且存在很多 cache miss 的 merge 操作,轉化為大部分情況下一些連續內存塊的 copy 操作,進而優化 Scan 的性能。

Rough Set Index

很多數據庫都會在數據塊上加統計信息,以便查詢時可以過濾數據塊,減少不必要的 IO 操作。有的將這個輔助的結構稱為 KnowledgeNode、有的叫 ZoneMaps。TiFlash 參考了 InfoBright [4] 的開源實現,采用了 Rough Set Index 這個名字,中文叫粗粒度索引。

TiFlash 給 SelectQueryInfo 結構中添加了一個 MvccQueryInfo 的結構,里面會帶上查詢的 key-ranges 信息。DeltaTree 在處理的時候,首先會根據 key-ranges 做 segment 級別的過濾。另外,也會從 DAGRequest 中將查詢的 Filter 轉化為 RSFilter 的結構,并且在讀取數據時,利用 RSFilter,做 ColumnFile 中數據塊級別的過濾。

在 TiFlash 內做 Rough Set Filter,跟一般的 AP 數據庫不同點,主要在還需要考慮粗粒度索引對 MVCC 正確性的影響。比如表有三列 a、b 以及寫入的版本 tso,其中 a 是主鍵。在 t0 時刻寫入了一行 Insert (x, 100, t0),它在 Stable VS 的數據塊中。在 t1 時刻寫入了一個刪除標記 Delete(x, 0, t1),這個標記存在 Delta Layer 中。這時候來一個查詢 select * from T where b = 100,很顯然如果我們在 Stable Layer 和 Delta Layer 中都做索引過濾,那么 Stable 的數據塊可以被選中,而 Delta 的數據塊被過濾掉。這時候就會造成 (x, 100, t0) 這一行被錯誤地返回給上層,因為它的刪除標記被我們丟棄了。

因此 TiFlash Delta layer 的數據塊,只會應用 handle 列的索引。非 handle 列上的 Rough Set Index 主要應用于 Stable 數據塊的過濾。一般情況下 Stable 數據量占 90%+,因此整體的過濾效果還不錯。

poYBAGKyunqAaVdwAAD2yhNk_9s307.png

代碼模塊

下面是 DeltaTree 引擎內各個模塊對應的代碼位置,讀者可以回憶一下前文,它們分別對應前文的哪一部分 ;)

# DeltaTree 引擎內各模塊對應的代碼位置

dbms/src/Storages/

├── Page                   # PageStorage

└── DeltaMerge

    ├── DeltaMergeStore.h  # DeltaTree 引擎的定義

    ├── Segment.h          # Segment

    ├── StableValueSpace.h # Stable Layer

    ├── Delta              # Delta Layer

    ├── DeltaMerge.h       # Stable 與 Delta merge 過程

    ├── File               # Stable Layer 的存儲格式

    ├── DeltaTree.h, DeltaIndex.h          # Delta Index 

    ├── Index, Filter, FilterParser        # Rough Set Filter

    └── DMVersionFilterBlockInputStream.h  # MVCC Filtering

小結

本篇文章主要介紹了 TiFlash 整體的模塊分層,以及在 TiDB 的 HTAP 場景下,存儲層 DeltaTree 引擎如何進行優化的思路。簡單介紹了 DeltaTree 內組件的構成和作用,但是略去了一些細節,比如 PageStorage 的內部實現,DeltaIndex 如何構建、應對更新,TiFlash 是如何接入 multi-Raft 等問題。

  • cpu
    cpu
    +關注

    關注

    68

    文章

    6935

    瀏覽量

    195255
  • 存儲技術
    +關注

    關注

    4

    文章

    635

    瀏覽量

    43574
收藏 人收藏

    評論

    相關推薦

    通過FB126診斷PROFINET IO系統

    打開Step7,點擊“打開”按鈕,選擇“Libraries”頁面,點擊“PNIODiag”打開。
    的頭像 機器人及PLC自動化應用 發表于 07-30 14:27 ? 98次 閱讀

    基于飛騰 CPU產品已在眾多行業實現場景化應用

    7月,陜西交通控股集團有限公司黨組成員、副總經理舒森一行蒞臨飛騰公司長沙子公司調研考察,來自山西交控....
    的頭像 Phytium飛騰 發表于 07-30 10:24 ? 87次 閱讀

    新一代數字辦公安全創新方案發布

    2022年7月29日,《新一代數字辦公安全創新方案》于“2022全球數字經濟大會基礎軟件創新發展論壇....
    的頭像 龍芯中科 發表于 07-30 09:32 ? 86次 閱讀

    酷睿i3-12100F VS.銳龍5 5500性能評測

    銳龍5 5500實際上是筆記本端的Cezanne APU去掉了核顯的產物,6核心12線程,加速頻率和....
    發表于 07-29 11:56 ? 141次 閱讀

    AXI學習路線,從握手協議開始

    對 AXI master的全面討論變得困難。我還沒有(還)想出如何簡化材料來寫一篇關于如何構建通用 ....
    發表于 07-29 11:27 ? 78次 閱讀

    分享的幾個小的代碼片段

    應用可以定時獲取CPU的溫度,比如程序異常崩潰時,我們可能需要分析多方面原因,CPU溫度就是其中之一....
    的頭像 city_prolove 發表于 07-29 09:25 ? 65次 閱讀

    Linux驅動開發之IO模型介紹

    在Linux驅動開發中,應用程序通過循環讀取或者中斷的方式都會使得CPU的占用率很高。本文介紹五種I....
    發表于 07-29 09:03 ? 102次 閱讀

    朗科科技榮膺中國科技創新品牌500強,品牌價值近百億

    為全面落實黨中央、國務院關于品牌發展的決策部署,持續發揮品牌引領作用,全面提升中國科技創新品牌的國際....
    的頭像 科技見聞網 發表于 07-28 11:01 ? 158次 閱讀
    朗科科技榮膺中國科技創新品牌500強,品牌價值近百億

    S7-1200 MODBUS TCP通信多請求處理

    方法一:如果 TCP 連接充裕,可以建立多個不同的連接發送請求,即每個請求使用一個獨立的連接,調用獨....
    的頭像 機器人及PLC自動化應用 發表于 07-28 10:44 ? 109次 閱讀

    如何用繼電器構建計算機的CPU

    這個迷你系列文章描述了如何用繼電器構建計算機的 CPU(中央處理單元)。
    的頭像 發表于 07-28 10:41 ? 146次 閱讀
    如何用繼電器構建計算機的CPU

    S7-1200F CPU和S7-1500F CPU實現安全相關控制器與控制器通訊的配置例程

    通過PN/PN Coupler 實現控制器和控制器的F-CPU之間的安全相關通信,使用F應用程序塊S....
    的頭像 機器人及PLC自動化應用 發表于 07-28 10:27 ? 160次 閱讀

    飛騰新一代收費系統正式發布 賦能智慧交通數字化發展

    7 月 27 日至 28 日,由中國公路學會主辦的第二十四屆中國高速公路信息化大會在長沙國際會展中心....
    的頭像 Phytium飛騰 發表于 07-28 10:20 ? 456次 閱讀

    TTL FPGA開源項目

    電子發燒友網站提供《TTL FPGA開源項目.zip》資料免費下載
    發表于 07-28 10:18 ? 24次 閱讀
    TTL FPGA開源項目

    88AP320 BGR2模板項目

    電子發燒友網站提供《88AP320 BGR2模板項目.zip》資料免費下載
    發表于 07-28 09:32 ? 9次 閱讀
    88AP320 BGR2模板項目

    如何讓CPU跑的更快

    CPU不管什么樣的編程語言,什么樣的代碼框架,最終都是由CPU去執行完成的(當然這么說不太準確,也有....
    的頭像 FPGA之家 發表于 07-28 09:10 ? 74次 閱讀

    RISC-V的 CPU 驗證挑戰

    RISC-V 正受到整個半導體行業的關注。它提供了一個開源解決方案的誘惑,任何人都可以利用它來創建自....
    的頭像 張強 發表于 07-27 17:21 ? 130次 閱讀
    RISC-V的 CPU 驗證挑戰

    最佳 CPU 導熱膏替代品和替代品

    CPU導熱膏之于裝配工和電腦維修工,線程之于時裝設計師。這強調了這種維修工具的重要性,以及為什么必須....
    的頭像 周臻庸 發表于 07-27 16:10 ? 111次 閱讀
    最佳 CPU 導熱膏替代品和替代品

    一加Ace Pro通過認證 首發驍龍8+處理器

      一加Ace Pro將于8月3日19:00正式推出,并已獲得工業和信息化部的認證。
    的頭像 星星科技指導員 發表于 07-27 15:57 ? 157次 閱讀

    使用 PCIe 交換矩陣優化多主機系統中的資源部署

    數據中心和其他高性能計算環境越來越多地使用 GPU,因為它們能夠快速處理深度學習和機器學習應用程序中....
    發表于 07-27 15:47 ? 5次 閱讀
    使用 PCIe 交換矩陣優化多主機系統中的資源部署

    ALPNO TFT SD PRO CPU開源模塊

    電子發燒友網站提供《ALPNO TFT SD PRO CPU開源模塊.zip》資料免費下載
    發表于 07-27 14:32 ? 8次 閱讀
    ALPNO TFT SD PRO CPU開源模塊

    iQOO 9T搭載驍龍8+移動平臺

      iQOO 9T將搭載驍龍8+移動平臺,采用了臺積電4nm制程工藝,Cortex-X2超大核最高主....
    的頭像 星星科技指導員 發表于 07-27 11:27 ? 135次 閱讀

    下一代AI處理器需要48V

    人工智能處理器需要大量電力,而較低的能源效率對應于整個配電網絡 (PDN) 中損耗的增加。如何解決保....
    發表于 07-26 15:32 ? 200次 閱讀
    下一代AI處理器需要48V

    寄存器的基本知識

    幾乎我們設計的每個模塊都會有寄存器,而它們的寄存器或多或少能被CPU訪問到。但CPU的接口通常只有一....
    的頭像 路科驗證 發表于 07-26 13:52 ? 112次 閱讀

    請教大神rt_hw_cpu_id()是獲取邏輯核還是物理核呢

    tpidr_el1是啟動時每個核寫入的值么? #ifdef RT_USING_SMP /* The more common mpidr_el1 table, redefine it in ...
    發表于 07-26 10:58 ? 1527次 閱讀

    vivo Y30 5G搭載天璣700 在海外發布

      日前有消息顯示,官方在海外市場推出了一款該系列新機Y30 5G,并且盡管在命名上與國內版本一致,....
    的頭像 星星科技指導員 發表于 07-25 17:38 ? 318次 閱讀

    PN/PN Coupler模塊進行控制器與控制器之間的相關通信

    在TIA安全系統中S7-1500F和S7-1200F 的PROFINET接口之間可以借助 PN/PN....
    的頭像 機器人及PLC自動化應用 發表于 07-25 17:06 ? 243次 閱讀

    淺析安全信號模塊同時占用輸入輸出地址的原因

    西門子故障安全信號模塊與故障安全CPU之間的數據交換采用的是PROFIsafe安全通信,除了信號狀態....
    的頭像 機器人及PLC自動化應用 發表于 07-25 16:48 ? 296次 閱讀
    淺析安全信號模塊同時占用輸入輸出地址的原因

    鼎道智芯正式公開切入芯片賽道

    根據公開的介紹信息,鼎道智芯目標是做半導體行業的深耕者,專注于智能設備核心部件軟硬件設計方案,致力于....
    的頭像 電子發燒友網 發表于 07-25 15:26 ? 312次 閱讀

    6809/3 CPU分線板開源項目

    電子發燒友網站提供《6809/3 CPU分線板開源項目.zip》資料免費下載
    發表于 07-25 10:29 ? 12次 閱讀
    6809/3 CPU分線板開源項目

    CPU底層工作原理

    前段時間,我連續寫了十來篇CPU底層系列技術故事文章,有不少讀者私信我讓我寫一下CPU的寄存器。
    發表于 07-25 10:20 ? 44次 閱讀

    清除存儲卡中的項目數據

    如果電腦設置了顯示隱藏文件,還可以看到隱藏的系統文件,如圖8所示,這些系統文件是不能刪除的,也不允許....
    的頭像 機器人及PLC自動化應用 發表于 07-25 10:03 ? 148次 閱讀

    寄存器通電后CPU是怎樣開始工作的

    每次一通電,咱們的電路就會啟動自檢工作,把所有的寄存器全部重置,如果哪里有異常的話,就會把錯誤記錄到....
    的頭像 FPGA之家 發表于 07-25 08:52 ? 122次 閱讀

    讀取S7-1200CPU的系統/本地時鐘

    從上圖可以看出,讀出的系統時間和本地時間相差8小時,這是因為S7-1200CPU所設置的時區與格林威....
    的頭像 機器人及PLC自動化應用 發表于 07-23 15:05 ? 297次 閱讀

    電腦CPU散熱模塊組成原理

    筆記本電腦的散熱風扇是起著強制對流的作用,其目的就是將電腦主機運行時產生的熱量,通過空氣流動的方式,....
    的頭像 艾邦加工展 發表于 07-23 10:28 ? 213次 閱讀

    三星與AMD共同研發第二代智能固態硬盤

      據消息報道,三星電子近日宣布,該公司已與AMD共同研發第二代智能固態硬盤(SmartSSD),這....
    的頭像 星星科技指導員 發表于 07-22 17:03 ? 1622次 閱讀

    全固態電容的簡單介紹

    熟識DIY的玩家相信都知道,如今大部分的主板都是全固態電容布局,而十多年前,固態電容僅在 CPU附近....
    的頭像 深圳弗瑞鑫電子有限公司 發表于 07-22 14:34 ? 118次 閱讀

    芯片制造的光刻支出如何隨著各種節點縮小演變歷程

    單片設計每個晶圓有 30 個好的die,而小芯片 MCM 設計每個晶圓有 79 個好的die。假設所....
    發表于 07-22 11:52 ? 313次 閱讀
    芯片制造的光刻支出如何隨著各種節點縮小演變歷程

    CPU取代ASIC,成為計算芯片的主流

    GPU,Graphics Processing Units,圖形處理單元。顧名思義,GPU是主要用于....
    發表于 07-22 11:14 ? 381次 閱讀

    如何分配F-IO模塊的PROFIsafe安全地址

    每個故障安全模塊都有自己的 PROFIsafe 地址(F_destination_address),....
    的頭像 機器人及PLC自動化應用 發表于 07-22 10:56 ? 231次 閱讀

    64位RISC-V CPU發展情況

    從32位到64位,相同字長產品在不同代際之間的性能提升也更為明顯。以ARM Cortex-X3為例,....
    的頭像 電子發燒友網 發表于 07-22 10:46 ? 144次 閱讀

    weeCee MSDOS游戲PC開源

    電子發燒友網站提供《weeCee MSDOS游戲PC開源.zip》資料免費下載
    發表于 07-22 10:35 ? 13次 閱讀
    weeCee MSDOS游戲PC開源

    關于開源項目網站的分享

    之前介紹的開源項目都偏向理論,那有沒有一些開源項目可以參考學習呢?
    的頭像 OpenFPGA 發表于 07-22 09:42 ? 128次 閱讀

    64位RISC-V CPU發展現狀和未來前景

    電子發燒友網報道(文/吳子鵬)2020年,ARM公司宣布,其所有“大型” CPU內核將僅采用64位。....
    的頭像 Felix分析 發表于 07-22 07:59 ? 727次 閱讀
    64位RISC-V CPU發展現狀和未來前景

    淺談單片機解密的反向設計

    為什么反向設計值得研究呢? 因為實現同樣的功能很容易,但是,實現同樣的性能很難。有的公司做出的CP....
    發表于 07-21 15:13 ? 100次 閱讀

    五種降低微控制器能耗的技術

    在我的上一篇文章中,“你能走多低(功率)?”,我們研究了微控制器中可用的幾種不同低功耗模式,以及這些....
    發表于 07-21 15:01 ? 81次 閱讀
    五種降低微控制器能耗的技術

    PIC16F628的應用開發板

    電子發燒友網站提供《PIC16F628的應用開發板.zip》資料免費下載
    發表于 07-21 10:16 ? 9次 閱讀
    PIC16F628的應用開發板

    MCU的中斷流程和RTOS的的基本原理知識科普

    操作系統實際上我們接觸的很多,比如說windows,安卓、IOS、linux都是一種操作系統。單片機....
    發表于 07-21 10:15 ? 104次 閱讀
    MCU的中斷流程和RTOS的的基本原理知識科普

    低功耗MCU的選擇方法

    在物聯網的推動下,業界對各種電池供電設備產生了巨大需求。這反過來又使業界對微控制器和其他系統級器件的....
    的頭像 吳先生 發表于 07-21 09:16 ? 375次 閱讀

    CH579的BLE任務調度,怎么操作才能讓tmos讓出cpu使用權,讓CPU執行其他的任務?

    我在ch579上跑rtthread,之前沒有用ble,現在項目需要用到藍牙,但是ch579的ble是配合tmos使用的,要一直運行TMOS_SystemP...
    發表于 07-21 07:49 ? 119次 閱讀

    關于STM32的待機喚醒功能

    本文我們來學習下STM32的待機喚醒功能。要實現的功能是:系統運行時 D1 指示燈閃爍,5 秒后進入....
    發表于 07-20 17:57 ? 274次 閱讀

    討論RAID卡溫度以及潛在的影響

    查看RAID卡的溫度 其中ROC temperature 即是我們需要關心的溫度。一般來講,該溫度的合理值55攝氏度附近。目前空調狀態...
    發表于 07-19 17:31 ? 2014次 閱讀

    適用于Amiga 500和Amiga 500+的8MB FastRAM板

    電子發燒友網站提供《適用于Amiga 500和Amiga 500+的8MB FastRAM板.zip....
    發表于 07-19 10:42 ? 13次 閱讀
    適用于Amiga 500和Amiga 500+的8MB FastRAM板

    三分鐘學習NCNN算法移植

    本文是基于EASY EAI Nano移植NCNN部署庫的方法與NCNN成功運行yolov4的Demo....
    的頭像 ljx2016 發表于 07-19 09:02 ? 298次 閱讀
    三分鐘學習NCNN算法移植

    SOC芯片之軟件控制硬件的設計實現

    1、軟件是怎么控制硬件的 從最簡單的開始,如果使用硬件,控制8個led,最簡單的方式是什么:直接接上開關。就是以下的圖。通過開...
    發表于 07-14 17:56 ? 3945次 閱讀

    是什么原因導致RK3399板卡概率性CPU和EMMC通訊失敗跑不起來呢

      有一批RK3399的板卡,參照典型電路設計的。其中有幾塊板概率性CPU和EMMC通訊失敗,跑不起來。請問有什么可能的原因...
    發表于 07-14 16:11 ? 2044次 閱讀

    求提供CH374LIB.ZIP的源碼?

    如題 因為是自研的cpu,編譯好的庫無法使用,希望能提供源碼      ...
    發表于 07-13 06:05 ? 232次 閱讀

    在RK3399上搭建Tengine平臺并試運行MobileNet SSD網絡

    1、RK3399上Tengine平臺搭建 Tengine Tengine 是OPEN AI LAB 為嵌入式設備開發的一個輕量級、高性能并且模塊化的...
    發表于 07-11 16:28 ? 2672次 閱讀

    以hello world為例介紹如何讓代碼部署并運行在ARM平臺上

    1、以hello world為例介紹如何讓代碼部署并運行在ARM平臺上 CI(Continuous Integration)讓我們可以不斷對小的代碼修改進...
    發表于 07-11 15:44 ? 3934次 閱讀

    請問CH374用spi接口接CPU,能否實現鼠標鍵盤的透傳功能?

    我們使用的CPU上沒有USB接口,只有pcie,想要外接鍵盤和鼠標,現在又沒有國產pcie轉usb芯片。看到ch374這個芯片可以用spi轉...
    發表于 07-11 06:49 ? 168次 閱讀

    什么樣的寄存器不需要復位呢?哪些寄存器是CPU能夠訪問的

    1、寄存器的作用 1)時序邏輯存儲數據。例如,一個計數器,每個周期要加1,那它就要使用寄存器實現。純組合邏輯是實現不了的。 ...
    發表于 07-08 17:43 ? 9826次 閱讀

    TMS320VC5501 定點數字信號處理器

    TMS320VC5501(5501)定點數字信號處理器(DSP)基于TMS320C55x™DSP生成CPU處理器內核。 C55x™DSP架構通過增加并行性和全面關注降低功耗來實現高性能和低功耗。 CPU支持內部總線結構,該結構由一個程序總線,三個數據讀總線,兩個數據寫總線以及專用于外設和DMA活動的附加總線組成。這些總線能夠在一個周期內執行最多三次數據讀取和兩次數據寫入。并行,DMA控制器可以獨立于CPU活動執行數據傳輸。 C55x™CPU提供兩個乘法累加(MAC)單元,每個單元能夠進行17位×17位乘法運算。單循環。額外的16位ALU支持中央40位算術/邏輯單元(ALU)。 ALU的使用受指令集控制,提供優化并行活動和功耗的能力。這些資源在C55x CPU的地址單元(AU)和數據單元(DU)中進行管理。 C55x DSP代支持可變字節寬度指令集,以提高代碼密度。指令單元(IU)從內部或外部存儲器執行32位程序提取,并為程序單元(PU)排隊指令。程序單元解碼指令,將任務指向AU和DU資源,并管理完全受保護的管道。預測分支功能可避免執行條件指令時的管道刷新。 5501外設...
    發表于 10-09 14:55 ? 532次 閱讀
    TMS320VC5501 定點數字信號處理器
    亚洲色婷婷综合久久