리눅스에서 ZFS 데이터 무결성 검사
By 반달가면 | 2018년 6월 26일 |
ZFS 설치, zpool 생성, 파일 시스템 생성 등 기본적인 작업은 이전 게시물을 참고하자. 여기로 ZFS에 저장된 데이터에 자주 접근할 경우에는 입출력 과정에서 오류를 자동으로 수정하기 때문에 별 문제가 없지만, 아주 가끔씩 접근하는 데이터의 경우에는 긴 시간동안 해당 데이터의 검증이 이루어지지 않은 채 방치될 수 있다. 이런 상황을 고려해서 수동으로 모든 데이터를 읽어서 무결성을 검증하고 오류를 수정하는 기능이 바로 scrub이다. 예를 들어 my_test_pool이라는 zpool에 대해 scrub 작업을 하려면 터미널창에서 아래와 같이 입력한다. 현재 사용중인 zpool에 대해 수행해도 문제가 없으므로 부담 없이 수행해도 된다. # my_test_pool에 scrub 작업 시작 su
[라즈베리파이] 프로세스: 태스크디스크립터(프로세스 실행 시각 정보)
By Guillermo Austin Kim | 2019년 1월 31일 |
태스크 디스크립터에는 프로세스 실행 시각 정보를 알 수 있는 멤버들이 있습니다. u64 utime; 유저 모드에서 프로세스 실행한 시각을 표현합니다. 이 멤버는 account_user_time() 함수 6번째 줄 코드에서 변경됩니다.1 void account_user_time(struct task_struct *p, u64 cputime)2 {3 int index;45 /* Add user time to process. */6 p->utime += cputime; u64 stime; 커널 모드에서 프로세스가 실행한 시각을 표현합니다. 이 멤버는 다음 코드와 같이 account_system_index_time() 함수에서 변경됩니다.1 void account_system_index_time(s
[라즈베리파이] 동기화 - 스핀락(spinlock) 소개
By Guillermo Austin Kim | 2018년 12월 21일 |
리눅스 커널에서 가장 많이 쓰는 동기화 기법 중 하나가 스핀락입니다. 먼저 스핀락의 특징을 알아봅시다. 1. 뮤텍스락 비해 구현 복잡도가 낮습니다.2. spin_lock_irq(), spin_lock_irq_save() 등등 추가 기능이 포함된 함수를 제공합니다.3. 스핀락 구현부는 아키텍처에 의존적입니다. ARM, ARM64 그리고 x86 CPU에 따라 구현부가 다릅니다. 스핀락 동작을 제대로 이해하기 위해선 어셈블리 코드를 분석해야 합니다. 임계 영역에 특정 프로세스에 접근하기 위해서 임계 영역 코드 구간에 스핀락을 걸어 다른 프로세스 접근을 막아야 합니다. 이를 위해 다음과 같은 함수를 호출해야 합니다.static DEFINE_SPINLOCK(static_spinlock);void kernel_fu
[리눅스커널] 워크큐(Workqueue) - 딜레이워크(delayed_work)는 어떻게 초기화하나?
By Guillermo Austin Kim | 2018년 9월 26일 |
딜레이 워크를 실행하기 위해서 먼저 딜레이 워크를 초기화해야 합니다. 이를 위해 INIT_DELAYED_WORK() 매크로 함수를 호출해야 합니다. 먼저 딜레이 워크를 초기화하는 디바이스 드라이버 코드를 열어 봅시다.[https://elixir.bootlin.com/linux/v4.14.43/source/drivers/thermal/da9062-thermal.c#L248]1 static int da9062_thermal_probe(struct platform_device *pdev)2 {3 struct da9062 *chip = dev_get_drvdata(pdev->dev.parent);4 struct da9062_thermal *thermal;...5 INIT_DELAYED_WORK(&th