fio unterstützt eine ganze Reihe von io-Motoren - alle unterstützten Motoren vorhanden sind hier: https://github.com/axboe/fio/tree/master/enginesWie fio lädt verschiedene io-Motoren, wenn es startet?
Ich habe versucht, die Interna wie fio Werke zu verstehen und blieb stecken, wie fio Lasten aller io-Motoren.
Zum Beispiel I Jeder Motor hat eine siehe Methode selbst zu registrieren und deregistrieren, beispielsweise sync.c Register und hebt die Registrierung unter Verwendung der folgenden Methoden
fio_syncio_register
: https://github.com/axboe/fio/blob/master/engines/sync.c#L448
und fio_syncio_unregister
: https://github.com/axboe/fio/blob/master/engines/sync.c#L461
Meine Frage ist, wer diese Methoden ruft?
Antwort zu finden Ich habe versucht fio unter gdb läuft - einen Haltepunkt in fio_syncio_register platziert und in der Hauptfunktion, wird fio_syncio_register schon vor Haupt genannt, was mich etwas mit __libc_csu_init
und Backtrace bestätigt zu tun hat, sagt, dass
(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()
ich irgendwann verbrachte Lesung über __libc_csu_init
und __libc_csu_fini
und jede einzelne Beschreibung spricht über Methoden mit __attribute__((constructor))
dekoriert wird vor dem Haupt genannt werden, aber im Fall von FIO sync.c ich sehe nicht fio_syncio_register verziert mit __attribute__
Kann mir bitte jemand helfen, zu verstehen, wie dieser Fluss funktioniert? Gibt es andere Materialien, die ich lesen sollte, um das zu verstehen?
Danke
Wow, ich hätte das nie herausgefunden, vielen Dank für diese Mühe. – nachiappan