在本人的系統軟件中調用io_submit提交IO請求,長時間運行後會返回不爲1,並且還伴隨着 Bad File descripotr 錯誤。檢查了提交先後文件描述符的值,都是對的;檢查了文件是否存在,文件打開先後都是存在的。那到底什麼緣由呢?less
首先的找到問題的直接緣由,這就須要理解io submit 的錯誤碼。ide
經過 man io_submit 很容易看到:測試
io_submit returns the number of iocbs submitted and 0 if nr is zero. ERRORS EINVAL The aio_context specified by ctx_id is invalid. nr is less than 0. The iocb at *iocbpp[0] is not properly initialized, or the operation specified is invalid for the file descriptor in the iocb. EFAULT One of the data structures points to invalid data. EBADF The file descriptor specified in the first iocb is invalid. EAGAIN Insufficient resources are available to queue any iocbs.
針對io submit 返回的EBADF, 常見的錯誤包括:code
爲此,筆者進行了下面的工做來檢查是不是上面的錯誤:ip
基於上面的分析,把上述 cache 容量上限調整到所在磁盤的文件數量的上限,進行了一樣的測試,長時間運行仍然穩定。所以,能夠認爲根因就是提交請求的文件描述符被fd cache中途關掉了。ci
經過分析上面的問題能夠看到,針對通常的錯誤,咱們首先須要知道直接緣由,好比io submit 錯誤,須要知道錯誤碼的含義、可能致使的緣由;而後據此結合時間系統上下文進行分析排查,才能完全定位、解決問題。it