Страница 2 из 2

Добавлено: 11 ноя 2006, 02:20
red f0x
Llama, спасибо, кошерная идея, кста :)

Добавлено: 11 ноя 2006, 02:23
kif0rt
Стоп .. что значит системный своп нельзя использовать. У меня был один своп. И я его использовал и для суспенда и как своп собственно ... или я не так понял ?! А что пишет dmesg | grep suspend ??

Добавлено: 11 ноя 2006, 17:25
red f0x
kif0rt, похоже, что можно. Я ошибси. Дело не в свопе. Я уже не знаю, в чём, собсна дело...

Народ, у кого эта хрень работает, расскажите, как происходит процесс саспенда через swsusp2... hibernate 1.94 у меня теперь работает, но как-то странно. Инициирует процесс саспенда, выплёвывает вот это

Код: Выделить всё

suspend2: 2.2.8: Initiating a software suspend cycle.
Freezing processes 
А дальше ничего не происходит. Питание с дисков не убирается. Система не отключается, не смотря на powerdownmethod = 5.

В логе hibernate пишет:

Код: Выделить всё

Starting suspend at Сбт Ноя 11 02:53:02 EET 2006
hibernate: [01] Executing CheckLastResume ...
hibernate: [01] Executing CheckRunlevel ...
hibernate: [01] Executing LockFileGet ...
hibernate: [01] Executing NewKernelFileCheck ...
hibernate: [10] Executing EnsureSwsusp2Capable ...
hibernate: [11] Executing XHacksSuspendHook1 ...
hibernate: [20] Executing MiscLaunchAuxFunc1 ...
Executing echo "Good night!"...
Good night!
hibernate: [59] Executing RemountXFSBootRO ...
hibernate: [89] Executing SaveKernelModprobe ...
hibernate: [91] Executing ModulesUnloadBlacklist ...
Some modules failed to unload: nvidia
hibernate: [95] Executing XHacksSuspendHook2 ...
hibernate: [97] Executing ChangeToSwsuspVT ...
hibernate: [98] Executing CheckRunlevel ...
hibernate: [98] Executing FullSpeedCPUSuspend ...
hibernate: [98] Executing Swsusp2ConfigSet ...
hibernate: [99] Executing DoSwsusp2 ...
hibernate: Activating suspend ...
Видно, что он не может выгрузить модуль nvidia. Раньше ещё не мог найти компрессор, но компрессор я выставил в none. Вопрос, может ли невыгруженный модуль как-то сильно помешать? Несмотря на аргументы -k -f для hibernate?

Конфиги:suspend2.conf - он у меня используется как метод по умолчанию

Код: Выделить всё

# Example suspend2.conf file.
#
# See hibernate.conf(5) for help on the configuration items.
#
# NOTE: Suspend2 is an improved version of suspend-to-disk which currently
#       requires patching your kernel. For more information, see www.suspend2.net
#
#       If you do not wish to patch your kernel but still be able to suspend to
#       disk, see disk.conf instead.

### suspend2 (for Software Suspend 2)
UseSuspend2 yes
Reboot no
EnableEscape yes
DefaultConsoleLevel 1
#Compressor lzf
Compressor none
Encryptor none
# ImageSizeLimit 200

## useful for initrd usage:
SuspendDevice swap:/dev/hdb5

## Powerdown method - 3 for suspend-to-RAM, 4 for ACPI S4 sleep, 5 for poweroff
PowerdownMethod 5

## Any other /proc/software_suspend setting can be set like so:
# ProcSetting expected_compression 50

## Or traditionally like this:
# Suspend2AllSettings 0 0 2056 65535 5

## Or even from the results of hibernate --save-settings with this:
# Suspend2AllSettingsFile /etc/hibernate/suspend-settings.conf

## For filewriter:
# FilewriterLocation /suspend_file 1000
# VerifyFilewriterResume2 yes

## Specify a userui like this:
# ProcSetting userui_program /usr/local/sbin/suspend2ui_text

# Scale CPU to full speed to make sure we suspend as fast as possible.
FullSpeedCPU yes

Include common.conf

Код: Выделить всё

devel:/home/f0x# cat /etc/hibernate/common.conf
# Configuration options common for suspending to disk or RAM.
# Options are not case sensitive.
#
# See hibernate.conf(5) for help on the configuration items.

##############################################################################
### Some global settings
##############################################################################

Verbosity 1
LogFile /var/log/hibernate.log
LogVerbosity 1
AlwaysForce yes
AlwaysKill yes

##############################################################################
### Scriptlets
###   Scriptlets provide support for doing all sorts of things before and after
###   suspending. The defaults settings here should work for most people, but
###   you may wish to edit these to taste. Consult "hibernate -h" for help on
###   the configuration settings.
##############################################################################

### clock
SaveClock restore-only

# see http://bugs.debian.org/317479
RemountXFSBoot yes

### lilo
EnsureLILOResumes yes

### misclaunch
OnSuspend 20 echo "Good night!"
OnResume 20 echo "Good morning!"

### modules
UnloadBlacklistedModules yes
LoadModules auto

SwitchToTextMode yes
Из лога kern.log при загрузке с перегенерированным initrd

Код: Выделить всё

Nov 11 15:52:23 localhost kernel: Suspend2 2.2.8: Swapwriter: Signature found.
Nov 11 15:52:23 localhost kernel: Suspend2 2.2.8: Resuming enabled.
Nov 11 15:52:23 localhost kernel: Suspend2 2.2.8: Normal swapspace found.
Nov 11 15:52:23 localhost kernel: Suspend2 2.2.8: No image found.
Nov 11 15:52:23 localhost kernel: Suspend2 2.2.8: Read image returned -61.
оно опять не может прочитать имидж... Возможно, из-за того, что процесс саспеда не был доведён до конца? Но он по ходу и не доходит до конца сам по себе. Останавливается на freezing processes и всё. Жду ~5 минут, успеваю сходить покурить - прихожу - картина 1:1 та же, что была... Помогает только SysRq + O

Добавлено: 11 ноя 2006, 18:13
Llama
red f0x, для начала попробуй без nvidia - этот модуль. как и все пропиетарные поделки, малопредсказуем.

Добавлено: 12 ноя 2006, 02:06
red f0x
Llama, абсолютно однофигственно - что с nvidia, что без. Пробовал удалять его - такая же херня.
Короче, спасибо ещё раз всем ответившимся, но боюсь, придётся забить и всё это останется тайной для меня, ибо уже не знаю, в какую сторону думать :cry:

Добавлено: 13 ноя 2006, 02:14
red f0x
Выяснилось ещё кое-что, впрочем, это всё равно мало на что влияет в моём случае, ибо не понимаю сути происходящего... Так вот, впаял я в ядро PM_DEBUG, потом сделал:
echo 1 > /sys/power/suspend2/freezer_test
echo 6 > /sys/power/suspend2/user_interface/default_console_level
echo > /sys/power/suspend2/do_suspend

В ответ система выдала следующее:

Код: Выделить всё

Suspend2 2.2.8: Initiating sofware suspend cycle.
Freezing processes
Stopping tasks:============================================================Freezing bdev...===========================Freezing threads...=======================
   stopping tasks timed out after 20 seconds (2 tasks remaining)
   pktgen/0
   syslogd
Restarting tasks... <6> Strange, syslogd not stopped
Done
[...]
Restarting tasks... <6> Strange, init not stopped
Done
Все последующие попытки сказать echo > /sys/power/suspend2/do_suspend приводят к тому же, правда там варьируется число тасков, которые не были заморожены, иногда бывает просто pktgen/0. Из прочитанного в Documentation/power/suspend2.txt я так понял, что если ядру не удаётся заморозить все таски, то имидж памяти просто не сбрасывается на своп и процесс саспенда не происходит. Вот почему ядро не могло найти образ на свопе... Потому что его там никто не сохранял. Странно, что ядро не восстанавливает работоспособный котекст и всё что можно делать, это пытаться и дальше сделать саспенд в надежде, что ядру удастся заморозить все задачи и потоки или сделать шатдаун через SysRq + O. Почему не может быть заморожен syslogd - абсолютно непонятно. Причину нашёл, но как её устранить, уже точно не знаю.

Добавлено: 23 мар 2007, 21:10
red f0x
Поднял эту древнюю тему ибо обнаружил ещё одно занятное обстоятельство. Не хотелось бы делать поспешных выводов, но... Похоже, что xfs (в смысле, ФС, а не фонт-сервер :) ) не совместима с suspend(2). При попытке сделать саспенд (ядро 2.6.20, патч suspend2 - 2.2.9.10, hibernate - 1.93, файловая система - xfs) получаем жалобу на то, что xfssyncd not stopped. На самом деле, в коде (fs/xfs/linux-2.6/xfs_super.c::xfssyncd() - занимается синхронизацией ФС, как явствует из названия ) этот поток не устанавливает никаких PF_NOFREEZE и не вызывает try_to_freeze(). В общем, не знаю, как отнестись к этой занятной багофиче, но очень похоже, что просто не судьба... :?

Есть одна безумная идея - вставить в xfssyncd():

Код: Выделить всё

current->flags |= PF_NOFREEZE;
Но это уже скорее от безысходности. В принципе, такую правку вполне таки можно сделать, но кто даст гарантию, что поток будет вести себя тихо после слива имиджа системы? И если не будет, то чем это всё может обернуться? Кстати, интересная трабла.

Гугл молчит, как румынский партизан...

Чтобы подтвердить или опровергнуть мои догадки, народ, поделитесь, пожалуйста, статистикой - у кого ФС - xfs и при этом работает suspend или suspend2.

Добавлено: 23 мар 2007, 23:19
kif0rt
Крайне интересное расследование ... Может описать траблу на suspend2.net в отдел багов ? У меня точно никогда суспенд на xfs не был .... Жаль, проверить не могу.

Добавлено: 23 мар 2007, 23:51
red f0x
Нет, для начала я бы всё-таки хотел узнать, как оно у народа. А то не очень хорошо выйдет, шуметь попусту. Я ещё до конца не уверен, что это багофича. Но если подтвердится, надо будет тогда скорее на xfs жаловаться, ИМХО, а не на suspend2, т.к. выходит, что это проблема именно xfs из-за того, что она не пускает систему в suspend. Кстати, вот что касается ядрёного потока kpktgend (генератор пакетов - для тестирования сети), то тут уже даже немного странно, ИМХО, что он не поддерживает suspend. Как и следовало ожидать, в net/core/pktgen.c::pktgen_thread_worker() тоже не обнаружено никаких следов работы с заморозкой. Но тут проблема может быть устранена нехитрым workaround'ом - собрать pktgen в модуль и просто грузить его только тогда, когда он нужен (вообще, наиболее разумное решение, ибо нефиг ему на мой взгляд быть статически влинкованным в ядро). А когда не нужен - просто выгружать. Лично я его вообще выкинул, т.к. сейчас он мне уже совсем не нужен.