Linux kernel: How to debug mutex deadlock 如何調試mutex死結

來源:互聯網
上載者:User

和userspace調試lock一樣,主要是要:

1. 找到lock死結的地方,列印出調用棧

2. 找出這個mutex目前被誰佔用了

 

針對1:在kernel config中,Kernel Hacking這個大項中,enable跟lock/mutex相關的config,比如CONFIG_DEBUG_MUTEX,以及CONFIG_DETECT_HUNG_TASKS, 這樣當死結發生時,稍微等待一段時間(預設120秒),kernel就會檢測到死結,同時列印出調用棧。在kernel hacking裡面,包含了大量的有利於調試的config,可以一項一項都看一遍,總有一款適合您。

 

針對2:來到代碼中死結的地方,在enable了CONFIG_DEBUG_MUTEX的情況下,添加這樣的代碼:

show_stack(<lock>.owner, NULL);

<lock>是你的mutex的變數名,.owner是一個struct task_struct *,利用show_stack函數就可以列印出該mutex被誰佔用了,而且佔用該mutex時的調用棧。非常cool。

此外可以看一下struct mutex的定義,有一些實用的東西,比如mutex的name。struct task_struct中也有一些實用的東西,比如pid等。

 

所以總結來說,kernel中目前可以列印調用棧的有:

dump_stack:列印當前的backtrace

show_stack:列印指定task_struct的backtrace 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.