[SPDK] blobfs/blobstore layer에서의 read 작업 처리

2024. 8. 27. 16:17·[ Laboratory ]/System Software & Storage

0. examples

examples 디렉토리에서 hello_blob과 hello_bdev를 통해 확인하려고 했으나 

예제 작동만을 위해 hello를 포함하는 함수들이 많았고 

물론 내부 구현은 실제 작동에 사용되는 함수들로 구현되어 있겠지만

실제 작동에 잘 사용되지 않는 함수도 포함되어 있어 

이해하기 쉽게 헤더 파일을 기반으로 코드를 확인했다

1. blobfs.c

1-1. spdk_file_read_async()

아직 spdk도 익숙하지 않고 커널 코드 분석도 익숙하지 않아서 

헤더를 보고 read 작업이 본격적으로 시작되는 지점일 것 같은 함수를 찾아서

탐색을 시작했다

 

예상했던 지점보다 조금 더 먼저 시작하는 것 같아서 

조금 더 이전 함수로 올라가서 내려가는 방식으로 확인했다

 

blobfs/blobstore layer에서는 blobstore 기반으로 blobfs가 동작하기 때문에

blobfs부터 application layer의 요청을 전달받는다

 

즉 read 작업을 본격적으로 수행하게 되면

blobfs 관련 함수부터 동작하게 되는 것이다

 

서론이 길었다

spdk_file_read_async()부터 시작점으로 삼았고

해당 함수는 파일을 비동기적으로 처리하는 함수이다

 

비동기란 요청한 작업이 종료될 때까지 기다리는 것이 아니라

다른 작업을 수행하고 있다가 먼저 진행 중인 것이 종료되면

나머지를 수행하는 방식이다

 

 

1-2. __readwrite()

파일 읽기 쓰기 함수로 실제 읽기 작업이 시작된다

 

 

1-3. __readwritev()

파일 r/w에 필요한 파일 i/o 벡터를 처리하는 함수로

본격적인 읽기 작업을 위해서 __do_blob_read를 호출하게 된다

 

 

1-4. __do_blob_read()

blob file system은 blob에서 데이터를 읽기 위해 blobstore.c에 속하는

spdk_blob_io_read()를 호출한다

 

 

2. blobstore.c

2-1. spdk_blob_io_read()

blobstore에 저장된 데이터를 기본 단위인 blob으로 읽는

즉 blob의 데이터를 읽는 함수이다

 

 

2-2. blob_request_submit_op()

블록 디바이스에서 데이터 읽기를 수행하도록 하는 함수이다

 

요청을 수행하는 방식을 결정하는 코드를 포함하고 있고

단일 io로 처리하면 single 함수를,

분할 io로 처리하면 split 함수를 호출하게 된다

 

 

2-3-1-1. blob_request_submit_op_single()

블록 디바이스에서 단일 io 처리 방식으로 읽을 때 호출되는 함수이다

 

 

2-3-1-2. cb_fn()

할당에 실패하는 경우 에러를 출력하는 cb_fn을 콜백한다

 

동일한 이름의 사용자 정의 콜백 함수가 정말 많았으나

spdk_bs_cpl 구조체의 
spdk_blob_op_complete에 해당하는 콜백 함수로 예상된다

 

 

2-3-2-1. blob_request_submit_op_split()

블록 디바이스에서 분할 io 처리 방식으로 읽을 때 호출되는 함수이다

 

 

2-3-2-2. blob_request_submit_op_split_next()

 

split 함수가 정상적으로 실행되면

split_next 함수도 호출한다

 

2-4. blob_request_submit_op()

 

split next 함수의 Spdk_blob_read case에서

Spdk_blob_io_read()를 호출하고

 

이전에 io처리 방식을 결정했던

blob_request_submit_op 로

다시 돌아오게 된다

 

 

 

 

 

728x90

'[ Laboratory ] > System Software & Storage' 카테고리의 다른 글

[SPDK/examples] nvme/hello_world 예제 수정 및 실행  (1) 2024.10.10
[SPDK/examples] spdk/build/examples 하위 예제 파일 실행하기  (0) 2024.10.10
[SPDK] spdk 빌드 및 example 실행  (4) 2024.10.10
[SPDK] spdk_bdev_read() 작동 방식  (0) 2024.08.26
[SPDK/NVMe] NVMe 마운트 방법  (1) 2024.08.06
[FIO] Flexible I/O tester FIO 설치 방법  (0) 2024.07.31
[Linux Kernel] 리눅스 커널 버전 업그레이드 빌드  (2) 2024.07.30
'[ Laboratory ]/System Software & Storage' 카테고리의 다른 글
  • [SPDK/examples] spdk/build/examples 하위 예제 파일 실행하기
  • [SPDK] spdk 빌드 및 example 실행
  • [SPDK] spdk_bdev_read() 작동 방식
  • [SPDK/NVMe] NVMe 마운트 방법
dev charlotte
dev charlotte
주 - 컴퓨터공학 / 복수 - 산업 보안
    250x250
  • dev charlotte
    int main() {
    dev charlotte
  • 전체
    오늘
    어제
    • 분류 전체보기
      • [ Laboratory ]
        • Paper review
        • Advanced Operating System
        • System Software & Storage
        • Lab etc
      • [ Computer Science ]
        • Algorithm_C++
        • Operating System
        • Information Retrieval
        • Database_sql
        • SW Engineering
        • Computer Network
        • JavaScript
        • Python
        • Data Structure
        • CS study
        • Distributed systems
      • [ Computer Security ]
        • Convergence Security
        • Web Security
        • PIMS
        • Network Security
        • Digital Finance
      • [ Artificial Intelligence ]
        • Trend
        • Seminar
      • [ 미래, 같이, LG ]
      • [ Development ]
        • [ Front-end ]
        • [ Back-end ] Spring 기본
        • [ Back-end ] Node.js
      • etc
        • 현대오토에버 스마트 모빌리티 공학 체험 교육
      • It's me
  • 블로그 메뉴

    • 링크

      • GitHub
    • 공지사항

    • 인기 글

    • 태그

      티스토리챌린지
      MySQL
      데이터베이스
      비전공자 코딩
      코드잇
      프로그래머스 c++
      소프트웨어 공학
      코딩 교육
      ACM
      싸피 13기
      오블완
      spdk
      프로그래머스
      싸피
      hotstorage
      자바스크립트
      스마트모빌리티공학체험교육
      SQL
      현대오토에버
      프로그래밍 언어론
      ssafy 13기
      대학생 대외활동
      SSAFY
      현대오토에버 스마트모빌리티
      코딩 인강
      현대오토에버 스마트 모빌리티
      백준
      공대생 대외활동
      프로그래머스 입문
      프로그래머스 코테
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.4
    dev charlotte
    [SPDK] blobfs/blobstore layer에서의 read 작업 처리
    상단으로

    티스토리툴바