EzDoum

찾기
처음으로 | 찾기 | 아카이브 | 글 올리기 | 링크 | 자료실 | 통계 | 연락처 | 자유게시판
이지도움 특집
전체보기
네트워크
TI OMAP35x
TI DaVinci
Analog Blackfin
RobotWar2005
임베디드!
캐쉬의 모든것
메모리 할당 알고리즘
CPU 파이프라이닝
자료구조(Tree)
금융

Login
이름

암호

기억하기


사용자 등록

현재 접속중인 등록 사용자는 0명, 익명 사용자는 2명 입니다.
전체 등록 사용자: 751명

마지막 답장
·libcurl + fuse 조합으로 되는게 많네. (1)
·Linux Ftrace에 관해 (3)
·Android MTP ( Media Transfer Protocol ) (1)
·Lighttpd에 인증을 digest 사용시 IE 오동작 문제? (1)
·Dtrace에 관해 (1)

최근글
·OpenSSL and multi-threads (0)
·ARM 환경에서 OpenCL 사용 (0)
·IoT용 WIFI 모듈 비교 ( MCU ) 클래스 (0)
·Glances - 리눅스 여러 가지 항목을 한 화면에서 모니터링 (0)
·plugin 방식의 로그 분석기 (0)

뜨거운 감자
·나는 인터렉티브한 환경에서 역어셈블 한다. (12)
·GNU REGEX (정규표현식) 프로그래밍 강좌 (7)
·SoCRobotWar 2005 - 신입생 기초 교육자료 (7)
·ASP.NET의 데이터 그리드와 사용자 컨트롤 (7)
·DHTML Editing Control (7)

가장 많이 읽은 글
·[Cache] 2-way Set-Associative 방식이란 무엇일까? (2)
·멀티쓰레드(Pthread) 프로그래밍
·Sorting Algorithm Animation (2)
·GNU REGEX (정규표현식) 프로그래밍 강좌 (7)
·SoCRobotWar 2005 - 신입생 기초 교육자료 (7)

커널 패닉 유형 ( page allocation failure )
글쓴이: EzDoum 글쓴날: 2012년 03월 14일 오전 11:50




소켓으로 초당 10MB/sec 정도 수신을 하는 제품 Aging시 아래와 같은 로그를 발생 시키고 죽었다.

정상 동작시 Slab 사용량이 8MB 정도 인데, 죽을 시점에는 2k kmalloc 용량만 23MB로 급격히 증가 하여 죽었다.

2K-slab은 주로 EMAC드라이버에서 소켓 수신용 버퍼인데, 하드웨적으로는 최대 512개 까지만 할당이 가능하기 때문에,
수신하여 TCP/IP 단에서 APP가 읽어 가지 않아서 발생한 건으로 유추된다. ( 11000 개 가량 읽어 가지 않은 sk_buff ㅠㅠ )

따라서 인풋이 초당 10MB 이니, 2초만 블록 되어도 시스템의 메모리가 부족해 진다.

SLUB: Unable to allocate memory on node -1 (gfp=0x20)
cache: kmalloc-2048, object size: 2048, buffer size: 2048, default order: 2, min order: 0
node 0: slabs: 1660, objs: 11492, free: 0

평상시 슬랩 상황 cat /proc/slab

kmalloc-8192 12 12 8192 4 8 : tunables 0 0 0 : slabdata 3 3 0
kmalloc-4096 26 32 4096 8 8 : tunables 0 0 0 : slabdata 4 4 0
kmalloc-2048 179 216 2048 8 4 : tunables 0 0 0 : slabdata 27 27 0
kmalloc-1024 120 120 1024 8 2 : tunables 0 0 0 : slabdata 15 15 0
kmalloc-512 340 352 512 8 1 : tunables 0 0 0 : slabdata 44 44 0


문제는 두 가지로 요약되는데,

1. 누가 CPU를 무한 루프를 돌아서 읽어 가는 APP이 스케쥴 되지 못해 꺼내지 못했을 가능성
-> 아니면 APP 이 버그로 인해 읽어가지 않았을 가능성
2. 현재 커널의 TCP 파라메터가 가용한 메모리 보다 버퍼링을 많이 하고 있는 상황.

대책은 2번 항목을 가용 메모리 범위내로 적당히 줄여서 다시 Aging을 걸고 누가 CPU를 많이 잡았는지 분석이 필요함
특별하게 CPU 잡는 녀석이 없다면 APP에서 블록 가능성을 분석 해야함.

# 로그

kworker/0:19: page allocation failure. order:0, mode:0x4020
Backtrace:
[<8004bddc>] (dump_backtrace+0x0/0x10c) from [<80513ee0>] (dump_stack+0x18/0x1c)
r7:90802400 r6:00004020 r5:003fffff r4:00000000
[<80513ec8>] (dump_stack+0x0/0x1c) from [<800aa590>] (__alloc_pages_nodemask+0x4c8/0x518)
[<800aa0c8>] (__alloc_pages_nodemask+0x0/0x518) from [<800ca208>] (new_slab+0x80/0x230)
[<800ca188>] (new_slab+0x0/0x230) from [<800ca568>] (__slab_alloc+0x1b0/0x2a0)
r9:ffffffff r8:90802400 r7:809a5060 r6:90801100 r5:00000000
r4:00000000
[<800ca3b8>] (__slab_alloc+0x0/0x2a0) from [<800ca6e8>] (__kmalloc_track_caller+0x90/0xc8)
[<800ca658>] (__kmalloc_track_caller+0x0/0xc8) from [<8044cfa8>] (__alloc_skb+0x58/0xe8)
r8:8044dff0 r7:00000640 r6:00000020 r5:812d3cc0 r4:90802100
[<8044cf50>] (__alloc_skb+0x0/0xe8) from [<8044dff0>] (dev_alloc_skb+0x20/0x44)
[<8044dfd0>] (dev_alloc_skb+0x0/0x44) from [<803237e0>] (emac_rx_alloc+0x18/0x5c)
[<803237c8>] (emac_rx_alloc+0x0/0x5c) from [<80324cdc>] (emac_rx_handler+0x8c/0x10c)
r5:8fd61000 r4:810d7b40
[<80324c50>] (emac_rx_handler+0x0/0x10c) from [<80325988>] (__cpdma_chan_free+0xb4/0xb8)
r8:810d7b40 r7:8fd03800 r6:60000113 r5:8fd01840 r4:00000003
[<803258d4>] (__cpdma_chan_free+0x0/0xb8) from [<80325abc>] (__cpdma_chan_process+0x130/0x164)
[<8032598c>] (__cpdma_chan_process+0x0/0x164) from [<80325b20>] (cpdma_chan_process+0x30/0x50)
[<80325af0>] (cpdma_chan_process+0x0/0x50) from [<80324a4c>] (emac_poll+0x70/0x21c)
r7:8fd6134c r6:00000040 r5:8fd61340 r4:00000001
[<803249dc>] (emac_poll+0x0/0x21c) from [<80454134>] (net_rx_action+0x58/0x158)
[<804540dc>] (net_rx_action+0x0/0x158) from [<80073ec8>] (__do_softirq+0x94/0x124)
[<80073e34>] (__do_softirq+0x0/0x124) from [<80073fa8>] (irq_exit+0x50/0xa4)
[<80073f58>] (irq_exit+0x0/0xa4) from [<8003d080>] (asm_do_IRQ+0x80/0xa0)
[<8003d000>] (asm_do_IRQ+0x0/0xa0) from [<80516788>] (__irq_svc+0x48/0xb4)
Mem-info:
Normal per-cpu:
CPU 0: hi: 90, btch: 15 usd: 31
active_anon:33517 inactive_anon:228 isolated_anon:0
active_file:988 inactive_file:14849 isolated_file:0
unevictable:0 dirty:0 writeback:0 unstable:0
free:755 slab_reclaimable:671 slab_unreclaimable:7517
mapped:3527 shmem:254 pagetables:701 bounce:0
Normal free:3020kB min:8192kB low:10240kB high:12288kB active_anon:134068kB inactive_anon:912kB active_file:3952kB inactive_file:59396kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:276224kB mlocked:0kB dirty:0kB writeback:0kB mapped:14108kB shmem:1016kB slab_reclaimable:2684kB slab_unreclaimable:30068kB kernel_stack:1576kB pagetables:2804kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0
Normal: 55*4kB 254*8kB 0*16kB 0*32kB 0*64kB 0*128kB 1*256kB 1*512kB 0*1024kB 0*2048kB 0*4096kB = 3020kB
16091 total pagecache pages
73728 pages of RAM
1040 free pages
6618 reserved pages
3777 slab pages
5355 pages shared
0 pages swap cached
SLUB: Unable to allocate memory on node -1 (gfp=0x20)
cache: kmalloc-2048, object size: 2048, buffer size: 2048, default order: 2, min order: 0
node 0: slabs: 1660, objs: 11492, free: 0
------------[ cut here ]------------


[분류: 리눅스 커널 인쇄용 페이지 본문 email로 보내기 ]

<  크롬 Google Native Client | opto-isolators  >

답장 쓰기
글을 올리시려면 로그인 (사용자 등록) 하셔야 합니다.

검색
Google

분류
·공지 (6)
·인터넷 (87)
·하드웨어 (260)
·C/C++ (65)
·어셈블리 (7)
·리눅스 (136)
·리눅스 커널 (67)
·윈도우즈 (25)
·데이터베이스 (20)
·보안 (16)
·.NET (25)
·그래픽 (13)
·책소개 (42)
·호기심 천국 (80)
·잡담 (111)
·사랑 (3)

전체 본문수: 963
전체 답장수: 525


분류 : 리눅스 커널
최근글
최근글
가장 많이 읽은 글
·리눅스 커널 공부하기 (2)
뜨거운 감자
·SunWorld Online (4)

EzDoum투표
이지도움 어때요?
이게 뭐야. 다시 안올란다. --;
아이 좋아라~ +_+;
관심없다.
먼가는 있는거 같은데 뭐하는 곳이지?
기타 (자유게시판에 글로 남겨 주세요)
[ 결과 | 투표 ]

랜덤 링크
http://kldp.net


 Home ^ BACK TO TOP ^ EzDoum - 도움이 필요하세요~??
 Powered by KorWeblog 1.5.8 Copyleft © 2001 EzDoum, 관리자: EzDoum