Автор Тема: Кернел бъг или imap бъг  (Прочетена 1264 пъти)

sandman_7920

  • Напреднали
  • *****
  • Публикации: 44
    • Профил
Кернел бъг или imap бъг
« -: Dec 15, 2008, 13:21 »
От известно време ми забива server.
Подозирах, че е от r8169 PCI-E drivers. Патчнал съм драйверите от кернел 2.6.27-ххх, но PC-to продължава да забива.
Ето и малко лог

Dec 15 09:07:17 XXX kernel: Bad page state in process 'imapd'
Dec 15 09:07:17 XXX kernel: page:c19a3580 flags:0x8008000c mapping:00000000 mapcount:0 count:0
Dec 15 09:07:17 XXX kernel: Trying to fix it up, but a reboot is needed
Dec 15 09:07:17 XXX kernel: Backtrace:
Dec 15 09:06:30 XXX kernel: Pid: 24841, comm: imapd Not tainted 2.6.25.19-IMQ-NEW-smp #1
Dec 15 09:06:30 XXX kernel:  [<c0153313>] bad_page+0x73/0xb0
Dec 15 09:06:30 XXX kernel:  [<c0153957>] free_hot_cold_page+0x187/0x1a0
Dec 15 09:06:30 XXX kernel:  [<c0156f5c>] put_page+0xbc/0xf0
Dec 15 09:06:30 XXX kernel:  [<c0150c1a>] generic_file_aio_read+0x33a/0x5e0
Dec 15 09:06:30 XXX kernel:  [<c0171e35>] do_sync_read+0xd5/0x120
Dec 15 09:06:30 XXX kernel:  [<f8dc383a>] rtl8169_rx_interrupt+0x3aa/0x590 [r8169] -----> Отново r8169 проблем.
Dec 15 09:06:30 XXX kernel:  [<c01360e0>] autoremove_wake_function+0x0/0x40
Dec 15 09:06:30 XXX kernel:  [<c0139010>] lock_hrtimer_base+0x20/0x50
Dec 15 09:06:30 XXX kernel:  [<c035002c>] security_file_permission+0xc/0x10
Dec 15 09:06:30 XXX kernel:  [<c0171ede>] rw_verify_area+0x5e/0xd0
Dec 15 09:06:30 XXX kernel:  [<c0128635>] __do_softirq+0x75/0xf0
Dec 15 09:06:30 XXX kernel:  [<c0171d60>] do_sync_read+0x0/0x120
Dec 15 09:06:30 XXX kernel:  [<c01726ed>] vfs_read+0x9d/0x140
Dec 15 09:06:30 XXX kernel:  [<c0172bf1>] sys_read+0x41/0x70
Dec 15 09:06:30 XXX kernel:  [<c0104092>] syscall_call+0x7/0xb
Dec 15 09:06:30 XXX kernel:  =======================

Ако някой има какво да каже моля да го направи :):)
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Кернел бъг или imap бъг
« Отговор #1 -: Dec 15, 2008, 14:31 »
Не е imap бъг и най-вероятно не е r8169 проблем. Но не знам за причината - може да е проблемна РАМ, може да е бъг някакъв в async i/o-то в ядрото.
Активен

"Knowledge is power" - France is Bacon

sandman_7920

  • Напреднали
  • *****
  • Публикации: 44
    • Профил
Re: Кернел бъг или imap бъг
« Отговор #2 -: Dec 15, 2008, 14:37 »
До сега се е случило да забие два пъти и двата пъти е в imapd.
Активен

foxb

  • Напреднали
  • *****
  • Публикации: 175
    • Профил
    • WWW
Re: Кернел бъг или imap бъг
« Отговор #3 -: Dec 15, 2008, 14:54 »
Провери си паметта обнови си и imapd...

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Кернел бъг или imap бъг
« Отговор #4 -: Dec 15, 2008, 16:09 »
Проблемът очевидно се случва в kernelspace, което в случая въпреки че не си пейстнал стойност на EIP, може да се докаже лесно :) Значи адресното пространство на един процес (32-битова архитектура) почва от 0х00000000 и стига до 0хffffffff. Имаш 3/1 разделение userspace/kernelspace, което значи че първите 3 гигабайта са ти паметта на процеса, a "горният" 1 гигабайт се ползва от ядрото. Ако превърнеш 3*1024*1024*1024 (3 гигабайта) в шеснадесетичен вид ще установиш, че паметта на ядрото ти се мапва на адресите след 0xc000000 (3221225472).

Въпросния crashdump реве че проблемният адрес се намира на 0хc19a3580, което е в последния гигабайт, т.е паметта използвана от ядрото.

Въпросният последен 1 гигабайт се мапва по един и същ начин в адресното пространство на всеки един процес. Въпреки което, в usermode (ring3) тази памет не може да се чете, страниците, които я съдържат се маркират без read флаг (с малки изключения).

Една програма не би следвало да достъпва памет на такива адреси. Ако това се случи (поради някакъв бъг), възниква page fault, прави се една проверка може ли или не може да се чете паметта и ако не може (какъвто е случая), програмата се терминира със SIGSEGV. Такива stack traces и тем подобни неща не се изгенерират.

Когато от usermode се прехвърлим в kernelmode обаче (което обикновенно става когато процеса извика някой syscall), управлението се прехвърля на ядрото, което работи с по-високи привилегии (ring0). Оттам въпросната памет над 3-тия гигабайт може да се достъпва. Въпреки което, ядрото, както и процеса използват виртуална памет. Ако ядрото се опита да достъпи невалиден адрес (примерно такъв виртуален адрес, на който няма мапирана физическа памет или пък страницата има идиотски атрибути, тогава най-вероятно ще възникне kernel panic или нещо стряскащо от сорта, в зависимост от това къде точно се е случило.

Според твоят stack trace всичко е започнало когато imapd е извикало syscall-а read(), за да изчете нещо си от някакъв файл:

Цитат
^^^
..........
Dec 15 09:06:30 XXX kernel:  [<c01726ed>] vfs_read+0x9d/0x140
Dec 15 09:06:30 XXX kernel:  [<c0172bf1>] sys_read+0x41/0x70
Dec 15 09:06:30 XXX kernel:  [<c0104092>] syscall_call+0x7/0xb
.....


А, да, това:

Цитат
Dec 15 09:06:30 XXX kernel:  [<f8dc383a>] rtl8169_rx_interrupt+0x3aa/0x590 [r8169

Не би трябвало да е проблем. Просто се е вдигнало прекъсването на мрежовата карта и въпросния interrupt handler инсталиран от r8169 се е вдигнал, за да ти обработи пристигналия пакет.

Защо забива само в imapd...е интересен въпрос, но може да се намерят доста обяснения. Примерно imap гледам, че ползва асинхронно I/O, за да чете от файловата система, това не е нещо толкова често срещано. Може би наистина това ядро има бъг свързан с VFS layer-a и асинхронното И/О.

Също така може да имаш проблем с паметта...generic_file_aio_read ти изчита файла и съхранява изчетеното в страници от паметта, намиращи се на ъъъъм....дефектно място.

И да, на теория е възможно (макар и малко вероятно) самият r8169 драйвер да е бъглив и да презаписва по грешка памет с глупости. Това, което ме кара да се съмнявам в тази теория е че се случва както казваш единствено в imapd. Би следвало да става и с други процеси, би следвало да става и по-често.

Всъщност мога да измисля и още доста конспиративни теории по въпроса, но не мисля, че това ще помогне с нещо. Това, което според мен е най-вероятното е или дефектирала памет, или някакъв бъг точно в тази версия на ядрото, която ползваш.
Активен

"Knowledge is power" - France is Bacon

sandman_7920

  • Напреднали
  • *****
  • Публикации: 44
    • Профил
Re: Кернел бъг или imap бъг
« Отговор #5 -: Dec 15, 2008, 17:21 »
Мерси на всички за отговорите. Ще видим каква ще я сътворя.
Активен

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Currier-imap
Настройка на програми
PlamenB 7 926 Последна публикация Jun 07, 2005, 13:09
от
IMAP с поддръжка на SSL
Идеи и мнения
wiki 2 1958 Последна публикация Sep 26, 2005, 12:54
от laskov
проблем с идентификацията на imap
Настройка на програми
sakyt4o 2 1578 Последна публикация Jan 08, 2006, 13:41
от alabal
Imap/pop огледален сървър
Идеи и мнения
laskov 2 1902 Последна публикация Mar 15, 2007, 15:57
от nikoni
POP3 или IMAP
Настройка на програми
nov_chovek 2 2016 Последна публикация Mar 07, 2009, 19:58
от liktion