---
# System prepended metadata

title: Processing in Storage Class Memory
tags: [PIM]

---

# Processing in Storage Class Memory
###### tags: `PIM`
## Link
* [paper](https://www.usenix.org/system/files/hotstorage20_paper_nider.pdf)
* [slides](https://www.usenix.org/system/files/hotstorage20-paper75-slides-nider.pdf)
* [video](https://2459d6dc103cb5933875-c0245c5c937c5dedcca3f1764ecc9b2f.ssl.cf2.rackcdn.com/hotstorage20/hotstorage20-paper75-video-long-nider.mp4)
* [UPMEM](https://www.hotchips.org/hc31/HC31_1.4_UPMEM.FabriceDevaux.v2_1.pdf)
## Abstract
* SCM 的商業化
* PIM 用以解決 Memory Wall
* 兩者結合並透過實驗來證實潛力
## Introduction
* Intel Optane DC Persistent Memory 在2019年提出，使用 PCM 3D-XPoint 來減少 I/O latency
* Moore's Law and Dennard scaling 的趨緩證明 CPU 不該花資源在 I/O 上，且隨著 storage density 的增加，CPU 計算速度也不夠，因此使用 PIM 結合 SCM 可以更加有效的增加 Scalability
* 傳統的 PIM 結合 DRAM 會跟 PIM 結合 SCM 不太一樣，此論文提出將簡單的 data processing and manipulation operations(e.g., compression) 移到 SCM 來做
* 同樣的運算使用 PIM 結合 DRAM 會需要 CPU DMA 傳輸 data，PIM on SCM 消除這個問題
* PIM on SCM 的好處:
    * Free the Bus:
        * 因為 SCM 跟 in-storage processors 緊密結合，資料不需要透過 shared bus 移動，跟 PIM on DRAM (省掉 disk or ssd -> DRAM 的 memory wall)
    * Scalable Processing:
        * 隨著儲存單位增加，計算能力也會線性成長
    * Post-processing of Stored Data:
        * PIM on SCM 可以不斷地轉換 storage 的 data，確保他的永久性
## Background
* 將 PIM 視為 memory 中嵌入式小型處理器，稱為 Data Processing Units (DPU)
* 硬體 based on UPMEM，雖然是在 DRAM 上實作，但預期狀況會相同，並加上以下特點：
    * Inter-PIM Communication:
        * 使用第二階層的 bus (secondary bus)，可以在 runtime 時動態調整 load balance，並彼此分享部分結果，增強 locality
        * 主要缺點除了增加 bus 會更貴更耗能外，還會讓 front-end 設計更加複雜，且難以有擴展性 (scalability)
    * Address Translation:
        * 為了支援 virtual memory，CPU 要維持 translation table，每個 process 都有自己的 tables，這些要跟 DPU 做分享，因為 DPU 常常只能 access 到限制 range 的 physical address space，PIM 常常不會有此設計
    * Core Density:
        * silicon area and power consumption vs. parallelism 的 tradeoff
        * 不夠多的 core 代表平行化的限制，而過多的 cores 可能原本的空間有其他用途就不能使用
        * 希望可以找到正確的 core density
    * Instruction Set:
        * 使用原本的 ISA，programmer 不需要有任何更動(compiler, linker, debugger)
        * 設計新的 ISA 可能保留 PIM 較會使用到的 instruction，讓設計較為簡單，但就需要新的 tool 跟 developer training
## Architecture and Limitations
* 使用 UPMEM 作為實驗 PIM hardware 方法，雖然是 based on DRAM，不過有許多特性與 SCM 可相容
* UPMEM DRAM 是 DDR4-compatible，可直接取代 DDR4 DIMMs
* DPUs 是 general-purpose processors
* 接下來敘述 UPMEM PIM hardware 並介紹優勢及其限制
* UPMEM 每個 chip 都會有一個 DPU，可以直接存取 DRAM memory，隨著 memory 越多 DPUs 就會越多
* DPU 計算 data 前要先利用 DMA 將資料從 DRAM copy 到 64KB 的 private SRAM，不能直接使用 DRAM
* 每個 DPU 有很多 hardware thread，不過因為使用 IMT 設計，每個 cycle 只能有一個 thread 做操作
* 因為很多的 DMA operations 可以同時處理，所以隱藏移動 data 的 latency，而因為所有 memory chips 都獨立，所以 DPUs 可以平行且獨立的處理 data
* 因為 DPUs 間沒有溝通管道，所以 host 需要很小心的處理操作的順序，因為維持同步要消耗的 cost 很高
* 因為 PIM 所能做到的較少，因此也要設計有效率的 offload functions
### Virtual Memory
* host CPU 寫一個 cache line 到 DRAM 時會一次分配給好幾個 banks 一個 byte，這原先沒問題，但 DPU 只能讀自己 bank 的資料，因此 CPU 要放置 data 給 DPU 運算時要透過 API copy 資料到 DPU 可控管的資料區，為了達到快速轉換，需要將 virtual memory pages 直接放入 application 的 address space，而因為 striping 現在是不能做到的
* 因為 DPUs 會永久的在某個地方，因此不能用傳統的 wear levelling ，用 in-place methods 解決
### Wishlist for PIM architectures
* Data Triggered Functions
    * host CPU 讀取到 DPU 擁有的 memory address 就觸發 function execution
    * the address 首先 registered 在 DPU as a functino target
    * 當 CPU issues a memory load，會觸發 DPU 執行 function，並等待 function 執行結束並回傳結果，因為不需要昂貴的 API calls 來執行 DPU functions，也不需要多餘的機制(polling,interrupt)，就能知道結果已經好了
    * 這需要 memory controller 能支援較長的執行 function 的 latency
* Concurrent Memory Access
    * DPU and CPU cannot operate on the same memory rank concurrently.
    * 為了要支援 producer-consumer model，當 DPU 讀取 buffer N 時，CPU 要可以讀取 N-1 的結果並寫在 buffer N+1，此項 double-buffering 需要 memory bus 的支援，現行 DDR4 是不可行的
* Mix of Memory Types
    * 希望 DPU 可以存取 DRAM 跟 SCM Mixed 的記憶體，讓 DRAM 儲存暫時的資料，而 SCM 儲存壓縮過或尚未解密的資料等
    * 最終希望可以動態調整兩者的比例，如果做不到，也希望可以有固定的混合比例
* Tuning For Performance
    * SCM 讀取較慢，在未來實作上也會遇到速度不均的問題
## Feasibility Experiments
* Format Parsing
    * Decoding stored data formats (JSON, XML, ORC, etc.) into in-memory representations is an expensive task.
    * The best known CPU implementation of SIMDJSON today can only operate at 2GB/s per-core
    * SIMDJSON identifies all structural bytes of a record in parallel before traversing it.
    * performed an experiment to compare the overhead of format conversion when the data is stored on Intel Optane NVRAM and on HDD.
    * On NVRAM, the test takes 26s with 11s (42%) of parse time.
    * On HDD it takes 80s with 11s (13%) of parse time.
    * 透過使用 DPUs 可以加速運算
* Storage Compression
    * the compression overhead becomes higher (relative to the total execution time) as the speed of the storage device increases.
    * 資料庫再做儲存時常常需要壓縮解壓縮，這會造成很大的 overhead，而透過 PIM 也可以完成此工作
* Snappy Decompression
    * By using a set of test files that vary in size and compression ratio, we compiled a benchmark to measure the performance compared to a CPU
    * With the largest file size, we see a speedup of nearly 4.5x using only 172 DPUs.
    * With the smallest file, we see a slowdown of 100% (i.e. 2x longer than the CPU).
    * both cases, the amount of available parallelism is the cause.
### Throughput
* We maximized parallelism by starting all DPUs simultaneously, and by using 16 threads concurrently in each DPU. The threads only copied data, and did not perform any additional processing.
* a total throughput of approximately 252 GB/sec.Compared to the maximum theoretical bandwidth of a single DDR4-2400 channel between the DRAM and CPU of 19 GB/sec
### Other Use Cases
## Conclusions
## Discussion Topics