커널 메세지 page allocation failure

   조회 788   추천 0    

Compute노드 중에 하나가 또 느려져서 보니까 messages가 난리가 났네요. 메모리 큰 잡들을 돌리고 있는데 저 노드만 저러고 있어요. CentOS 7.5 쓰고 있습니다. IB 문제같은데 비슷한 키워드는 나와도 같은 에러 메시지는 아니더라고요. 어찌 방법을 찾아야 할까요?


 Feb 25 22:42:14 compute-01-09 kernel: kworker/12:0: page allocation failure: order:10, mode:0x80d0

Feb 25 22:42:14 compute-01-09 kernel: CPU: 12 PID: 70801 Comm: kworker/12:0 Kdump: loaded Not tainted 3.10.0-862.el7.x86_64 #1
Feb 25 22:42:14 compute-01-09 kernel: Hardware name: Dell Inc. PowerEdge R7425/08V001, BIOS 1.5.6 08/17/2018
Feb 25 22:42:14 compute-01-09 kernel: Workqueue: events xprt_rdma_connect_worker [rpcrdma]
Feb 25 22:42:14 compute-01-09 kernel: Call Trace:
Feb 25 22:42:14 compute-01-09 kernel: [] dump_stack+0x19/0x1b
Feb 25 22:42:14 compute-01-09 kernel: [] warn_alloc_failed+0x110/0x180
Feb 25 22:42:14 compute-01-09 kernel: [] ? drain_pages+0xb0/0xb0
Feb 25 22:42:14 compute-01-09 kernel: [] __alloc_pages_nodemask+0x9b4/0xbb0
Feb 25 22:42:14 compute-01-09 kernel: [] dma_generic_alloc_coherent+0x8f/0x140
Feb 25 22:42:14 compute-01-09 kernel: [] x86_swiotlb_alloc_coherent+0x21/0x50
Feb 25 22:42:14 compute-01-09 kernel: [] mlx5_dma_zalloc_coherent_node+0xb4/0x110 [mlx5_core]
Feb 25 22:42:14 compute-01-09 kernel: [] mlx5_buf_alloc_node+0x4d/0xc0 [mlx5_core]
Feb 25 22:42:14 compute-01-09 kernel: [] mlx5_buf_alloc+0x14/0x20 [mlx5_core]
Feb 25 22:42:14 compute-01-09 kernel: [] create_kernel_qp.isra.62+0x42e/0x72c [mlx5_ib]
Feb 25 22:42:14 compute-01-09 kernel: [] create_qp_common+0x67d/0x13c0 [mlx5_ib]
Feb 25 22:42:14 compute-01-09 kernel: [] ? internal_add_timer+0x70/0x70
Feb 25 22:42:14 compute-01-09 kernel: [] ? kmem_cache_alloc_trace+0x1d6/0x200
Feb 25 22:42:14 compute-01-09 kernel: [] mlx5_ib_create_qp+0x10b/0x4d0 [mlx5_ib]
Feb 25 22:42:14 compute-01-09 kernel: [] ? list_del+0xd/0x30
Feb 25 22:42:14 compute-01-09 kernel: [] ? wait_for_completion_interruptible_timeout+0x131/0x170
Feb 25 22:42:14 compute-01-09 kernel: [] ib_create_qp+0x7f/0x330 [ib_core]
Feb 25 22:42:14 compute-01-09 kernel: [] rdma_create_qp+0x34/0xb0 [rdma_cm]
Feb 25 22:42:14 compute-01-09 kernel: [] rpcrdma_ep_connect+0x183/0x3e0 [rpcrdma]
Feb 25 22:42:14 compute-01-09 kernel: [] xprt_rdma_connect_worker+0x3c/0xc0 [rpcrdma]
Feb 25 22:42:14 compute-01-09 kernel: [] process_one_work+0x17f/0x440
Feb 25 22:42:14 compute-01-09 kernel: [] worker_thread+0x126/0x3c0
Feb 25 22:42:14 compute-01-09 kernel: [] ? manage_workers.isra.24+0x2a0/0x2a0
Feb 25 22:42:14 compute-01-09 kernel: [] kthread+0xd1/0xe0
Feb 25 22:42:14 compute-01-09 kernel: [] ? insert_kthread_work+0x40/0x40
Feb 25 22:42:14 compute-01-09 kernel: [] ret_from_fork_nospec_begin+0xe/0x21
Feb 25 22:42:14 compute-01-09 kernel: [] ? insert_kthread_work+0x40/0x40
Feb 25 22:42:14 compute-01-09 kernel: Mem-Info:
Feb 25 22:42:14 compute-01-09 kernel: active_anon:11826266 inactive_anon:1659285 isolated_anon:0#012 active_file:24938058 inactive_file:25116811 isolated_file:0#012 unevictable:0 dirty:134 writeback:865547 unstable:1566927#012 slab_reclaimable:379760 slab_unreclaimable:172249#012 mapped:26843 shmem:43502 pagetables:30261 bounce:0#012 free:1077590 free_pcp:8 free_cma:0
Feb 25 22:42:14 compute-01-09 kernel: Node 0 DMA free:15864kB min:12kB low:12kB high:16kB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:15992kB managed:15904kB mlocked:0kB dirty:0kB writeback:0kB mapped:0kB shmem:0kB slab_reclaimable:0kB slab_unreclaimable:40kB kernel_stack:0kB pagetables:0kB unstable:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? yes
Feb 25 22:42:14 compute-01-09 kernel: lowmem_reserve[]: 0 1481 31659 31659

버팔로윙
짧은글 일수록 신중하게.
TRUE 02-26
제가 아는 것은 없지만
그래도 문제해결을 위해
케이블 연결을 다시 확인하고
시스템 종료 후 전원 공급을 중단하였다가
다시 시스템을 시작하는 방법도
시도해 보실 수 있겠습니다.
     
버팔로윙 02-26
리부팅은 여러번 했는데 간만에 서버실 갔다 와야겠어요.
박문형 02-26
IB가 어느 회사 제품인가요??

혹시나지만 불량 노드 빼서 메모리 /CPU 불량이 있는지 테스트 가능하신지요??

그 외는 노드에 부팅용 하드나 SSD가 있다면 배드 섹터 채크해보는 것도 어디가 불량인지 채크하는 방법 중 하나 일 듯합니다..
     
버팔로윙 02-26
IB는 멜라녹스 제품입니다. 메모리랑 cpu확인해볼게요.
화랑화랑 02-26
CPU가 메모리를 할당할때 page 단위로 할당/조정하는게 일반적입니다. 페이지 사이즈는 4096바이트, 8192바이트 등이 있슴돠~

CentOS라면 pagesize 명령어나 pagesize(), getpagesize() 등등 연관된 함수로 그 크기를 구할 수 있고, 그 페이지사이즈에 맞게 프로그램 짜야하고, 메모리를 할당/해제해야합니다.

요래 안짠 프로그램을 돌리면 반드시 시스템이 다운되지는 않지만 memory I/O 효율이 떨어지게 됩니다. <- 웬만한 리눅스 개발자들은 이정도는 다~ 준수하고 계실테고...


잡설(?)이 길었슴돠~

즉, page allocation failure 는 메모리 할당 이슈이구요, 메모리 diagnostic 프로그램 - memtest86 같은것 - 한번 돌려보시고

혹시나, 간혹가다, CPU내의 메모리 컨트롤러가 삐리~한 경우에 부하를 많이주면 메모리가 이상없는 경우에도 발생하기도 합니다.

참고만 하세요~
     
버팔로윙 02-26
하드웨어 문제라면 어떤 식으로 알아볼 수 있을까요? memtest86 찾아보겠습니다.
          
화랑화랑 02-26
메모리는 Memtest86 돌리기

CPU가 인텔꺼라면 https://downloadcenter.intel.com/download/19792/Intel-Processor-Diagnostic-Tool 요거 돌리기
(아쉽게도 리눅스 버전은 안보이는듯... )

그리고 mcelog 설치해서 로그에 뭔가 떴나 확인하기... 등이죠 뭐^^


High Performance Linpack 같은거 강려크하게 돌려볼만 도 합니다.
리눅스용 인텔 린팩은 요기에 있어요... https://software.intel.com/en-us/mkl-linux-developer-guide-intel-optimized-linpack-benchmark-for-linux
요건 돌릴때 메모리 왕장 잡아서(할당해서) 돌려야 합니다. 기본 상태로 돌리면 헛수고 입니다 ㅋ
               
박문형 02-26
리눅스에서 HPL 돌리는게 최고입니다..

아마 2.XX까지 버젼이 있을 겁니다..
Fragmentation 문제네요. 가용 page들은 많지만 4MB 짜리 연속된 메모리를 할당하려니 없었던 모양입니다. 보통은 compaction 이라는 로직이 돌거나 일부 page들을 swap-out 시켜서 원하는 메모리를 만들어 내는데.. interrupt handling 중이라거나 스케줄러를 사용할 수 없는 경우에는 저렇게 그냥 실패하게 됩니다. 저정도 크기의 메모리는 미리 할당해두고 사용하거나 불연속 메모리를 사용할 수 있게 구현해야 하는데.. Mellanox 드라이버에 좀 아쉬운 부분이 있는 모양입니다.
     
혹시 모르니 아래 명령으로 manual compaction 이라도 한번 해보세요:
# echo 1 > /proc/sys/vm/compact_memory
     
버팔로윙 02-26
검색하니까 분오의다운힐님께서 말씀하신 내용이 있더라구요. 그런데 내공부족으로 이해를 못했습니다. 드라이버 패치 얘기도 있었구요. 그래서 드라이버 업데이트를 했는데 좀 된 커널이라 반영이 안될... 수도 있나요?
          
아.. kernel version이 3.10이네요. 제 기억엔 memory compaction이 들어간게 3.15인가 그렇습니다. 개별 드라이버의 기능이 아니라 kernel mm의 기능입니다.
               
버팔로윙 02-29
3.10 에서 사용할 수 있는 방법은 없나요? 커널 업글에 왠지 모를 불안함이. 그런데 커널 바꾸는 것으로만 해결이 된다면 그것도 불가피 해보이네요.
                    
스왑이 있다면 compaction이 안돼도 좀 느리지만 비슷한 기능을 한다고 보셔도 됩니다. 그리고 어차피 compaction이나 스왑이나.. fragmentation 문제 해결을 위해 최대한 해보는데 보장은 못합니다. 그래서 드라이버에서 메모리를 사용하는 방식이 훨씬 중요합니다. 드라이버 업데이트를 하셨다면 일단 써보시면서 changelog를 자세히 한번 보시죠. 멜라녹스에 리포트를 해보는 것도 괜찮을 듯 합니다.
                         
버팔로윙 02-29
드라이버 업데이트는 해두었습니다. 멜라녹스에 문의해야겠네요.
epowergate 02-26
모든 노드에서 cat /proc/meminfo 를 해보시고 뭔가 다르게 보이는 노드가 있을겁니다.
그 노드의 meminfo 정보를 올려주시면 도움이 될것 같습니다.

그냥 제가 보기에는 대략 2가지 중에 하나인데 1) 로컬 또는 리모트 노드 어딘가에 메모리가 부족하거나, 2) 리모트 노드 어딘가에 메모리 fault가 있는 경우일 겁니다.
IB로 RDMA를 할때 리모트 노드에 메모리가 부족하면 OOM이 아닌 지금 보시는 것과 유사한 메시지가 나옵니다.
특히 마지막에 있는 "Node 0 DMA free:15864kB min:12kB low:12kB high:16..."와 같은 숫치는 나올 수가 없어요.

그런데 서버가 AMD EPYC이네요.  이쪽 이슈일 수도 있습니다.
저도 자견에 EPYC에 IB 테스트 하면서 고생 좀 했었습니다.
     
화랑화랑 02-26
엇, 메모리가 부족하면 OOM이 먼저 발동하는게 디폴트아닌가요 ??

아, 누가 컨피그를 만져놨을 수 도 있겠네요^^
          
epowergate 02-26
RDMA는 Remote에 메모리는 잡는 방식인데 우리가 흔이하는 OOM과는 에러가 발생하는 방식이 좀 다릅니다.
보통 MM가 부족하면 SWAP으로 갈수도 있죠?  그런데 RDMA로 메모리를 잡으려 하다 MM가 부족하면 SWAP으로 가야하는게 맞을까요?
이 부분도 설정이 있는데 기억이 나질 않습니다.
Kernel 버전마다 방식이 다를겁니다.  제가 아는건 15년전 RDMA라...
만약 시뮬레이션등을 하는데 격자를 너무 크게 잡거나 하면 발생 할 수 있습니다.  그런데 요즘 거의 이런경우 없는데요...
               
버팔로윙 02-29
meminfo는 다시 비슷한 상황이 나오면 리플로 업데이트 할게요. 유저 다 나가고 제가 노드에서 부하 큰 작업 해봤는데 괜찮더라구요. 문제가 다시 나와야 하는데 답답하네요. 말씀하신 설정 부분은 rdma 문서에서 찾아봐야겠네요. 문제 생겼을 때 뭐라도 해야하니까요.
          
버팔로윙 02-26
네 epyc 사용중입니다. 문제를 일으킨 노드 보면 스왑이라든지 메모리 이슈는 크게 없었는데 이러네요. 다시 한 번 확인해보겠습니다.
짧은 지식으로는 oom이 떠야 하는데 커널이 제대로 일을 못하고 있나 라고 생각했는데 동작하는 동작하는 방식이 다르네요.
박문형 02-26
혹시 DELL 쪽에 기술지원 받으실수 있으시다면 저 메세지 등등을 DELL 엔지니어에게 보내서 분석해달라고 하세요..
     
버팔로윙 02-26
메세지 보내봐야겠네요. epowergate님께서 언급하셨다 Epyc, rdma때문에라도 물어봐야겠어요.
          
버팔로윙 02-29
CentOS 쓴다고 서포트 못해준다고 그러네요. 자기네 쪽에서 처리할 수 있는게 한계가 있다고 그러게요. 멜라녹스에 보내든지 해야겠어요.




QnA
제목Page 142/4803
2014-05   3045089   정은준1
2014-04   2740007   회원K
04-11   375   캔위드
04-11   431   캔위드
04-10   614   캔위드
04-10   522   차넷컴퓨터
04-10   495   구차니
04-10   493   이지포토
04-10   700   인천이승현
04-10   382   한태동
04-10   501   정은준1
04-10   607   고슴도치
04-10   846   집안청소
04-10   694   고슴도치
04-10   629   이지포토
04-10   536   pibang
04-10   824   양창권
04-10   421   멜랑꼴링
04-10   636   한강한뺨뷰
04-10   497   isaiah
04-10   630   나에게오라
04-10   595   이지포토