[решено]интернет пропадает при долгом простое

Раз уж в ArchLinux не работает параметр ядра pcie_aspm=off, опишу как это можно выполнить в ручную для конкретного устройства.
Главное найти регистр, отвечающий за ASPM … будем использовать выводы Vadim-а для устройства
Vadim
08:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 16)

Имеется три способа определения/нахождения регистра, отвественного за ASPM
1 - грубый, приблизительный, с обязательной проверкой
Ищем в конфигурационном пространстве PCI (в выводе sudo lspci -s <num_bus> -xxx) в диапазоне от 60h до 90h байт, равный значению от 40 до 43
Пример Vadim-а
sudo lspci -s 08:00.0 -xxx
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 10 b0 02 02 c0 8c 68 00 10 50 10 00 11 7c 47 00
80: 40 00 11 10 00 00 00 00 00 00 00 00 00 00 00 00
90: 00 00 00 00 1f 08 0c 00 00 00 00 00 02 00 00 00
и видим по смещению 80h байт, равный 40, и делаем предположение, что наш регистр 80h, но это требует дальнейшего уточнения
2 - на основании вывода lspci -vv -s <num_bus> | egrep 'Capabilities:|LnkCtl:'
Смотрим вывод Vadim-а
Capabilities: [40] Power Management version 3
Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
Capabilities: [70] Express (v2) Endpoint, MSI 01
Важно значение 70 - смотрим значение байта по этому смещению 70h и видим там 10 (если не 10, то что то пошло не так - нужно остановиться)
… и находим регистр: 70 + 10 = 80 - то есть получили то же знчение.
3 - самый правильный способ, описывать не буду - муторно (описан в DOC), но в итоге получается тоже 80h ... проверил

Значение регистра 80h равно 40 - Что означает это значение?
Согласно DOC, если это значение перевести в двоичную систему, то первые два бита (0 - 1) определяют режимы ASPM
00 = L0 only  (шина будет работать без экономии энергии)
01 = L0s only (прекращается подача пустых сигналов в одном направлении, если отсутствуют какие-либо данные)
10 = L1 only (прекращается подача пустых сигналов в обоих направлениях)
11 = L1 and L0s (разрешены оба режима)
Если перевести числа 40h, 41h, 42h, 43h в двоичную систему и посмотреть только биты 0 - 1, то увидим
40h …. 00
41h …. 01
42h …. 10
43b …. 11
У Vadim-а значение регистра 40, то есть ASPM отключен, что потверждает и его вывод (ASPM Disabled)
Vadim
LnkCtl: ASPM Disabled; RCB 64 bytes, Disabled- CommClk+

Используя утилиту setpci можно смотреть значение регистра
sudo setpci -s <num_bus> 0xR.X
где <num_bus> - номер шины, 0xR - регистр, .X - или .B или .W тли .L (сколько байт 1 или 2 или 4)
Мой пример,
sudo setpci -s 03:00.0 0x70.B
42
Записать значение в регистр (то же, что и смотреть, но в конце прописываем значение)
sudo setpci -s 03:00.0 0x70.B=0x40
Проверяем
sudo setpci -s 03:00.0 0x70.B
40
Для окончательной проверки смотрим вывод ... и видим ASPM Disabled
sudo lspci -vv -s 03:00.0 | grep 'ASPM.*abled;'
		LnkCtl:	ASPM Disabled; RCB 64 bytes, Disabled- CommClk+
Как то так ...

EDIT 1 - внес изменения - писал по памяти и не много ошибся, согласно спецификации режимы L0, L1 ... определяют два бита (0 - 1), а не четыре
0 - 1 - Active State Power Management (ASPM) Control
2      - RsvdP
3      - Read Completion Boundary (RCB)
Ошибки не исчезают с опытом - они просто умнеют
vasek,тебе только профессором информатики или в солидной компьютерной фирме работать а не каком-то заводе(вроде где-то ты писал про завод?извини если попутал).на производстве,где я работал,был програмист,Федор,так тот на коленке за время планерки программы писал для компьютерной системы АСУ,талант
.
vasek
У Vadim-а значение регистра 40, то есть ASPM отключен
ASPM я ничем не отключал
sudo lspci -vv -s 03:00.0 | grep 'ASPM.*abled;'
ничего не выдает.
и с праздником.
Linux Forever!
Vadim
sudo lspci -vv -s 03:00.0 | grep 'ASPM.*abled;'
Почему ты пишешь 03:00.0 - у тебя шина 08:00.0 ....

PS - что то поздно и совсем запутался .... смотрел на одно, а писал о другом .... переписывал раз 5, вроде сейчас все правильно.
Поэтому на сегодня заканчиваю - если есть вопросы, то завтра ...
Ошибки не исчезают с опытом - они просто умнеют
Vadim
ASPM я ничем не отключал
Ты его отключил в винде .... сейчас можешь включить, записав в регистр значение 42, а после снова отключить, записав значение 40
Ошибки не исчезают с опытом - они просто умнеют
sudo setpci -s 08:00.0 0x80.B
40
sudo setpci -s 08:00.0 0x80.B=0x42
sudo setpci -s 08:00.0 0x80.B
42
теперь видно что переключается.
а как попроще сделать чтобы всегда включалось
sudo setpci -s 08:00.0 0x80.B
40
независимо от винды?мне энергосбережение сетевой вообще не надо.
Linux Forever!
Vadim
а как попроще сделать чтобы всегда включалось
sudo setpci -s 08:00.0 0x80.B
40
Прописать выполннение команды setpci -s 08:00.0 0x80.B=0x40 при загрузке системы.
Способов несколько, самый разумный написать unit, но у тебя нет systemd, а значит в твоем случае прописать команду в файл /etc/rc.local
Ошибки не исчезают с опытом - они просто умнеют
а так нельзя?
/etc/udev/rules.d/81-net-powersave.rules

ACTION=="add", SUBSYSTEM=="net", KERNEL=="*", RUN+="/usr/bin/iw dev $name set power_save off"
или так?

ACTION=="add", SUBSYSTEM=="net", KERNEL=="eth*,wlan*", RUN+="/usr/bin/iw dev $name set power_save off"
Linux Forever!
Vadim
а так нельзя?
На нашем ядре это не сработает .... уже писал выше
vasek
zgrep PCIEASPM /proc/config.gz
CONFIG_PCIEASPM=y
CONFIG_PCIEASPM_DEFAULT=y
# CONFIG_PCIEASPM_POWERSAVE is not set
# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set
# CONFIG_PCIEASPM_PERFORMANCE is not set
ядро не знает, что такое power_save ... знает только default
Или прописать команду в autostart или после запуска по горячей клавише, на которую повешена эта команда.

PS - я так и не понял - у тебя команда (через регистр) на отключение работает нормально?
Ошибки не исчезают с опытом - они просто умнеют
работает
setpci -s 08:00.0 0x80.B=0x40

lspci -vv -s 08:00.0 | egrep 'LnkCtl:'
		LnkCtl:	ASPM Disabled; RCB 64 bytes, Disabled- CommClk+
sudo setpci -s 08:00.0 0x80.B=0x42
lspci -vv -s 08:00.0 | egrep 'LnkCtl:'
		LnkCtl:	ASPM L1 Enabled; RCB 64 bytes, Disabled- CommClk+
Linux Forever!
vasek,с сетевой понятно,как еще проверить usb wifi свисток?
# iwconfig
lo        no wireless extensions.

eth0      no wireless extensions.

wlan0     IEEE 802.11  Mode:Monitor  Frequency:2.417 GHz  Tx-Power=20 dBm
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:off

Power Management:off,энергосбережение отключено?
Linux Forever!
 
Зарегистрироваться или войдите чтобы оставить сообщение.