I/O sw stack of HPCHPC : high performance computing I/O SW stack데이터 입출력 흐름에서 효율성을 극대화 하기 위해 멀티 레이어로 설계application layer - 사용자 애플리케이션이 데이터 입출력을 요청- 데이터 집약적인 작업을 수행하는 애플리케이션이 속함high level I/O libraries- 애플리케이션 개발자가 데이터 입출력을 더 쉽게 처리하도록 추상화 제공- 계층적 포맷으로 저장하는 기능, 대규모 병렬 데이터 처리 기능- HDF5, NetCDF, ADIOSparallel I/O middleware- 데이터 병렬화 관리 > 대규모 애플리케이션이 동시에 입출력 수행 가능- 여러 노드에서 데이터 동시 처리 > 성능 극대화- MPI-IOlow..
[ Laboratory ]/System Software & Storage
사용 중인 서버에 분명 nvme를 붙였음에도 nvme list를 조회하면 보이지 않는다 PCI 버스에 연결된 nvme가 제대로 인식되지 않는 것 같아서강제로 제거했다가다시 스캔하는 명령어를 수행했다 나는 이전에 nvme pci 주소를 조회한 적이 있기 때문에기억하고 있는 pci 주소를 직접 입력하는 방식으로pci 장치를 강제 제거 했다가 rescan 했다 다시 nvme list를 조회하니 제대로 인식된다 !!성공 !!삼성 ssd 990 pro 1tb를 사용 중이고/dev/nvme0n1으로 인식된다
spdk/examples/nvme/hello_world/hello_world.c 의 코드를 실행해보았다 spdk/build/examples 에 있는 실행 파일로 실행하면이런 결과 화면이 출력되는데 작동 흐름을 확인하기 위해 코드에 출력문을 추가해서 빌드해보겠다 내 필요에 맞게 수정한 후에 clean 한 후 다시 make 해주고 다시 build로 이동해서 파일을 실행하면성공 !!! 임시 테스트용 실행이기 때문에 세부적인 코드 흐름 분석은 blob- bdev 분석 후에 업로드할 예정이다
spdk/build/examples 하위에는 실행 파일이 여러 가지 있다 실행 파일을 실행해볼 때 주의할 점이 있다공식 문서에서 나온대로 그냥 실행하려고 하면해당 파일이 디렉토리라고 뜬다 그래서 cd 로 이동해서 실행하려고 하면디렉토리가 아니라고 뜬다 뭐야!! 방금 디렉토리라면서 왜 아니라고 해...~ 이유는 권한 때문이다이렇게 sudo 권한으로 실행하면 문제 없이 작동한다
원하는 디렉토리에서 깃 클론을 받아준다 깃 클론 링크 순서로만 진행해도 되고 뒤에 경로를 명시해줘도 된다 현재 위치에서 spdk 클론을 받아주었으니현재 디렉토리에서 ls -l로 확인해보면 spdk가 생성되었다 명시한 디렉토리에 spdk 디렉토리로 클론이 완료되었다이동해서 내부를 살펴보면 다음 사진과 같다다만 아직 build를 안 한 상황이라 디렉토리 목록에 build 디렉토리가 없다 build 전에 필요한 종속성과 의존성 패키지 관련 설치들을 진행해준다 이건 서브 모듈을 초기화 해주는 것 dpdk가 필수적으로 필요한 spdk는사진처럼 셋업 쉘 스크립트를 실행해서 환경을 설정해야한다 반드시 해야하는 부분은 아니지만 SPDK FIO 플러그인도 함께 빌드하지 않도록 설정했다 이제 빌드를 진행한 후 m..
0. examplesexamples 디렉토리에서 hello_blob과 hello_bdev를 통해 확인하려고 했으나 예제 작동만을 위해 hello를 포함하는 함수들이 많았고 물론 내부 구현은 실제 작동에 사용되는 함수들로 구현되어 있겠지만실제 작동에 잘 사용되지 않는 함수도 포함되어 있어 이해하기 쉽게 헤더 파일을 기반으로 코드를 확인했다1. blobfs.c1-1. spdk_file_read_async()아직 spdk도 익숙하지 않고 커널 코드 분석도 익숙하지 않아서 헤더를 보고 read 작업이 본격적으로 시작되는 지점일 것 같은 함수를 찾아서탐색을 시작했다 예상했던 지점보다 조금 더 먼저 시작하는 것 같아서 조금 더 이전 함수로 올라가서 내려가는 방식으로 확인했다 blobfs/blobstore layer..
desc 블록 디바이스 디스크립터ch io 작업에 사용할 채널buf 데이터를 저장할 버퍼offset 오프셋nbytes 읽을 바이트 수 cb 완료하면 호출될 콜백 함수 사용자가 spdk_bdev_read 함수를 호출하면블록 디바이스 디스크립터에서 블록 디바이스 구조체를 가져오고바이트 단위 오프셋과 크기를 블록 단위로 바꾸고변환을 실패하면 오류를 반환하고변환을 성공하면 spdk_bdev_read_blocks를 호출하여 읽기를 진행한다 spdk_bdev_read_blocks는블록 단위로 데이터 읽는 함수이며spdk_bdev_read_blocks_with_md 를 리턴한다 spdk_bdev_read_blocks_with_md 는메타 데이터도 함께 읽을 수 있는 함수이다 spdk_bdev_read_blocks..
코어 128개가 있는 서버에 내가 사용할 NVMe 드라이브를 설치하게 되었다새로운 드라이브는 비어 있고 파일 시스템이 없는 상태이기 때문에마운트를 통해 파일 시스템을 생성하고 NVMe를 본격적으로 사용할 준비를 할 것이다 1. NVMe 연결 상태 확인새로운 NVMe가 시스템에 잘 연결되어 있는지를블록 디바이스의 계층 구조를 보여주는 lsblk 명령어로 확인해보았다 아니면 sudo fdisk -l 로 nvme 드라이브 목록을 확인해봐도 된다 설치한 nvme 드라이브는 대부분/dev/nvme0n1 이나 /dev/nvme1n1 과 비슷한 이름을 가지고 있다 lsblk로 확인해봤을 때nvme0n1 의 type 이 disk인 것만 보이고type 이 park 인 것은 보이지 않았다 즉, 제대로 연결되어 있기는 ..
FIO = Flexible I/O testerread, write, IOPS, bandwidth 등의 성능과 관련된 실행 결과를 출력해주는 성능 측정 툴 특정 워크로드를 테스트하고 싶을 때 테스트를 위한 프로그램을 작성하기 어려워서 개발된 툴로테스트 워크로드를 정의하기만 하면 시뮬레이션 해볼 수 있는 것이 장점이다 사용자가 원하는 대로 io 작업 수행에 필요한 thread나 process를 생성할 수도 있고 다양한 테스트 워크로드를 job file 로 만들어 사용자가 원하는 환경에서 유연하게 테스트를 수행할 수 있다 FIO 설치 방법실험을 진행할 서버의 디렉토리에 fio 레파지토리 깃 클론을 받아준다 클론 후 ls로 확인해보면 fio 로 클론이 된 것을 확인할 수 있다 fio 디렉토리로 cwd 를 변..
0. 현재 커널 버전 확인 명령어기존 커널 버전이 5.15.0 버전이었는데 최근 논문 세미나에서 발표했던 논문의 evaluation을 재현하려고 하니 6.2 버전 이상의 리눅스 커널이 필요해서 업그레이드 해야했다 1. 기존 커널의 config 복사하는 방법 sudo cp /boot/config-$(uname -r) .config 를 실행하면 이전에 사용하던 커널의 .config 를 복사해서 사용할 수 있다 나는 이전에 사용했던 5.5.x 버전의 .config 파일을이 사진처럼 복사해서 사용하려고 했었으나 1-1. 커널 버전 갭이 큰 경우 발생하는 문제 기존에 가지고 있던 .config 파일을 이용해서 컴파일하려고 하니까 sudo make modules 명령어 실행까지는 오류가 발생하더라도 진행되는데 그 ..