LINUX.ORG.RU

Пропадает сеть

 ,


1

2

Происходят рандомные дисконекты примерно пару раз в день. Погуглив, поменял модуль r8169 на r8168, но проблема не ушла.

lspci | grep Ethernet
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 11)

Это только происходит на Debian Jessie, до этого на всех rpm-дистрибутивах, что использовал было ОК.

Куда копать?

Спасибо.

★★★★★

Последнее исправление: awesomenickname (всего исправлений: 1)

Ответ на: комментарий от awesomenickname

Да, разумеется 1083. По памяти писал, ошибся.

В общем тоже однажды столкнулся с такой проблемой. Вот один из багрепортов, связанный с этой темой. https://bugzilla.kernel.org/show_bug.cgi?id=38632 Там их на самом деле много. Причём у меня оно не дисконнектилось полностью, а переходило в какой-то хитрый режим, при котором скорость падала до 1-1.5Мбит/с. Чтобы как-то жить, нарисовал вот такой вот временный костыль:

#!/usr/bin/perl
#

use strict;
use warnings;

use POSIX;

my $timeout = 5;

my @interfaces = (
                {
                        name    => 'eth0',
                        active  =>      1,
                        irq             =>      23,
                        address =>      '10.0.0.10',
                        net             =>      '10.0.0.0',
                        netmask =>      '24',
                        gateway =>      '10.0.0.11',
                        table   =>      'test'
                },
                {
                        name    => 'eth1',
                        active  =>      1,
                        irq             =>      23,
                        address =>      '192.168.1.1',
                        net             =>      '192.168.1.0',
                        netmask =>      '24',
                        gateway =>      '',
                        table   =>      'main'
                },
                {
                        name    => 'eth2',
                        active  =>      1,
                        irq             =>      23,
                        address =>      '172.16.0.25',
                        net             =>      '172.16.0.0',
                        netmask =>      '24',
                        gateway =>      '172.16.0.254',
                        table   =>      'main'
                }
);

my $atable = 'test';

my $logfile = "/var/log/asm_fix.log";
open(my $log, '>>', $logfile);
select($log);
$| = 1;

sub timestamp {
        my $time = localtime();
        return("$time ");
}

sub irq_state {
        my $irq = shift;
        open(my $spurious, '<', "/proc/irq/$irq/spurious");
        my $line;
        while (<$spurious>) {
                $line = $_;
                last if $. == 1;
        }
        my @string = split(' ', $line);
        close($spurious);
        return $string[1];
}

sub iface_restart {
        my $iface = shift;
        print(timestamp(), "Restarting interface $$iface{'name'} $$iface{'address'}\n");
        my @command;
        @command = ('ip', 'link', 'set', 'down', 'dev', $$iface{'name'});
        print(timestamp(), join(' ', @command, "\n"));
        system(@command);
        @command = ('ip', 'link', 'set', 'up', 'dev', $$iface{'name'});
        print(timestamp(), join(' ', @command, "\n"));
        system(@command);
        @command = ('ip', 'route', 'add', "$$iface{'net'}/$$iface{'netmask'}", 'dev', $$iface{'name'}, 'proto', 'kernel', 'scope', 'link', 'src', $$iface{'address'}, 'table', $atable);
        print(timestamp(), join(' ', @command, "\n"));
        system(@command);
        if ($$iface{'gateway'}) {
                @command = ('ip', 'route', 'add', 'default', 'via', $$iface{'gateway'}, 'table', $$iface{'table'});
                print(timestamp(), join(' ', @command, "\n"));
                system(@command);
        }
        print(timestamp(), "Interface $$iface{'name'} restarted\n");
}

print(timestamp(), "Starting.\n");
my $pid = fork();
exit if $pid;
die "Couldn't fork: $!\n" unless defined($pid);

POSIX::setsid() or die "Can't start a new session: $!\n";

my $time_to_die;

sub signal_handler {
        print(timestamp(), "Exiting.\n");
        close($log);
        $time_to_die = 1;
}
$SIG{INT} = $SIG{TERM} = $SIG{HUP} = \&signal_handler;
$SIG{PIPE} = 'IGNORE';

until ($time_to_die) {
        sleep($timeout);
        foreach my $interface (@interfaces) {
                if ($$interface{'active'}) {
                        my $count = irq_state($$interface{'irq'});
                        if ($count == 0) {
                                iface_restart($interface);
                        }
                }
        }
}

Проще говоря, когда интерфейс переходит в этот старнный режим, у него меняется значение в /proc/irq/$irq/spurious, я это дело отслеживал и если значение указывает на кривой режим, тупо рестартил сеть. Потом просто заменил железо, поэтому нормального фикса не придумал и обходился таким кривоватым костылём. Есть ли другие методы решения - не в курсе.

shell-script ★★★★★
()
Ответ на: комментарий от awesomenickname

Я тоже пытался, на одних машинках помогало, на других - нет(у меня с этим чипом около двадцати машин было).

shell-script ★★★★★
()

та же проблема на свежей бубунте, но воспроизводится когда в спящий режим перехожу, комп не спит, сеть пропадает, рестарт нетворкинга не помогает, полная перезагрузка снова в линуксы не помогает, только перезагрузка в винды, а потом в линуксы. видимо, что-то с прошивкой.

exhu
()
Ответ на: комментарий от exhu

А у меня помогает банальное переключение тумблера вкл/выкл на нетворкменеджере, возможно проблемы разные.

awesomenickname ★★★★★
() автор топика
Ответ на: комментарий от shell-script

А может ядро обновить, или ты ловил такой баг и на свежих ядрах? - Я как-то с этим багом еще не сталкивался, может что специфично для deb дистрибутивов, не знаю.

awesomenickname ★★★★★
() автор топика

такая же фигня недавно началась, до этого было всё отлично. заменил 8169 на 8168, посмотрим, что будет дальше

Deleted
()
Ответ на: комментарий от awesomenickname

На свежих ядрах не проверял. Я с этим багом столкнулся пару лет назад и, как писал выше, сперва написал костыль, а потом сменил железо. Сейчас у меня нет материнок с этим контроллером, поэтому проверить не смогу.

shell-script ★★★★★
()

Прошло 3 дня, сеть вроде не пропадала, тему можно закрывать.

awesomenickname ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.