Почему реальное время может быть ниже, чем пользовательское время

Для большинства методов восстановления Вы будете нуждаться в необработанном доступе к устройству хранения данных NAS, т.е. монтировать диск непосредственно на Вашем компьютере, а не получать доступ к полю NAS по Samba. Или если поле NAS самостоятельно запускает Linux или иначе предоставляет Вам доступ командной строки Unix, можно сделать работу восстановления путем выполнения команд непосредственно на NAS.

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

Можно попытаться восстановить структуру файловой системы; ответ jasonwryan имеет хорошие указатели.

Если это не работает, можно восстановить отдельные музыкальные файлы. К счастью, эти файлы имеют тенденцию иметь распознаваемую подпись и (относительно!) легкий обнаружить на изображении файловой системы, и если NAS был новым, они не будут фрагментированы очень. Инструменты для восстановления данных по destructured носителю называют, вырезая инструменты; Вы могли бы попробовать В первую очередь, MagicRescue, PhotoRec (от производителей TestDisk), … большинство этих инструментов доступны на типичных дистрибутивах Unix. Но если Вы предпочитаете, можно выполнить распределение специального назначения или другой живой CD включая средства восстановления, такие как SysRescueCD, Knoppix, CAINE

33
13.06.2012, 19:13
3 ответа

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

  • Real время является стеной, показывают время. (что мы могли измерить с секундомером),
  • User время является количеством времени, тратят в непривилегированном режиме в рамках процесса
  • Sys процессорное время, тратят в ядре в рамках процесса.

Таким образом, я предполагаю, была ли работа сделана несколькими процессорами одновременно, процессорное время было бы выше, чем прошедшая стена показывает время.

Действительно ли это было параллельным/многопоточным/параллельным типом приложения?

Так же, как пример это - то, что я вхожу в свою систему Linux, когда я выхожу time find . команда. Как ожидалось прошедшее real время намного больше, чем другие на этом отдельном пользователе / одноядерный процесс.

real    0m5.231s
user    0m0.072s
sys     0m0.088s

Эмпирическое правило:

  • реальный <пользователь: процесс является зависящим от ЦП и использует в своих интересах параллельное выполнение на нескольких ядрах/Центральных процессорах.
  • настоящий ≈ пользователь: процесс является зависящим от ЦП и не пользуется никаким премуществом параллели exeuction.
  • реальный> пользователь: процессом является связанный ввод-вывод. Выполнение на нескольких ядрах имело бы мало ни к какому преимуществу.
42
27.01.2020, 19:37
  • 1
    я не знаю если avconv является многопоточным. Пусть это будет. avconv новое поколение ffmpeg. Я преобразовывал 7 коротких flv файлов (приблизительно 20 секунд каждый). реальное время –  kobylecki 13.06.2012, 18:59
  • 2
    обычно было бы больше, чем другие два - но я спрашиваю о другой ситуации –  kobylecki 13.06.2012, 19:17
  • 3
    , Это объяснение корректно. Похоже, что этот процесс был выполнен на 4 ядрах. См. также мое объяснение гиперпоточности для больше о том, как real/sys/user время вычисляется. Это не имеет отношение точно, но понятия являются тем же. реальное время –  bahamat 13.06.2012, 19:32
  • 4
    @kobylecki является меньше, чем другие, потому что похоже, что avconv выполняется на нескольких ядрах. Так как я не знаю, что программное обеспечение, ни как оно было выполнено, я не хочу предъявлять 100%-ю претензию, но это - то, на что оно похоже на основе доступной информации (3 строки измерений времени и знание :-) –  Levon 13.06.2012, 20:36
  • 5
    В find пример usr значение намного ниже, потому что большая часть времени была проведена во время прерываний, даже если find было бы многопоточным, это останется низким (извините, если я не осваиваю английский язык, напрягается). –  Emmanuel 07.10.2013, 15:07

Только для иллюстрирования, что было сказано с двумя потоковые процессы, делающие некоторое вычисление.

/*a.c/*
    #include <pthread.h>
    static void  * dosomething () {
        unsigned long a,b=1;
        for (a=1000000000; a>0; a--) b*=3;
        return NULL;
    }
    main () {
        pthread_t one, two;
        pthread_create(&one,NULL, dosomething, NULL);
        pthread_create(&two,NULL, dosomething, NULL);
        pthread_join (one, NULL);
        pthread_join (two, NULL);
    }
/* end of a.c */

скомпилировать

gcc a.c -lpthread

(Это должно только проиллюстрировать в реальной жизни, я должен был добавить флаг-D_REENTRANT),

$ time ./a.out

real    0m7.415s
user    0m13.105s
sys     0m0.032s

(Времена находятся на Intel Atom, который имеет два медленных ядра :))

14
27.01.2020, 19:37

Как сказал Левон:

У меня i7 (8 процессоров ), так что если запустить вbash:

$ time for ((i=0;i<1000000;i++)); do echo $i; done | wc -l
1000000

real    0m4,878s
user    0m4,368s
sys     0m3,083s

Затем, если ограничить bash одним процессом с помощьюtaskset -cp 0 $BASHPID

$ taskset -cp 0 $BASHPID                                                                                         
pid 30551's current affinity list: 0-7
pid 30551's new affinity list: 0

теперь результат

$ time for ((i=0;i<1000000;i++)); do echo $i; done | wc -l
1000000

real    0m7,120s
user    0m4,282s
sys     0m2,824s

https://www.looklinux.com/how-to-run-process-or-program-on-specific-cpu-cores-in-linux/

http://man7.org/linux/man-pages/man1/time.1.html

1
05.05.2020, 18:50

Теги

Похожие вопросы