Ну, во-первых, ядро автоматически выбирает лучшее, обычно это TSC, если он доступен, потому что он хранится на процессоре и очень быстр (RDTSC и чтение EDX:EAX).
Но так было не всегда, в ранние годы, когда системы SMP в основном собирались с несколькими дискретными cpus, было очень важно, чтобы cpus был как можно "равнее" (идеальное совпадение модели, скорости и шага), но даже тогда иногда случалось, что один из них был заметно быстрее другого, поэтому счетчик TSC между тем был "нестабилен", что и послужило причиной позволить изменить его (или отключить его с помощью параметра ядра "notsc"). И даже при таких ограничениях TSC все равно является лучшим источником, но ядро должно с большой осторожностью полагаться только на один вычислительный процессор в многоядерных системах или активно пытаться поддерживать их синхронизацию, а также учитывать такие вещи, как suspend/resume (сбрасывает счетчик) и масштабирование частоты вычислительного процессора (влияет на TSC в некоторых моделях вычислительных процессоров).
Некоторые люди в те ранние времена SMP даже строили системы с cpus различных скоростей (что-то вроде новой архитектуры BIG.little in arm), что создавало большие проблемы в области хронометража.
Что касается способа проверки разрешения у вас clock_getres() и у вас есть пример здесь.
И пара дополнительных ссылок: официальное ядро doc (в этом каталоге есть и другие интересные файлы) и ресинхронизация TSC в хромиках с некоторыми бенчмарками различных часовых источников.
Короче говоря, при смене источника часов не должно быть видимых изменений в пользовательском пространстве, только более медленное gettimeofday().
Это цитаты задней галочки. Они говорят оболочку, чтобы запустить вывод команды.
E.G.
`echo ls`
будет запущен LS
.
В вашем случае вы попросили Bash запустить файлы SQL. Это, очевидно, не то, что вы собирались, поскольку Bash не может этого сделать, SQL не имеет смысла Bash.
Также даже с этим исправлением сценарий не будет делать то, что вы описываете. Кто-то еще (Джанин) дал ответ, чтобы исправить это, однако они не объясняли, почему ваш сценарий сделал то, что он сделал.
- «Векл через кучу файлов [ .sql] и получите их имена« Вы только что делаете:
for f in *.sql
do
do_whatever_with_file "$f"
done
, если вы просто хотите перечислить файлы:
ls *.sql
Если вы хотите проверить, есть ли *. SQL
Файлы, существующие, например:
if ls *.sql >/dev/null 2>&1
then echo sql files existing
else echo no sql files
fi