久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Linux內核Bug怎么解決

211次閱讀
沒有評論

共計 4869 個字符,預計需要花費 13 分鐘才能閱讀完成。

本篇內容介紹了“Linux 內核 Bug 怎么解決”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

一個 bug,  有人升級內核到 V5.10-rcX 之后,執行 dd 和 sync 之后看到進程有 hang 住的情況:

Some guys internally upgraded to v5.10-rcX and start to see a hang after dd + sync for a large file: - mount /dev/sda1 (ext4 filesystem) to directory /mnt; - run  if=/dev/zero of=test1 bs=1M count=2000  on directory /mnt; - run  sync

系統提示打印 hang 住進程的堆棧信息:

and get: [ 367.912761] INFO: task jbd2/sdb1-8:3602 blocked for more than 120 seconds. [ 367.919618] Not tainted 5.10.0-rc1-109488-g32ded76956b6 #948 [ 367.925776]  echo 0   /proc/sys/kernel/hung_task_timeout_secs  disables this message. [ 367.933579] task:jbd2/sdb1-8 state:D stack: 0 pid: 3602 ppid: 2 flags:0x00000028 [ 367.941901] Call trace: [ 367.944351] __switch_to+0xb8/0x168 [ 367.947840] __schedule+0x30c/0x670 [ 367.951326] schedule+0x70/0x108 [ 367.954550] io_schedule+0x1c/0xe8 [ 367.957948] bit_wait_io+0x18/0x68 [ 367.961346] __wait_on_bit+0x78/0xf0 [ 367.964919] out_of_line_wait_on_bit+0x8c/0xb0 [ 367.969356] __wait_on_buffer+0x30/0x40 [ 367.973188] jbd2_journal_commit_transaction+0x1370/0x1958 [ 367.978661] kjournald2+0xcc/0x260 [ 367.982061] kthread+0x150/0x158 [ 367.985288] ret_from_fork+0x10/0x34 [ 367.988860] INFO: task sync:3823 blocked for more than 120 seconds. [ 367.995102] Not tainted 5.10.0-rc1-109488-g32ded76956b6 #948 [ 368.001265]  echo 0   /proc/sys/kernel/hung_task_timeout_secs  disables this message. [ 368.009067] task:sync state:D stack: 0 pid: 3823 ppid: 3450 flags:0x00000009 [ 368.017397] Call trace: [ 368.019841] __switch_to+0xb8/0x168 [ 368.023320] __schedule+0x30c/0x670 [ 368.026804] schedule+0x70/0x108 [ 368.030025] jbd2_log_wait_commit+0xbc/0x158 [ 368.034290] ext4_sync_fs+0x188/0x1c8 [ 368.037947] sync_fs_one_sb+0x30/0x40 [ 368.041606] iterate_supers+0x9c/0x138 [ 368.045350] ksys_sync+0x64/0xc0 [ 368.048569] __arm64_sys_sync+0x10/0x20 [ 368.052398] el0_svc_common.constprop.3+0x68/0x170 [ 368.057177] do_el0_svc+0x24/0x90 [ 368.060482] el0_sync_handler+0x118/0x168 [ 368.064478] el0_sync+0x158/0x180

并反饋 8 號硬隊列綁定的第 100 號 cpu 上派發隊列和完成隊列不一致,但是沒有 inflight 的情況,因為這個情況,苦惱了三天三夜,頭發掉滿了整個鍵盤。

estuary:/sys/kernel/debug/block/sda/hctx8$ cat cpu100/dispatched 3 0 estuary:/sys/kernel/debug/block/sda/hctx8$ cat cpu100/completed 2 0 On cpu100, it seems completed is less than number dispatched. /sys/devices/pci0000:74/0000:74:02.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/block/sda/sda1/inflight), the number of inflight is 0.

然后 Ming Lei (自帶音響出場) 給出意見, 需要收集 /sys/kernel/debug/block/sda   目錄和 /sys/block/sda/device 目錄下所有文件的輸出:

hello chenxiang, Can you collect the debugfs log via the following commands after the io hang is triggered? 1) debugfs log: (cd /sys/kernel/debug/block/sda   find . -type f -exec grep -aH . {} \;) 2) scsi sysfs info: (cd /sys/block/sda/device   find . -type f -exec grep -aH . {} \;) Suppose the disk is /dev/sda.

chenxiang 反饋:

~$ cd /sys/kernel/debug/block/sdb   find . -type f -exec grep -aH . {} \; ... ./hctx9/tags:cleared=3891 ./hctx9/tags:bits_per_word=64 ./hctx9/tags:map_nr=63 ./hctx9/tags:alloc_hint={3264, 3265, 0, 3731, 2462, 842, 0, 0, 1278, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2424, 0, 0, 0, 346, 3, 3191, 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1165, 538, 0, 372, 277, 3476, 0, 0, 0, 111, 0, 2081, 0, 112, 0, 0, 0, 0, 904, 1127, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 321, 0} ./hctx9/tags:wake_batch=8 ./hctx9/tags:wake_index=7 ./hctx9/tags:ws_active=0 ./hctx9/tags:ws={ ./hctx9/tags: {.wait_cnt=8, .wait=inactive}, ./hctx9/tags: {.wait_cnt=8, .wait=inactive}, ./hctx9/tags: {.wait_cnt=8, .wait=inactive}, ./hctx9/tags: {.wait_cnt=8, .wait=inactive}, ./hctx9/tags: {.wait_cnt=8, .wait=inactive}, ./hctx9/tags: {.wait_cnt=8, .wait=inactive}, ./hctx9/tags: {.wait_cnt=8, .wait=inactive}, ./hctx9/tags: {.wait_cnt=8, .wait=inactive}, ./hctx9/tags:} ./hctx9/tags:round_robin=1 ./hctx9/tags:min_shallow_depth=4294967295 ./hctx9/ctx_map:00000000: 00 ...

Ming Lei 大神看了一下 debug 輸出,小喝一杯大紅袍,就直接建議去測試這個 patch:

Please try the following patch: diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index 60c7a7d74852..03c6d0620bfd 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c @@ -1703,8 +1703,7 @@ static blk_status_t scsi_queue_rq(struct blk_mq_hw_ctx *hctx, break; case BLK_STS_RESOURCE: case BLK_STS_ZONE_RESOURCE: - if (atomic_read( sdev- device_busy) || - scsi_device_blocked(sdev)) + if (scsi_device_blocked(sdev)) ret = BLK_STS_DEV_RESOURCE; break; default:

chenxiang 測試反饋之后,問題解決,內心洋溢著 Linux 從業者單純的喜悅,眼神中流露出滿滿的崇敬之情,恨不得以身相許:

I have tested the patch 100+ times on two envirments(on which the issue occurs frequently before), and the issue doesn t occur.

“Linux 內核 Bug 怎么解決”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-25發表,共計4869字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 曲松县| 江孜县| 昌吉市| 视频| 清水县| 察哈| 郎溪县| 潮安县| 彭山县| 永新县| 永定县| 曲周县| 永川市| 佛山市| 六安市| 三河市| 南川市| 冀州市| 荥经县| 桐庐县| 富顺县| 曲沃县| 濮阳县| 兴和县| 太和县| 益阳市| 马关县| 宣武区| 大冶市| 扶风县| 板桥市| 峡江县| 永安市| 分宜县| 浙江省| 三都| 丹凤县| 华坪县| 郓城县| 嘉荫县| 涿州市|