Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SHARE] ReqTransSliceToLowLevel, share command 처리 로직 추가 #1

Open
Csoyee opened this issue Feb 20, 2019 · 8 comments
Open
Assignees
Labels
enhancement New feature or request good first issue Good for newcomers

Comments

@Csoyee
Copy link

Csoyee commented Feb 20, 2019

가정

  • (targetLBA, sourceLBA) : targetLBA 는 새로이 physical mapping을 해야하는 LBA.

이슈

  • sourceLBA 에 대한 데이터가 Data buffer 에 존재하는 경우에 어떻게 처리할 것인지?
  • sourceLBA 에 physical mapping이 잘 되어 있는 경우 어느 시점에서 targetLBA 에 대한 mapping을 수정하고 command completion을 할 것인지?
@Csoyee
Copy link
Author

Csoyee commented Feb 20, 2019

현재 Data write 과정은 다음과 같다.

  1. IO_NVM_WRITE command (이하 newCommand)를 받음
  2. LRU 방식에 따라 Data buffer 에서 데이터 하나를 Eviction (실제 NAND write request를 만듦) 함
  3. newCommand 에 대한 DMA request를 보내고 처리가 되면 completion
  • Eviction 함수에서 eviction이 되는 대상 lba에 대해서 new virtualSliceAddr 를 할당하면서 l2v, v2l mapping 정보를 수정한다.

@wurikiji wurikiji added enhancement New feature or request good first issue Good for newcomers labels Feb 20, 2019
@JonghyeokPark
Copy link

(무시가능ㅎㅎ)
data buffer에 있는 sourceLBA에 대해 physical block address를 미리 reserve해놓으면 어떨까요?

@Csoyee
Copy link
Author

Csoyee commented Feb 21, 2019

@JonghyeokPark

개인적인 생각으로는 Physical address 미리 reserve 하면 아래 고려사항이 있을 것 같습니다 ㅎ_ㅎ

  1. targetLBA에 대해 read 명령이 왔을 때 어떻게 처리할지? (해당 physical address 할당 되어 있어서 NAND 접근했는데 데이터가 없는 상황이 생김)
  2. 데이터가 쓰여지지 않았지만 특정 logical address에 reserved physical address에 대해서 SSD 내부에서 고려해야할 사항이 추가로 생기지 않을까? - GC 할 때 해당 페이지가 속해 있는 block이 victim이 된다면 어떻게 처리해야 하는지? (data가 실제 안써있으니까 mapping 정보만 수정?)

@JonghyeokPark
Copy link

@Csoyee
고견 감사합니다.

  1. 미리 reserve한다는 것은 바로 nand에 쓰는 것이 아니라 이 physical addr에 쓸거다라고 찜하는 의미였습니당. ecc 비트 일부를 활용해서 아직 "예약"상태를 가르키면 메모리에서 원래 sourceLBA를 가르키도록 하면 될것 같습니당
  2. 역시 ecc 비트 일부를 활용해서 gc때도 policy를 수정하면 될것 같은 느낌입니다.

ps. 말만해서 죄송합니다.ㅎㅎ

@Csoyee
Copy link
Author

Csoyee commented Feb 21, 2019

Memory에 targetLBA --> sourceLBA 정보를 가지고 있으면 physical page reservation 하지 않고 sourceLBA가 data buffer에 존재하면 sourceLBA에 대한 DMA read command를 보내면 될 것 같습니다

  • targetLBA -> sourceLBA 정보 mapping table 에 유지하면 memory 사용량이 높음
  • 방안, share command 에 대한 LOG (atomicity 보장을 위해서 어쩌피 필요할 것으로 보임) 를 남기고 LOG 확인하기 {==> 문제점, read command 마다 LOG 를 확인하면 overhead가 되지 않을까}

@Csoyee
Copy link
Author

Csoyee commented Mar 4, 2019

+)

  • 두 개의 lsn 에 의해서 share 되고 있는 psn 의 데이터가 write/read 명령에 의해 buffer 로 올라가는 경우.

@Csoyee
Copy link
Author

Csoyee commented Mar 11, 2019

(교수님 comment)

  • Share 명령이 내려왔을 때 lsn2 에 대한 data 가 buffer 에 있으면 NAND로 flush.

@Csoyee
Copy link
Author

Csoyee commented Mar 19, 2019

(교수님 comment)

  • Share 명령이 내려왔을 때 lsn2 에 대한 data 가 buffer 에 있으면 NAND로 flush.

일단 이렇게 구현 진행 합니다!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request good first issue Good for newcomers
Projects
None yet
Development

No branches or pull requests

3 participants