Автор Тема: Команда time оболочки bash  (Прочитано 1248 раз)

Оффлайн xdsl

  • Давно тут
  • **
  • Сообщений: 255
Команда time оболочки bash
« : 19.12.2023 12:58:29 »
Подскажите, плиз, в альтовской сборке bash есть команда time или нет? Именно команда оболочки, а не утилита GNU time. Под рукой были debian, ubuntu, manjaro, astra -  в bash есть команда time. В альте 9, 10 - не наблюдаю.

Оффлайн rits

  • Завсегдатай
  • *
  • Сообщений: 1 052
  • ITS
Re: Команда time оболочки bash
« Ответ #1 : 20.12.2023 12:40:06 »
# time + tab
time         timedatectl  timeout      times
# rpm -qf `which time`
time-1.7-alt4.x86_64
# rpm -qf `which bash`
bash-4.4.23-alt1.noarch
# rpm -ql bash-4.4.23-alt1.noarch | grep -i tim
/usr/share/man/man1/times.1.xz
man time
man times

Оффлайн xdsl

  • Давно тут
  • **
  • Сообщений: 255
Re: Команда time оболочки bash
« Ответ #2 : 21.12.2023 07:41:48 »
И что? Это подтверждение, что в альте вырезана встроенная в bash команда time? В этом я уже убедился. Причем, если установить, например, https://mirror.yandex.ru/altlinux/p10/branch/files/SRPMS/bash4-4.4.23-alt1.src.rpm, и пересобрать чистый тарбол bash-4.4.23.tar, без патчей и спеков, там вполне будет присутствовать команда time. НО! Если пересобрать со всеми навешанными баляльками (rpm --rebuild bash4-4.4.23-alt1.src.rpm), то результат будет без встроенной команды time. Где и зачем она потерялась у альтовцев?

На логичный вопрос - "Зачем оно надо", отвечаю - встроенная команда меряет время до тысячных секунды, а GNU time - только до сотых. 

Оффлайн xdsl

  • Давно тут
  • **
  • Сообщений: 255
Re: Команда time оболочки bash
« Ответ #3 : 21.12.2023 08:15:25 »
Глянул в исходники, там, как я понял за наличие time отвечает директива COMMAND_TIMING, по умолчанию 1. Где и зачем она зануляется в в альтовской сборке? Или какой-то другой способ применяется?

Какие-то намеки на пояснения обнаружил в спеках, Tue Jul 8 1999 Thierry Vignaud <tvignaud@mandrakesoft.com> : "disable built-in time command (incompatible with standard POSIX time command)". 24 года прошло, причина все еще актуальна?

Оффлайн rits

  • Завсегдатай
  • *
  • Сообщений: 1 052
  • ITS
Re: Команда time оболочки bash
« Ответ #4 : 21.12.2023 08:16:20 »
Это подтверждение, что в альте вырезана встроенная в bash команда time?
В принципе, да.
Думаю есть и решение и разумное объяснение, спрашивай у сборщиков на багтракерах.

Оффлайн andrew_b

  • Завсегдатай
  • *
  • Сообщений: 535
Re: Команда time оболочки bash
« Ответ #5 : 21.12.2023 08:29:43 »
1. Где и зачем она зануляется в в альтовской сборке?
https://packages.altlinux.org/ru/p10/srpms/bash4/specfiles/
--disable-command-timing

Оффлайн xdsl

  • Давно тут
  • **
  • Сообщений: 255
Re: Команда time оболочки bash
« Ответ #6 : 21.12.2023 08:38:53 »
1. Где и зачем она зануляется в в альтовской сборке?
https://packages.altlinux.org/ru/p10/srpms/bash4/specfiles/
--disable-command-timing
Ясно. Это все еще актуально?

Оффлайн xdsl

  • Давно тут
  • **
  • Сообщений: 255
Re: Команда time оболочки bash
« Ответ #7 : 21.12.2023 08:58:45 »
Повесил в багзиллу: https://bugzilla.altlinux.org/48890

Онлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 112
Re: Команда time оболочки bash
« Ответ #8 : 21.12.2023 16:29:55 »
На логичный вопрос - "Зачем оно надо", отвечаю - встроенная команда меряет время до тысячных секунды, а GNU time - только до сотых.
Это вот надо было в баге писать, а то желание совершенно непонятное. Но я там задал вопрос про то, что будет со скриптами, если такие, вдруг, есть.

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 261
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Re: Команда time оболочки bash
« Ответ #9 : 27.12.2023 16:13:13 »
time ничего не меряет, все измерения производит ядро, time лишь выводит результат измерений.  Формат вывода time(1), в том числе точность, настраивается с помощью параметра --format.  Появление bash builtin, перекрывающего time(1), создало бы проблемы пользователям bash, которые используют возможности time(1), отсутствующие в bash builtin.  Не следует ломать обратную совместимсть без веских оснований.

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 261
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Re: Команда time оболочки bash
« Ответ #10 : 27.12.2023 16:26:07 »
Цитировать
Каким образом можно получить тысячные доли секунды
Нельзя получать точность, больше, чем гарантирует ядро.
Сам мерил точность программами, написанными на Cи  - usleep(100) - это минимальный "квант" на который можно ориентироваться = 100 микросекунд = 0.1 милисекунда.
А интервалы мерить
https://rus-linux.net/MyLDP/BOOKS/ldd2/6/ldd2_ch6.html#t1

Оффлайн xdsl

  • Давно тут
  • **
  • Сообщений: 255
Re: Команда time оболочки bash
« Ответ #11 : 18.03.2024 17:49:42 »
Цитировать
Каким образом можно получить тысячные доли секунды
Нельзя получать точность, больше, чем гарантирует ядро.
Сам мерил точность программами, написанными на Cи  - usleep(100) - это минимальный "квант" на который можно ориентироваться = 100 микросекунд = 0.1 милисекунда.
А интервалы мерить
https://rus-linux.net/MyLDP/BOOKS/ldd2/6/ldd2_ch6.html#t1
#include <stdio.h>
#include <time.h>
int main()
{
    struct timespec tsBegin, tsEnd;
    for (int i=0;i<100;i++){
        clock_gettime(CLOCK_MONOTONIC,&tsBegin);
        clock_gettime(CLOCK_MONOTONIC,&tsEnd);
        long long tmBegin=tsBegin.tv_sec*1000000000+tsBegin.tv_nsec;
        long long tmEnd=tsEnd.tv_sec*1000000000+tsEnd.tv_nsec;
        fprintf(stderr,"%lld ",tmEnd-tmBegin);
    }
}
Получаем чаще всего что-то примерно такое:
266 94 53 52 52 51 49 52 50 52 49 47 52 51 50 52 51 47 48 47 53 52 52 47 52 48 49 48 51 51 50 53 48 52 50 49 52 51 52 50 51 51 53 50 53 52 49 57 52 54 50 46 53 50 48 51 49 49 46 54 52 48 54 54 54 48 48 52 50 49 49 53 49 53 53 48 48 52 51 49 52 52 52 46 52 48 50 51 48 48 52 48 52 50 48 50 48 48 48 50
Иногда бывает и такое:
49 15 15 17 16 16 16 16 15 16 15 16 15 14 16 17 15 16 16 17 16 14 14 16 17 16 15 16 15 16 16 15 16 16 14 15 15 15 15 15 15 16 16 16 16 16 14 16 15 16 16 15 14 17 16 16 16 17 17 15 16 15 17 15 16 17 17 15 15 16 16 17 16 16 17 17 16 17 16 16 16 16 15 15 14 16 15 14 16 16 16 16 16 16 15 15 17 14 16 16

В любом случае ориентируемся на 100 наносекунд.

Оффлайн xdsl

  • Давно тут
  • **
  • Сообщений: 255
Re: Команда time оболочки bash
« Ответ #12 : 18.03.2024 17:51:01 »
Да, совсем забыл: Intel(R) Core(TM) i7-1065G7 CPU @ 1.30GHz

Оффлайн stranger573

  • Мастер
  • ***
  • Сообщений: 1 457
    • Email
Re: Команда time оболочки bash
« Ответ #13 : 18.03.2024 23:52:12 »
Нельзя получать точность, больше, чем гарантирует ядро.
Сам мерил точность программами, написанными на Cи  - usleep(100) - это минимальный "квант" на который можно ориентироваться = 100 микросекунд = 0.1 милисекунда.
Может это было на i286? ;-)
А как тогда journalctl в микросекундах время пишет?
[user@comp ~]$ journalctl -b -1 -o short-precise
-- Logs begin at Sun 2024-02-25 22:31:23 MSK, end at Mon 2024-03-18 23:45:11 MSK. --
...
мар 17 13:10:47.072714 user.localdomain kernel: KERNEL supported cpus:
мар 17 13:10:47.072720 user.localdomain kernel:   Intel GenuineIntel
мар 17 13:10:47.072725 user.localdomain kernel:   AMD AuthenticAMD
...
« Последнее редактирование: 19.03.2024 00:06:21 от stranger573 »

Оффлайн буратино-42

  • Давно тут
  • **
  • Сообщений: 98
Re: Команда time оболочки bash
« Ответ #14 : 19.03.2024 10:29:59 »
точность измерения(наблюдения) времени - единицы наносекунд.

во всех "новых" процессорах есть 64 битный регистр времени, доступный для чтения,
 поэтому для определения времени требуется
  ОДНА машинная команда
   например на ассемблере (а не вызов системной функции).
    причём никаких "привилегий" для этого не требутся.

есть несколько тонкостей:
1. регистр времени - есть у каждого ядра,
    а они могут разойтись (см. ниже),
     поэтому, перед использованием этого регистра
      нужно привязать (специальной функцией)
        программу к конкретному ядру.
2. причина развода времени - спец команды приостановки счёта времени (например - сон)
    и/или работа в виртуальной среде
     поэтому "окружение" (ОС и/или виртуальная машина)
      должно быть специально настроены для повышения точности времени.



точность задания(управления) времени - гораздо хуже,
 поскольку без системных функций и "привилегий" не обойтись.
« Последнее редактирование: 19.03.2024 11:10:37 от буратино-42 »