Александр Наталенко опубликовал (http://natalenko.name/myfiles/interviews/nigelc_rus.html) интервью с Найджелом Каннингемом (Nigel Cunningham), разработчиком подсистемы TuxOnIce (http://www.tuxonice.net/) (до переименования - Suspend2) для Linux ядра, реализующей поддержку "спящего" режима со сбросом образа памяти на диск. Кроме проекта TuxOnIce, Найджел также участвует в разработке свободной среды дистанционного обучения Moodle (http://moodle.org/) и системы управления web-контентом Drupal, совмещая низкоуровневое программирование на языке Си с разработкой web-приложений на PHP. В повседневной практике Найджел использует Ubuntu Linux, в качестве рабочего окружения используется Xfce4 с панелью AWN.
Найджел разрабатывает TuxOnIce практически в одиночку, кроме людей временами присылающих патчи, основную работу (дизайн, разработка, поддержка и документация) выполняет один человек. Тем не менее, TuxOnIce хоть и медленно но совершенствуется, например, последний выпуск TuxOnIce 3.2 в...URL: http://lkml.org/lkml/2011/6/18/98
Новость: http://www.opennet.me/opennews/art.shtml?num=30922
В стандартном саспенде оче не хватает сжатия для быстрой гибернации и сбрасывания памяти в файл потому что апгрейды памяти(да и держать 16 гиг свопа как то несуразно).
В стандартной гибернации не так давно уже появилось сжатие.
Процедура сжатия вряд ли ускорит процесс засыпания.
Должна. Проблем же в том, что память долго на диск сбрасывается/читается, проц не нагружен. Сжатие должно уменьшить размер путем нагрузки проца, на современных 4х ядерных это вполне допустимо, я считаю.
>на современных 4х ядерных это вполне допустимона современных SSD это не нужно
Ссд редки, например. Да и всеравно, сколько на ссд будет записываться 3 гигабайта? 10 секунда в лучшем случае, не самое приятное ощущения в плане юзабилити.
У меня не самая быстра SSD (из первого поколения, 100мб/с чтение-запись), проц C2D 2.4, 4Gb RAM, засыпаю в файл (без свопа), сжатие LZO. Вермя засыпания/просыпания сильно зависит от занятой RAM, это может быть от пары секунд до 15-20.
Лол, нафик так жить. У меня на SSD Mageia загружается за 12,5 секунд без всяких спящих режимов и плясок с конфигами.
загрузка "рабочего стола" и "всего что нужно, уже открытых документов, проектов и прочего в том состоянии, с которого ты поднялся со стула N часов назад" - это две большие разницы.
Но ускорит просыпание. Что важнее :)
> Процедура сжатия вряд ли ускорит процесс засыпания.Современные алгоритмы сжатия вполне могут ускорить запись на диск. Например LZO2 и QuickLZ на минимальных степенях сжатия могут запросто упереться в диск, при этом все еще давая сжатие в пару раз. Так можно запросто выиграть по времени. А уж распаковка LZ-алгоритмов нынче легко достигает гигабайтов в секунду и может даже обогнать стандартный memcpy() за счет меньшего объема в src при том же объеме dst.
Что, в общем-то, и демонстрирует btrfs при включенном сжатии. Скорость возрастает.
> Что, в общем-то, и демонстрирует btrfs при включенном сжатии. Скорость возрастает.Теоретики млин...
http://www.phoronix.com/scan.php?page=article&item=btrfs_lzo...
> phoronix.comХорошо хоть на сайт к Кашпировскому не послал. ;)
В двух словах:Учитывая то, что сжатые данные надо всё таки записать на диск, то скорость
сжатия должна быть, минимум, в двое быстрее записи на этот диск.
То есть, имея 100МБ/c диск, плющить надо со скоростью 200Мб/c (это округлённые цифры).А с точки зрения оптимальности по размеру, при скорости сжатия равной
скорости диска, коэффициент не превысит 0.10 (между прочим не плохая цифра)
И только уменьшая этот коэффициент получим прирост в скорости.
---Почему БТР быстро работает?!! Да потому-что 30% времени он них...я не делает.
Точнее делает, но скорости от этого не прибавляется. Так что он компенсирует
алгоритмами сжатия собственную заторможенность, так сказать, на чужой шее выехал.
> Учитывая то, что сжатые данные надо всё таки записать на диск, то скорость сжатия должна быть, минимум, в двое быстрее записи на этот диск.[root@acergeni-x86_64 22:18:13 /home/eugeni] $ dd if=/dev/mem | lzop -1 | wc -c
5750784+0 records in
5750784+0 records out
2944401408 bytes (2,9 GB) copied, 34,7794 s, 84,7 MB/s
859838555[root@acergeni-x86_64 22:19:11 /home/eugeni] $ hdparm -t /dev/sda
/dev/sda:
Timing buffered disk reads: 194 MB in 3.01 seconds = 64.47 MB/secВ моем конкретном случае lzo, пусть даже с минимальной компрессией, уже намного поможет. Вместо того чтобы записать 3GB со скоростью 65.47MB/s надо будет записать только 860MB, которые поступают со скоростью 84.7MB/s.
Причем это не совсем корректный тест, так как я вообще всю память читаю - при suspend нужно прочитать/записать только те страницы которые используются. С какой стороны ни посмотри - компрессия намного выгоднее.
>[оверквотинг удален]
> [root@acergeni-x86_64 22:19:11 /home/eugeni] $ hdparm -t /dev/sda
> /dev/sda:
> Timing buffered disk reads: 194 MB in 3.01 seconds =
> 64.47 MB/sec
> В моем конкретном случае lzo, пусть даже с минимальной компрессией, уже намного
> поможет. Вместо того чтобы записать 3GB со скоростью 65.47MB/s надо будет
> записать только 860MB, которые поступают со скоростью 84.7MB/s.
> Причем это не совсем корректный тест, так как я вообще всю память
> читаю - при suspend нужно прочитать/записать только те страницы которые используются.
> С какой стороны ни посмотри - компрессия намного выгоднее.Никанает ;)
# echo 3 > /proc/sys/vm/drop_caches; sync; sync; sync; time dd if=/dev/mem | lzop -1 > /RAM.lzo;
2097152+0 записей считано
2097152+0 записей написано
скопировано 1073741824 байта (1,1 GB), 15,5731 c, 68,9 MB/creal 0m15.598s
user 0m8.506s
sys 0m14.699s# echo 3 > /proc/sys/vm/drop_caches; sync; sync; sync; time dd if=/dev/mem > /RAM.lzo;
2097152+0 записей считано
2097152+0 записей написано
скопировано 1073741824 байта (1,1 GB), 11,3049 c, 95,0 MB/creal 0m11.319s
user 0m0.638s
sys 0m7.514s
> Никанает;
> скопировано 1073741824 байта (1,1 GB), 15,5731 c, 68,9 MB/c
> скопировано 1073741824 байта (1,1 GB), 11,3049 c, 95,0 MB/cДа, а если посчитать количество байт что будет записано на диск после lzo vs без lzo и умножить на скорость? Хотя в любом случае мы сравниваем среднюю температуру по больнице :).
(В моем конкретном случае lzo быстрее диска, но это ноутбук - у вас обратная ситуация, я правильно понял?)
>> Никанает;
>> скопировано 1073741824 байта (1,1 GB), 15,5731 c, 68,9 MB/c
>> скопировано 1073741824 байта (1,1 GB), 11,3049 c, 95,0 MB/c
> Да, а если посчитать количество байт что будет записано на диск после
> lzo vs без lzo и умножить на скорость? Хотя в любом
> случае мы сравниваем среднюю температуру по больнице :).
> (В моем конкретном случае lzo быстрее диска, но это ноутбук - у
> вас обратная ситуация, я правильно понял?)Ну как видите 4 секунды. Мы ж за время боремся :)
А сплющил да, 1.1Гб почти до 225 мегов.
Правда это SSD :) (Kingston SSDNow V Series 64GB)------
Хотя пофигу...
# echo 3 > /proc/sys/vm/drop_caches; sync; sync; sync; time dd if=/dev/mem | lzop -1 > /media/vm/RAM.lzo;2097152+0 записей считано
2097152+0 записей написано
скопировано 1073741824 байта (1,1 GB), 15,5587 c, 69,0 MB/creal 0m15.578s
user 0m8.566s
sys 0m14.533s
# echo 3 > /proc/sys/vm/drop_caches; sync; sync; sync; time dd if=/dev/mem > /media/vm/RAM.lzo;2097152+0 записей считано
2097152+0 записей написано
скопировано 1073741824 байта (1,1 GB), 10,1843 c, 105 MB/creal 0m10.204s
user 0m0.558s
sys 0m6.206s---
Хотя, почти работает фишка с размонтированием.
# time (dd if=/dev/mem | lzop -1 > /media/vm/RAM.lzo; umount /media/vm);
real 0m15.472s
# time (dd if=/dev/mem > /media/vm/RAM.lzo; umount /media/vm);
real 0m16.059s
Пол секунды всего.
Решил повторить, абсолютно другие данные без сжатия:tupee vvk # echo 3 > /proc/sys/vm/drop_caches; sync; sync; sync; time dd if=/dev/mem | lzop -1 > /RAM.lzo;
dd: чтение «/dev/mem»: Неправильный адрес
6422528+0 записей считано
6422528+0 записей написано
скопировано 3288334336 байт (3,3 GB), 15,1793 c, 217 MB/creal 0m15.189s
user 0m9.862s
sys 0m13.698s
tupee vvk # echo 3 > /proc/sys/vm/drop_caches; sync; sync; sync; time dd if=/dev/mem > /RAM.lzo;
dd: чтение «/dev/mem»: Неправильный адрес
6422528+0 записей считано
6422528+0 записей написано
скопировано 3288334336 байт (3,3 GB), 97,5896 c, 33,7 MB/creal 1m37.597s
user 0m0.823s
sys 0m10.380s
> # time (dd if=/dev/mem > /media/vm/RAM.lzo; umount /media/vm);Ошибка эксперимента в копировании всего /dev/mem, в то время как при hybernete неиспользуемые области памяти и дисковые кэши не копируются, а то что остается обычно плохо сжимается. Весь прирост сокращения размера в вашем тесте в основном за счет неиспользуемой памяти, которая остается в очищенном состоянии. Попробуйте тест повторить, перед копированием забив /dev/random-ом какой-нибудь буфер так, чтобы вся свободная память необнуленной оказалась.
так и есть.
>Учитывая то, что сжатые данные надо всё таки записать на диск, то скоростьсжатия должна быть, минимум, в двое быстрее записи на этот диск.
C чего это? Применяя потоковое сжатие, можно даже чтоб скорость записи на диск была быстрее, если сжатые данные будут достатчно сжаты.
>>Учитывая то, что сжатые данные надо всё таки записать на диск, то скорость
> сжатия должна быть, минимум, в двое быстрее записи на этот диск.
> C чего это? Применяя потоковое сжатие, можно даже чтоб скорость записи на
> диск была быстрее, если сжатые данные будут достатчно сжаты.Пример потокового сжатия на 100 MB/c
С каких пор Си стал низкоуровневым ?
> С каких пор Си стал низкоуровневым ?Язык имеющий директиву asm() - низкоуровневый (Это такое неофициальный критерий)
>> С каких пор Си стал низкоуровневым ?
> Язык имеющий директиву asm() - низкоуровневый (Это такое неофициальный критерий)лол. у меня есть низкоуровневый basic.
>>> С каких пор Си стал низкоуровневым ?
>> Язык имеющий директиву asm() - низкоуровневый (Это такое неофициальный критерий)
> лол. у меня есть низкоуровневый basic.ЛоЛ будет когда ты узнаешь что на некоторых компах это был единственный язык.
> ЛоЛ будет когда ты узнаешь что на некоторых компах это был единственный
> язык.то есть, машинного кода не было?
или тебе дать фото тетрадей, где у меня дизасм 51-го бейсика?
>> ЛоЛ будет когда ты узнаешь что на некоторых компах это был единственный
>> язык.
> то есть, машинного кода не было?
> или тебе дать фото тетрадей, где у меня дизасм 51-го бейсика?Мне-то зачем, асм есть - низкоуровневый.
Ничего себе.В питоне:
import corepy.arch.x86_64.isa as x86
...
x86.xor(rax, rax)x86.cmp(rax, 1)
x86.je(lbl_skip)
x86.add(rax, MemRef(rbp, 16, data_size = 64))
...
> Ничего себе.
> В питоне:
> import corepy.arch.x86_64.isa as x86Без импорта и вызова внешних функций.
а то ведь так и до шеллкода можно докатиться.
>> Ничего себе.
>> В питоне:
>> import corepy.arch.x86_64.isa as x86
> Без импорта и вызова внешних функций.Продемонстрируйте ассемблер в C, в рамках стандартов C89 и POSIX.1-2001, скажем? Если в "питоне нет ассемблера", то его и в C точно так же нет. То, что в неком компиляторе XXX на платформе YYY внезапно доступна директива asm() со специфичным и несовместимым ни с чем другим синтаксисом - нестандартная особенность одной реализации.
>>> Ничего себе.
>>> В питоне:
>>> import corepy.arch.x86_64.isa as x86
>> Без импорта и вызова внешних функций.
> Продемонстрируйте ассемблер в C, в рамках стандартов C89 и POSIX.1-2001, скажем?Ты ... или прикалываешься?
void a(){
__asm("nop");
__asm("finit");
__asm("emms");
__asm("sfence");
}$ gcc -D__STRICT_ANSI__ -W -Wall -Wextra -ansi -pedantic -c test.c
$ objdump -d test.otest.o: file format elf64-x86-64
Disassembly of section .text:0000000000000000 <a>:
0: 55 push %rbp
1: 48 89 e5 mov %rsp,%rbp
4: 90 nop
5: 9b db e3 finit
8: 0f 77 emms
a: 0f ae f8 sfence
d: 5d pop %rbp
e: c3 retq
Это "не в рамках стандарта", это просто аналог asm, который не отключается ключиком -ansi у gcc.Вы же не можете запустить этот код на ansi C компиляторе под ARM, например. Или на компиляторе С, полностью совместимом с ansi, но поддерживающим иной от gcc синтаксис ассемблера.
То, что код компилится под gcc - ВООБЩЕ ничего не говорит о соответствии стандарту! Найдите упоминание, что в языке C есть asm() или __asm() - у Кернигана, например, или в спецификации ANSI, или в других. В C по стандарту ассемблера нет и быть не может, а вы всего лишь продемонстрировали gcc-специфичное расширение, работающее только на x86 архитектуре.
> Это "не в рамках стандарта", это просто аналог asm, который не отключается
> ключиком -ansi у gcc.Да, да, да начались отмазки.
---
Вот тут исходники UNIX System III, за 11 апреля 1980 года
ftp://pdp11.org.ru/pub/unix-archive/PDP-11/Distributions/usd...
там в /usr/src/uts/vax/os/machdep.c
mtpr(regno, value)
{
asm(" mtpr 8(ap),4(ap)");
}mfpr(regno)
{
asm(" mfpr 4(ap),r0");
}/*
* copy count bytes from from to to.
*/
bcopy(from, to, count)
caddr_t from, to;
{
asm(" movc3 12(ap),*4(ap),*8(ap)");
}/usr/src/lib/lib2/SYS.c
#ifdef vax
_mfpr(reg)
{
asm(" mfpr 4(ap),r0");
}_mtpr(reg, val)
{
asm(" mtpr 8(ap),4(ap)");
}
#endif
Столман тогда ещё лысого гонял в школе.----
Добиваем дальше
http://flash-gordon.me.uk/ansi.c.txt
A.6.5.10 The asm keywordThe asm keyword may be used to insert assembly-language code
directly into the translator output. The most common implementation
is via a statement of the formasm ( character-string-literal );
ANSI пойдёт?!
Мало?!
ISO/IEC 9899:201x http://www.open-std.org/jtc1/sc22/wg14/www/projects#9899
J.5.10 The asm keyword
1
The asm keyword may be used to insert assembly language directly into the translator
output (6.8). The most common implementation is via a statement of the form:asm ( character-string-literal );
Теперь показывай столько же стандартов на Пидон, кусок кода
из системной библиотеки, операционной системы иль драйвера.
А если вы вдруг скажете, что это ассемблер "со стороны", а не в языке - так в C тоже в языке ассемблера никакого нет, и спецификация POSIX директивы asm() так же не требует; слишком специфичная для платформы и реализации, и в "C вообще" доступа к ассемблеру так же нет.
> А если вы вдруг скажете, что это ассемблер "со стороны", а не
> в языке - так в C тоже в языке ассемблера никакого
> нет, и спецификация POSIX директивы asm() так же не требует; слишком
> специфичная для платформы и реализации, и в "C вообще" доступа к
> ассемблеру так же нет.для таких зануд сделали __asm