[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
    • 공지사항

    • 인기 글

    • 태그

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

    • 최근 글

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

    티스토리툴바