[Linux][Kernel]뮤텍스 데드락(Mutex Deadlock) 락업(lockup) - "simpleperf" 디버깅
By Guillermo Austin Kim | 2017년 12월 27일 |
특정 시점부터 갑자기 디바이스가 락업되는 현상이 리포트가 되었거든요. 엄청 쏟아 졌었는데요.이 때 어떻게 디버깅을 해서 문제를 해결했는지 업데이트하고자 해요. 락업이 된 상태에서 디바이스를 받아 강제로 코어 덤프를 뜬 다음에 콜 트레이스를 봤는데요.아래 콜 스택이 확인되었어요. 프로세스 이름은 "atd" 이에요. reboot 시스템콜을 trigger한 다음에 각 종 시스템 드라이버를 종료하는 과정에서 mutex lock을 계속 기다리는 현상이 확인되네요.-000|context_switch(inline)-000|__schedule()-001|schedule_preempt_disabled()-002|spin_lock(inline)-002|__mutex_lock_common(inline)-002|__mute
[bash: cd] 디렉토리 내용 새로 고침(refresh)
By 반달가면 | 2018년 3월 28일 |
자주 일어나는 일은 아닌데, 간혹 리눅스 bash 스크립트로 작업하면서 디렉토리 안의 파일 목록이 계속 변하는 경우(추가, 삭제) 변경 내용이 반영되지 않아서 이미 삭제된 파일이 존재한다고 간주해서 오동작을 하는 경우가 있었기 때문에 간단한 해결책을 정리해 두기로. 아마도 캐싱(caching)과 연관되어 발생하는 문제가 아닌가 추측하고 있다. 아래와 같은 예시를 생각해 보자. while [[ 1 ]] do ... for file in `find ~/my_data/ -type f` do ... done sleep 5 done 5초 간격으로 ~/my_data 디렉토리 안에 있는 파일에 대해서 뭔가 작업을 하는 경우다. 잘 동작하면 괜찮은데, 혹시라도 작업
[bash: stat] 현재 파일이 전송되고 있는 중인지 판단하기 - 2
By 반달가면 | 2018년 7월 16일 |
예전에 파일이 마지막으로 수정된 시간이 언제인지를 확인해서 파일이 현재 전송중인지 판단하는 방법을 정리해 두었는데, 한가지 방법을 더 정리해 두기로. 두번째 방법은 일정 시간 동안 파일 크기가 변했는지 그대로인지를 보고 판단하는 것이다. 현재 파일 크기가 얼마인지 확인하고 이후 일정 시간, 예를 들어 10초 후에 파일 크기를 다시 확인해서 크기가 같은지를 비교한다. 만약 파일이 전송중이라면 10초후의 파일 크기는 좀 더 늘어나 있을 것이다. 파일 크기만 출력하려면 stat 명령에서 아래와 같이 하면 되겠다. -c 옵션으로 출력 형식을 지정해 주는데, 파일 크기는 %s이다. # my_file.txt 파일의 크기 확인 stat -c %s my_file.txt 시간차 기준을 10초로 하여
[Linux][Kernel] 인터럽트 - request_threaded_irq 기초
By Guillermo Austin Kim | 2017년 12월 9일 |
개요 하드웨어 관점에서 인터럽트는 인터럽트 콘트롤러에 의해 인가되는 전기신호 인데요. 이 신호는 인터럽트 컨트롤러 입력 핀으로 전달됩니다. 각각 보드마다 인터럽트 컨트롤러는 연결된 여러 개의 인터럽트 배선을 하나의 배선에 묶어서 프로세서에 전달해준다. 인터럽트를 받으면 인터럽트 콘트롤러는 프로세서에 신호를 보낸다. 신호를 감지하면 프로세서는 인터럽트를 처리하기 위해 현재 실행하던 일을 잠시 중단한다. 그다음 프로세서는 커널에 인터럽트가 일어났다는 것을 알리고, 커널은 상황에 맞게 인터럽트를 처리한다. 위에서 설명한 인터럽트가 처리되는 과정은 어느 플렛폼이나 거의 유사하다. 주의해야 할 점 인터럽트가 올라오면 인터럽트 서비스 루틴(ISR)이 호출이 된다. 이 때 프로세서는 기존에 하던 일을 잠시