PERFETTO: Perfetto를 이용한 F2FS 파일시스템 모니터링

안녕하세요 오늘은 페르페토(Perfetto)를 사용하여 안드로이드의 F2FS 파일시스템을 모니터링하는 방법을 알아보고 실습해보겠습니다.

Perfetto: 안드로이드 아이콘

목차

  1. F2FS 란?
  2. Perfetto 란?
  3. Perfetto를 이용한 F2FS 모니터링 실습
  4. 결론

1. F2FS 란?

F2FS(Flash-Friendly File System)는 SSD 및 기타 플래시 메모리 기반 스토리지 장치와 함께 사용하도록 특별히 설계된 파일 시스템입니다. 삼성전자에서 개발하여 2012년에 처음 선보였습니다. F2FS는 플래시 저장 장치의 성능과 수명을 향상시키는 것을 목표로 최적화되었습니다.

F2FS의 발표이후, Pixel이나, Xperia 등의 기기에서 부분적으로 채택하여 사용하였으나, 삼성전자는 2019년 하반기에 되어서야 갤럭시탭 S6 모델에서 처음 선보이게 되었습니다.

f2fs를 개발한 삼성전자, 반도체 개발과 더불어 사용하는 소프트웨어도 개발한 것 같다.

F2FS의 주요 기능은 다음과 같습니다.

  1. 웨어 레벨링(Wear-leveling): F2FS는 웨어 레벨링 알고리즘을 구현하여 쓰기/지우기 주기를 메모리 셀 전체에 보다 고르게 분배하여 특정 영역의 조기 마모를 방지하고 저장 장치의 전체 수명을 연장합니다.
  2. 로그 구조 설계: F2FS는 기존 데이터를 제자리에 업데이트하는 대신 데이터가 메모리의 특정 섹션에 순차적으로 기록되는 로그 구조 설계를 채택합니다. 이 접근 방식은 데이터를 반복적으로 덮어쓸 때 발생하는 쓰기 증폭을 줄여 플래시 스토리지의 성능을 향상시킵니다.
  3. 트림 지원: F2FS는 운영 체제가 더 이상 사용하지 않는 데이터 블록에 대해 파일 시스템에 알릴 수 있는 TRIM 명령을 지원합니다. 이를 통해 파일 시스템은 사용하지 않는 공간을 효율적으로 관리하여 성능을 향상시킬 수 있습니다.
  4. 가비지 수집: 다른 플래시 파일 시스템과 마찬가지로 F2FS는 가비지 수집을 수행하여 유효한 데이터를 통합하고 삭제된 파일에서 사용하지 않는 공간을 회수합니다. 이 기능은 시간이 지남에 따라 파일 시스템의 성능을 유지하는 데 도움이 됩니다.
  5. 투명한 압축: F2FS는 투명한 데이터 압축을 지원하므로 작업 부하에 따라 저장 공간을 절약하고 잠재적으로 읽기 및 쓰기 성능을 향상시킬 수 있습니다.

F2FS는 플래시 메모리를 사용하는 Android 장치 및 임베디드 시스템을 포함하여 다양한 Linux 기반 시스템에서 사용됩니다. 플래시 스토리지에 대한 성능 이점 및 최적화로 인해 ext4와 같은 기존 파일 시스템이 적합하지 않을 수 있는 장치에 널리 사용됩니다. 그러나 F2FS는 플래시 메모리 기술이 있는 장치로 제한된다는 점에 유의해야 합니다. 기존 하드 드라이브에서는 제대로 작동하지 않을 수 있기 때문입니다. (그러나 별 문제가 없는 것으로 보고되고 있습니다.)

2. Perfetto란?

Perfetto는 이탈리아어로 완벽한이라는 뜻으로 Google에서 개발한 Android 성능 수집 도구입니다.(이름부터 대단한 자부심이 느껴지네요.) Perfetto는 Android 기기에서 성능 데이터를 수집하고 분석할 수 있는 강력한 도구입니다. Perfetto는 Android 기기에서 발생하는 다양한 이벤트를 추적할 수 있으며, 이번 글에서는 이 기능을 사용하여 파일시스템을 추적해 볼 생각입니다.

Perfetto: ui.Perfetto.com에 접속하면 보이는 Icon

Perfetto는 파일시스템 뿐만 아니라 Android 기기에서 발생하는 다양한 이벤트를 추적할 수 있습니다. 예를 들어, CPU 사용량, 메모리 사용량, 네트워크 사용량 등 입니다. 또한, 추가적으로 Android 기기에서 발생하는 화면 터치, 키 입력, 앱 실행 같은 사용자 이벤트도 추적할 수 있습니다.

3. Perfetto를 이용한 F2FS 모니터링 실습

구글의 공식 문서 확인 결과, Android 기기는 Systrace와 Perfetto를 사용해서 모니터링이 가능합니다. Perfetto의 경우 안드로이드 10 이상의 기기에서 사용 가능하고 Systrace는 그 이하 버전에서 주로 사용합니다. 이제 Perfetto를 사용해서 Andorid의 파일시스템의 동작을 모니터링 해보겠습니다.

3-1. 실습환경 및 안드로이드 버전 확인

실습환경은 다음과 같습니다.

기기Google Pixel 6(Rooted)
안드로이드 버전Android 12
ADB34.0.1-9680074
Perfetto15.0

Perfetto는 Android 9부터 가능하지만 Android 12부터 기본적으로 내장되어 있는 서비스로 이하 버전에서 해당 기능을 사용할 수 있는지 확인하려면 다음 명령어를 입력해봐야 합니다.

adb shell setprop persist.traced.enable 1

입력한 명령어가 에러 없이 작동한다면 Perfetto를 사용할 수 있다는 뜻입니다.

3-2. Perfetto 구동

이제 Perfetto를 구동하여 pb파일을 만드는 작업입니다. Perfetto는 기본적으로 Python을 사용하여 pb파일을 만들고, 이 pb파일을 perfetto 사이트에 올려서 분석하는 프로세스를 따릅니다.

pb파일을 만들기 위해서 ADB로 접속한 상태에서 다음과 같은 명령어를 내립니다. 이 코드는 -o 경로에 pb 파일을 생성하고 fs.* 과 block_io.* 이벤트를 대상으로 모니터링 하겠다는 뜻입니다.

oriole:# perfetto trace -o /data/local/tmp/perfetto_trace.pb disk

실행 시 10초 동안 안드로이드에서 일어나는 disk 관련 이벤트를 모니터링하며 아래와 같은 로그가 출력됩니다. 저는 10초 동안 두번의 사진을 찍어보았습니다.

Perfetto 실습 : Perfetto를 이용한 pb파일 생성(disk)

이제 생성된 pb파일이 생성된 것을 볼 수 있습니다.

Perfetto 실습 : Perfetto가 생성한 pb파일을 로컬로 전송하는 그림

이제 생성된 perfetto_trace1.pb를 로컬로 옮기겠습니다.

adb pull /data/local/tmp/perfetto_trace1.pb ./

로컬로 옮긴 pb파일을 아래 Perfetto 분석 사이트에서 열어 줍니다.

아래 Perfetto에서 분석한 화면을 보시면 10초의 타임라인 동안 f2fs에서 일어난 이벤트와 시간을 알 수 있습니다.

perfetto를 이용한 안드로이드의 F2FS 파일시스템 모니터링

보면 순서대로 f2fs_write_begin, f2fs_write_end에 대한 로그가 남는 걸 확인할 수 있었습니다. 모니터링 중에 카메라 촬영을 통해 기기 내에 사진 파일이 생성되었고, f2fs에 쓰기가 동작한 것을 나타내는 것입니다.

f2fs에 기록된 로그를 확인

f2fs_wrtie_begin의 각 인자가 의미하는 바는 다음과 같습니다.

  • len: 쓰기할 데이터의 길이 (바이트)
  • flags: 쓰기 작업의 플래그
  • dev: 장치 ID
  • ino: 파일의 inode
  • pos: 쓰기할 위치 (바이트)

f2fs_write_end의 각 인자가 의미하는 바는 다음과 같습니다.

  • len: 쓰기된 데이터의 길이 (바이트)
  • dev: 장치 ID
  • ino: 파일의 inode
  • pos: 쓰기된 위치 (바이트)
  • copied: 실제로 쓰여진 데이터의 길이 (바이트)

이렇게 파일시스템이 쓰이는 것을 자세하게 모니터링 할 수 있습니다.

4. 결론

지금까지 Perfetto를 사용해서 안드로이드 기기의 파일시스템 모니터링을 진행해보았습니다. 개인적으로 Perfetto라는 좋은 도구를 알게 돼서 매우 유익한 시간이었다고 생각됩니다. 앞으로는 Perfetto를 이용해서 파일시스템 모니터링 뿐만 아니라 네트워크나 앱 활동도 모니터링하는 것을 알아보도록 하겠습니다. 감사합니다.


게시됨

카테고리

작성자

태그: