Upgrade to Pro — share decks privately, control downloads, hide ads and more …

test

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for a1933b51019 a1933b51019
February 14, 2024

 test

for test

Avatar for a1933b51019

a1933b51019

February 14, 2024
Tweet

More Decks by a1933b51019

Other Decks in Design

Transcript

  1. 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 共享
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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(此處似乎不必要)
  12. 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
  13. 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