LINUXKERNEL

포스트: 40|조회수: 0|ORGANIZATION
Items

Posts

40 posts

[리눅스커널] 메모리관리/디버깅: ftrace로 메모리 할당 해제 확인하기

Guillermo Austin Kim|2019년 9월 1일

ftrace에서 지원하는 kmalloc와 kfree 이벤트를 사용하면 kmalloc()와 kfree() 함수를 호출할 때 세부 정보를 알 수 있습니다.kmalloc 이벤트: kmalloc() 함수로 메모리 할당을 요청했을때 동작 kfree 이벤트: 할당한 메모리를 해제했하는 동작 kmalloc와 kfree 이벤트 소개하기 그러면 kmalloc와 kfree 이벤트를 켜서 ftrace를 받으면 어떤 패턴의 메시지를 볼 수 있을까요? 다음 로그를 같이 보겠습니다. [https://elinux.org/Kernel_dynamic_memory_analysis]1 init-1[000] .N..0.170000: kmalloc: call_site=c104deff ptr=c147dd20 bytes_req=29

[리눅스커널] 메모리 관리: 슬럽 오브젝트 해제하는 kfree() 함수 분석하기

Guillermo Austin Kim|2019년 9월 1일

kmalloc() 함수로 동적 메모리를 할당하고 난 후 사용하지 않으면 메모리를 반환해야 합니다. 이 때 kfree() 함수를 사용하면 됩니다. 이번 시간에는 kfree() 함수를 분석하면서 커널 내부에서 반환하는 동적 메모리를 어떻게 처리하는지 살펴보겠습니다.[https://github.com/raspberrypi/linux/blob/rpi-4.19.y/source/mm/slub.c]01 void kfree(const void *x)02 {03 struct page *page;04 void *object = (void *)x;0506 trace_kfree(_RET_IP_, x);0708 if (unlikely(ZERO_OR_NULL_PTR(x)))09 return;1011 page = virt_to_h

[리눅스커널] 메모리 관리: kmalloc 캐시 슬럽 오브젝트 할당 커널 함수 분석하기

Guillermo Austin Kim|2019년 9월 1일

우리는 'kmalloc() 함수를 호출하면 동적 메모리를 할당할 수 있다.'란 사실을 알고 있습니다. 하지만 kmalloc() 함수에서 호출하는 커널 내부 함수는 거의 분석하지는 않는 듯 합니다. 이번 시간에는 kmalloc() 함수와 이 함수에서 호출하는 다음 함수를 분석합니다.kmalloc_index()kmem_cache_alloc_trace()slab_alloc()slab_alloc_node() kmalloc() 함수 분석하기 우리가 드라이버 드라이버에서 동적 메모리를 할당할 때 주로 사용하는 함수는 kmalloc()입니다. 그런데 kmalloc() 함수는 생각보다 분석하기 어렵습니다.  슬랩 캐시와 슬럽 오브젝트의 개념을 알고 있어야 분석이 가능하기 때문입니다. 이어서

[리눅스커널] 스핀락 플러그인 함수: spin_lock_irq()/spin_unlock_irq()

Guillermo Austin Kim|2019년 8월 21일

리눅스 커널 코드를 조금만 분석하면 spin_lock() 함수뿐만 아니라 spin_lock_irq() 함수를 써서 임계 영역을 보호하는 코드를 많이 볼 수 있습니다. 이렇게 커널은 스핀락 기능을 확장한 플러그인 형태 스핀락 함수들을 제공합니다. 이번 소절에서는 spin_lock() 함수 기능을 확장한 스핀락 플러그인 함수를 소개합니다. spin_lock_irq()/spin_unlock_irq() 먼저 spin_lock_irq()/spin_unlock_irq() 함수를 리눅스 커널에서 지원하는 이유를 알아보고 세부 코드를 분석하겠습니다. spin_lock_irq()/spin_unlock_irq() 함수가 생겨난 이유는 무엇일까? spin_lock_irq()/spin_unlock_irq() 함수 코드