Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
test
Search
a1933b51019
February 14, 2024
Design
0
60
test
for test
a1933b51019
February 14, 2024
Tweet
Share
More Decks by a1933b51019
See All by a1933b51019
myread
chungvlong
0
7
Other Decks in Design
See All in Design
スタートアップ創業時の CXOのお仕事
tsuyoshika
0
1.5k
Jeremy's First Day
myates3
1
130
デザインに関わる全ての人たちでエベレスト登頂を目指すために取り組んでいること
amishiratori
0
610
非デザイナーのフロントエンドエンジニアがOOUIを考える
yud0uhu
8
3.8k
もち的デザイナーのキャリアデザイン新提言:副業起業家のすゝめ
mochitaro
0
1.4k
The Fight
euralisw
0
110
リリース1ヶ月後で機能をなくした話
hinofu
1
700
Data+Diversity: Celebrating W.E.B Du Bois through Data Visualization
ajstarks
0
310
20240120_画像生成AI_NovelAI入門・情報収集
doradora09
0
120
良いアプリケーションをデザインするための感覚の持ち方 / Cultivating a Sense for Designing Great Applications
usagimaru
23
7.9k
現象と向き合うデザイン @Spectrum Tokyo Festival 2023
hirokazu_oda
3
1.3k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
110
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1357
200k
Done Done
chrislema
178
15k
Mobile First: as difficult as doing things right
swwweet
217
8.6k
Imperfection Machines: The Place of Print at Facebook
scottboms
261
12k
The Cult of Friendly URLs
andyhume
74
5.7k
Bash Introduction
62gerente
605
210k
A Philosophy of Restraint
colly
197
16k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
660
120k
Atom: Resistance is Futile
akmur
260
25k
Scaling GitHub
holman
457
140k
Building Better People: How to give real-time feedback that sticks.
wjessup
356
18k
Music & Morning Musume
bryan
41
5.6k
Transcript
File read PHSIM
Case •12KB file •Read 2K ~ 10K file data to
a 8K user buf Virt user buffer physical user buffer Virt data block physical user buffer Page table Share buffer dpu cpu 共享
Virt_buf Virt_data_block Virt_buf 為傳入的參數, 在此read operation中user buffer 的目的地vaddr Virt_data_block 為要讀data的起始virt
addr Filesystem (CPU)
Virt_buf Virt_data_block 使用get user page觸發page fault,使virt user buffer產生對應的physical user buffer
page Filesystem (CPU)
Virt_buf Virt_data_block Pim driver(CPU) Virt_bufxxx Pgd 取得包含virt_buf的pgd指針位置(取得最上層的表的位置) pgd,並填入shared buf
Virt_buf Virt_data_block Pim driver(CPU) Virt_bufxxx Pgd 取得包含virt_buf的pgd指針位置(取得最上層的表的位置) pgd,並填入shared buf pgd
Virt_buf Virt_data_block Pim driver(CPU) 通過計算取得phys_data_block,並填入shared buffer pgd phys_data_block=Virt_data_block- offset
Virt_buf Virt_data_block Pim driver(CPU) 通過計算取得phys_data_block,並填入shared buffer pgd (src)phys_data_block phys_data_block phys_data_block=Virt_data_block-
offset
Virt_buf Virt_data_block Pim driver(CPU) 填入dst (virt_buf)和size和command type pgd (src)phys_data_block Size(8K)
(dst) virt_buf read phys_data_block
Virt_buf Virt_data_block Pim kernel(DPU) 通過pgd和virt_buf找到對應的phys_buf pgd (src)phys_data_block Size(8K) (dst) virt_buf
read phys_data_block Virt_buf phys_buf Pgd
Virt_buf Virt_data_block Pim kernel(DPU) DPU通過pgd和virt_buf找到對應的phys_buf pgd (src)phys_data_block Size(8K) (dst) virt_buf
read phys_data_block Virt_buf phys_buf Pgd phys_buf
Virt_buf Virt_data_block Pim kernel(DPU) Copy data (到page boundary ) clflush(phys_buf,
2K); memcpy_v(phys_buf, phys_data_block, 2K); pgd (src)phys_data_block Size(8K) (dst) virt_buf read phys_data_block phys_buf DPU
Virt_buf Virt_data_block Pim kernel(DPU) Copy data (到page boundary ) clflush(phys_buf,
2K); memcpy_v(phys_buf, phys_data_block, 2K); pgd (src)phys_data_block Size(8K) (dst) virt_buf read phys_data_block phys_buf DPU
Virt_buf Virt_data_block Pim kernel(DPU) pgd (src)phys_data_block Size(8K) (dst) virt_buf read
phys_data_block phys_buf Virt_buf+2K phys_buf+2K Pgd 通過pgd和(virt_buf+2K)查表找到對應的phys_buf+2K(此處似乎不必要) phys_buf+2K Virt_buf+2K
Virt_buf Virt_data_block Pim kernel(DPU) Copy data (到page boundary ) clflush(phys_buf+2K,
2K); memcpy_v(phys_buf+2K, phys_data_block+2K, 2K); pgd (src)phys_data_block Size(8K) (dst) virt_buf read phys_data_block phys_buf DPU phys_buf+2K Virt_buf+2K
Virt_buf Virt_data_block Pim kernel(DPU) Copy data (到page boundary ) clflush(phys_buf+2K,
2K); memcpy_v(phys_buf+2K, phys_data_block+2K, 2K); pgd (src)phys_data_block Size(8K) (dst) virt_buf read phys_data_block phys_buf DPU phys_buf+2K Virt_buf+2K
Virt_buf Virt_data_block Pim kernel(DPU) pgd (src)phys_data_block Size(8K) (dst) virt_buf read
phys_data_block phys_buf Virt_buf+4K phys_bufA Pgd 通過pgd和(virt_buf+4K)查表找到對應的值phys_bufA Virt_buf+4K
Virt_buf Virt_data_block Pim kernel(DPU) pgd (src)phys_data_block Size(8K) (dst) virt_buf read
phys_data_block phys_buf Virt_buf+4K phys_bufA Pgd 通過pgd和(virt_buf+4K)查表找到對應的值phys_bufA Virt_buf+4K phys_bufA
Virt_buf Virt_data_block Pim kernel(DPU) Copy data (到page boundary ) clflush(phys_bufA,
2K); memcpy_v(phys_bufA, phys_data_block+4K, 2K); pgd (src)phys_data_block Size(8K) (dst) virt_buf read phys_data_block phys_buf DPU Virt_buf+4K phys_bufA
Virt_buf Virt_data_block Pim kernel(DPU) Copy data (到page boundary ) clflush(phys_bufA,
2K); memcpy_v(phys_bufA, phys_data_block+4K, 2K); pgd (src)phys_data_block Size(8K) (dst) virt_buf read phys_data_block phys_buf DPU Virt_buf+4K phys_bufA
Virt_buf Virt_data_block Pim kernel(DPU) pgd (src)phys_data_block Size(8K) (dst) virt_buf read
phys_data_block phys_buf Virt_buf+4K phys_bufA Virt_buf+6K phys_bufA+2K Pgd 通過pgd和(virt_buf+6K)查表找到對應的phys_bufA+2K(此處似乎不必要)
Virt_buf Virt_data_block Pim kernel(DPU) Copy data (到page boundary ) clflush(phys_bufA+2K,
2K); memcpy_v(phys_bufA, phys_data_block+6K, 2K); pgd (src)phys_data_block Size(8K) (dst) virt_buf read phys_data_block phys_buf DPU Virt_buf+4K phys_bufA
Virt_buf Virt_data_block Pim kernel(DPU) Copy data (到page boundary ) clflush(phys_bufA+2K,
2K); memcpy_v(phys_bufA, phys_data_block+6K, 2K); pgd (src)phys_data_block Size(8K) (dst) virt_buf read phys_data_block phys_buf DPU Virt_buf+4K phys_bufA