Cscope와 Ctags에 대한 사용법을 배우고 1차 목표를 설정하였다. 제법 찾아본 건 많은데 실질적으로 진행한 건 얼마 되지 않는 것 같다.
Cscope 사용법
1. Cscope를 실행할 디렉토리에서 vi를 실행한다. 이 때 cscope는 해당 디렉토리 아래의 모든 디렉토리 안의 파일을 탐색한다.
2. cscope.out 파일을 생성한다.
: cscope -Rb
3. 이후 vi가 cscope.out 파일을 인식하도록 한다.
: cs f [option] [name]
이 때 사용되는 옵션들은 아래 공식 Documentation에서 확인할 수 있다.
http://cscope.sourceforge.net/cscope_man_page.html
우리는 주로 함수 이름을 통해 정의를 찾아내야 하므로 g 옵션(전역 함수 정의를 찾는다)을 이용했다.
처음에는 그냥 fio를 이용해서 입출력을 시행했는데, 생각해 보니 현재 서버에서 사용하는 저장장치는 일반 SSD이다. 여기에 입출력을 시행해 봤자 어차피 Zone에 관련된 함수들은 사용되지 않을 것 같아서 다시 목표를 설정하기로 했다. 처음에는 zns ssd를 마운트하면 자동으로 입출력이 그쪽으로 될 것이라고 생각했다. 여기서 마운트의 개념을 다시 한 번 알고 가자.
Mount
사용자가 유닉스 계열 머신에서 파일에 접근하고자 할 때 파일을 포함하고자 있는 파일 시스템을 저장장치에 연결(마운트)해주어야 한다.
쉽게 말해서 디스크에 파일시스템을 붙여주는 작업이다. 같이 작업하는 팀원께서 깔끔하게 에러 처리까지 알려주신 덕에 수월하게 진행할 수 있었다.
1. mkzonefs를 설치한다.
https://github.com/damien-lemoal/zonefs-tools
git 주소 및 사용 방법이 나와 있다.
설치 과정이 꽤 복잡하다. 사용되는 라이브러리들 중 util-linux라는 것이 있는데 wget이나 git clone을 이용해 직접 파일을 받아 컴파일 후 make하는 과정을 거쳐줘야 한다.
2. ZBD를 포맷한다.
$ mkzonefs /dev/<disk name>
3. zonefs 파일시스템을 마운트한다.
$ sudo modprobe zonefs
$ sudo mount -t zonefs /dev/<disk name> /mnt
이 때, 리눅스 커널 버전에 따라 기본으로 zonefs를 지원하지 않을 수 있다. 또, 버전이 충분히 높더라도 해당 옵션 설정이 되어있지 않을 수 있다! 꼭 커널 코드 디렉토리에서 sudo make menuconfig를 실행, File system 옵션 내부 zoned filesystem support를 활성화 후 변경사항이 있다면 재컴파일하자.
그런데 사실 마운트 여부는 딱히 fio와 관계가 없었다. Fio 명령 위치는 옵션을 통해 조절할 수 있기 때문이다.
https://zonedstorage.io/docs/benchmarking/fio/zns-fio
fio Examples for NVMe ZNS Devices | Zoned Storage
To avoid additional overhead, the mq-deadline scheduler may be disabled for the
zonedstorage.io
거의 매일같이 방문하는 Zoned Storage에 관련된 홈페이지이다. 여기서 친절하게 ZBD에 입출력을 시행하거나 성능을 측정하는 방법을 알려주고 있다. 해당 게시글은 우리가 사용하고 있는 NVMe ZNS Device들에 순차 쓰기 명령을 전달하는 법이 나와 있다.
fio 명령 수행 과정을 uftrace를 이용하여 커널 단위로 추적하고 사용되는 함수들을 분석한 결과 blkdev_zone_mgmt_ioctl, blkdev_zone_mgmt 이 함수 두 개가 좀 수상해 보였다. 물론 이 외에도 다양한 함수들과 구조체들을 찾아보았지만 아직 코드 분석 단계까지는 들어가지 않았기에 구조에 대해 조금 더 공부하고 추가할 예정이다.
'ZNS Isolation with Linux Container' 카테고리의 다른 글
| ZNS SSD 논문 번역 (0) | 2022.07.16 |
|---|---|
| Uftrace 사용법 (0) | 2022.07.10 |
| Linux Kernel Code Compile (0) | 2022.06.24 |
| VNC Server 설정하기 (0) | 2022.06.23 |
| Linux Shell Commands (0) | 2022.06.23 |