2015-07-20 5 views
1

У меня есть приложение, которое использует большое количество огромных страниц для целей DPDK. Я выделяю страницы при запуске системы, а затем загружаю/выгружаю приложение несколько раз. После некоторых перезагрузок программа больше не может выделять огромные страницы. Когда я смотрю на meminfo, я вижу:CentOs7: HugePages_Rsvd равно 18446744073709551615

HugePages_Total: 2656 
HugePages_Free:  1504 
HugePages_Rsvd:  18446744073709551615 
HugePages_Surp:  0 

Это будет по-прежнему так и не позволит любому приложению выделять огромные страницы, пока не перезагрузите машину.

Любая идея?

+1

Я полагаю, что есть некоторое значение в том, что это точно 2 ** 64-1. –

ответ

3

В decrement_hugepage_resv_vma попытки функции -1 для resv_huge_pages, , но без знака арифметических заставляет его вместо ULONG_MAX (без знака длиной resv_huge_pages), который является +18446744073709551615 на 64-битных системах.

alloc_huge_page() 
    page = dequeue_huge_page_vma(h, vma, addr, avoid_reserve) 
     decrement_hugepage_resv_vma() { 
      h->resv_huge_pages--; 
     } 

static void return_unused_surplus_pages(struct hstate *h, 
        unsigned long unused_resv_pages) 
{ 
    h->resv_huge_pages -= unused_resv_pages; 
} 

Другая меньше шансов причина заключается в gather_surplus_pages функция() может перелив resv_huge_pages.

Попробуйте следующий при вас проверить:

while [ 1 ] ; do date | awk '{print $4}' >> HugePages_Rsvd.log; cat /proc/meminfo | grep HugePages_Rsvd >> HugePages_Rsvd.log; sleep 1; done 

Я догадывался, если resv_huge_pages будет увеличиваться медленно, так проблема в Н-> resv_huge_pages + = дельта;

Но если resv_huge_pages вдруг становится -1 (unsigned long == 18446744073709551615), то проблема в h-> resv_huge_pages--; (Resv_huge_pages был 0 и AFTRE декремента == -1)

Зависит от вас ядра вы можете проверить патч мм: NUMA: отключить защиту изменения для VMA (VM_HUGETLB) 6b79c57b92cdd90853002980609af516d14c4f9c и BUG large value for HugePages_Rsvd

+0

Спасибо! Как вы думаете, эта проблема может быть связана с патчем, предложенным в ссылке, которую вы отправили? Я не понял, какое поведение приложения может вызвать эту ошибку. –

+0

Отладка покажет. Попробуйте приложение cat/proc/+, чем ftrace. Лучший способ перестроить ядро ​​с вами, отлаживая информацию. – cosinus0