?

Log in

No account? Create an account

Previous Entry | Next Entry

Началось с того, что мы договорились на пятницу, 15:30 по телефону, а я взял day off. И проспал (: Меня разбудил звонок моего интервьюера в 15:37.

Представились, он там архитектор чего-то (: Первым вопросом было кратко перечислить платформы с которыми работал.

Дальше -- максимально подробно описать прохождение запроса на запись в файловое устройство связанное с символьным драйвером USB-девайса от юзерспейса и до записи в endpoint:
- рассказал что-то про системный вызов write, VFS, метод записи в файловом объекте, посылку URB в подсистему USB.

Дальше -- максимально подробно описать процесс исполнения одной программной инструкции RISC-процессором:
- говорил про чтение из памяти, декодирование, чтение исходных данных, исполнение, запись результатов;
- на вопрос "можно ли всё ускорить" вспомнил что есть конвейер и реально задержка между исполнением потока инструкций составляет один шаг перечисленной последовательности;
- на вопрос о сбросе конвейера говорил о предсказании переходов, о том что их можно кешировать или считать что вперёд -- не прыгаем, а назад -- прыгаем;
- на вопрос о "можно ли ещё быстрее" поговорили малость об out-of-order выполнении.

Дальше -- говорили про методы отладки:
- упомянул животворный printf/printk, прикладной gdb и gdb с эмулятором процессора;
- жестоко затупил на вопрос о том как gdb получает доступ к состоянию отлаживаемого приложения -- с эмуляторами-то всё понятно, gdbstub торчит прямо в процессор, а как оно в прикладном приложении (:
- на вопрос о реализации breakpoints/watchpoints -- втыкать специальную команду в код, либо пользоваться аппаратными отладочными регистрами (hw assisted watchpoint) либо защитой страниц (sw assisted).

Дальше -- про профилирование, пользовался ли oprofile/vtune, как работает то чем пользовался:
- говорил, что oprofile когда я на него смотрел был ещё маленьким и странным, а пользовался gprof, для которого инструментируют вызовы и приложение само считает табличку времён проведённых в функциях, обновляя её на диске.
- на вопрос о том, как бы я стал делать профилировщик без инструментирования предложил периодически смотреть в значение pc;
- на вопрос о том, как бы я стал профилировать cache-misses, предположил, что нужен аппаратный счётчик этих самых промахов, но до того как связать его с pc, в которых происходят промахи, не догадался (а оно генерирует прерывание каждые n промахов, так что нужно смотреть на pc в момент прерывания, что даёт статистически верную картину).

Дальше -- заключительные моменты, ждать результата на следующей неделе, если ок -- следующее собеседование с чатом чтобы писать фрагменты кода и, возможно, на английском.

Метки: