FIO поддерживает целую кучу Io двигателей - все поддерживаемые двигатели присутствуют здесь: https://github.com/axboe/fio/tree/master/enginesКак fio загружает различные двигатели io при запуске?
Я пытался понять внутренние механизмы FIO работ и застрял на том, как FIO загружает все Io двигателей.
Например, я видеть каждый двигатель имеет метод регистрации и отмены регистрации себя, например, регистры sync.c и отменяет регистрацию с использованием следующих методов
fio_syncio_register
: https://github.com/axboe/fio/blob/master/engines/sync.c#L448
и fio_syncio_unregister
: https://github.com/axboe/fio/blob/master/engines/sync.c#L461
Мой вопрос: кто называет эти методы?
Чтобы найти ответ, который я попытался запустить FIO под БГД - поставил точку останова в fio_syncio_register и в основной функции, fio_syncio_register вызывается еще до основной, который говорит мне, что это что-то делать с __libc_csu_init
и трассировку подтвердил, что
(gdb) bt
#0 fio_syncio_register() at engines/sync.c:450
#1 0x000000000047fb9d in __libc_csu_init()
#2 0x00007ffff6ee27bf in __libc_start_main (main=0x40cd90 <main>, argc=2, argv=0x7fffffffe608, init=0x47fb50 <__libc_csu_init>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffe5f8)
at ../csu/libc-start.c:247
#3 0x000000000040ce79 in _start()
я провел некоторое время читал о __libc_csu_init
и __libc_csu_fini
и каждый отдельный описание говорит о методах, украшенных __attribute__((constructor))
будет вызываться перед основным, но в случае FIO sync.c я не вижу fio_syncio_register украшены __attribute__
Может кто-нибудь, пожалуйста, помогите мне понять, как работает этот поток? Есть ли другие материалы, которые я должен читать, чтобы понять это?
Thanks
Ничего себе, я бы никогда не подумал об этом, спасибо вам большое за это усилие. – nachiappan