Kworker, nó là gì và tại sao nó lại ăn quá nhiều CPU?


136

Gần đây tôi đã nâng cấp lên Kubfox Natty Beta 1 và tôi đã gặp rất nhiều vấn đề với trình xử lý kworker . Hiện tại nó sử dụng gần một nửa CPU của tôi. Ngoài ra, thật kỳ lạ là nó dường như ảnh hưởng đến các cổng USB của tôi; Bất cứ khi nào tôi cắm vào ổ USB, trình xử lý sẽ đi vào hyperdrive , khiến tôi không thể làm việc.

Tôi đã nghĩ về việc nộp một lỗi nhưng vì tôi thậm chí không tìm thấy bất kỳ lời giải thích hợp lý nào về việc kworker là gì nên tôi nên tìm hiểu trước.


Thật kỳ lạ, kworker đang chạy và đóng góp cho sự thức dậy 10% nhưng tôi chưa cài đặt chương trình Kubfox. Alos Nepomuk không được cài đặt.
dago

1
từ phản hồi của afrazier tôi nghĩ bây giờ nó có liên quan đến kernel (vì vậy k trong kworker là dành cho kernel). Vì vậy, đó là lý do tại sao bạn cũng sẽ có kworker chạy trên máy Ubuntu của bạn.
davorao

1
Câu trả lời này cũng có thể hữu ích cho việc tìm hiểu những gì một kworker đang làm: unix.stackexchange.com/questions/22851/ chủ
anarcat

1
Bạn không nên thực hiện bản cập nhật hệ điều hành cuối cùng đó. Nếu bạn may mắn, người tiếp theo sẽ sửa nó.
tộc

Câu trả lời:


109

"kworker" là một quy trình giữ chỗ cho các luồng công nhân kernel, thực hiện hầu hết quá trình xử lý thực tế cho kernel, đặc biệt là trong các trường hợp có ngắt, bộ định thời, I / O, v.v. Chúng thường tương ứng với phần lớn của bất kỳ phân bổ nào " hệ thống "thời gian để chạy các quy trình. Nó không phải là thứ gì đó có thể được gỡ bỏ an toàn khỏi hệ thống theo bất kỳ cách nào và hoàn toàn không liên quan đến nepomuk hoặc KDE (ngoại trừ việc các chương trình này có thể thực hiện các cuộc gọi hệ thống, có thể yêu cầu kernel phải làm gì đó).

Có một số báo cáo về hoạt động kworker quá mức cho các hệ thống tương đối nhàn rỗi bắt đầu trong quá trình phát triển 2.6.36 ( ví dụ thảo luận ) và các báo cáo rộng về sự nhầm lẫn và các vấn đề với 2.6,38 (mặc dù nhiều báo cáo trong số này bao gồm từ "Natty", vì vậy tôi cho rằng những người này đã không sử dụng bất kỳ hạt nhân nào trong khoảng 2.6,35 (được phân phối trong Ubuntu 10.10) và 2.6,38 (được phân phối trong Ubuntu 11.04).

Tôi đã tìm thấy nhiều báo cáo về một cái gì đó "đã sửa" cái này cho một hoặc một người dùng khác. Hầu hết các "sửa lỗi" dường như có liên quan đến các bản cập nhật của các loại khác nhau. Trường hợp bản cập nhật có thể được theo dõi đến một vấn đề cụ thể, dường như thường là một số trình điều khiển hoặc dịch vụ kernel đã được vá để không hoạt động sai: Tôi có cảm tưởng rằng có một số lượng rất lớn những thứ trong kernel có thể gây ra hành vi được quan sát là sử dụng quá nhiều kworker.

Nếu bạn thấy hệ thống không sử dụng được do hoạt động kworker quá mức, tôi khuyên bạn nên cố gắng làm ít việc hơn. Nếu bạn nghĩ rằng bạn không làm gì cả, hãy thử tắt các dịch vụ hoặc bộ hẹn giờ chạy dài (trình đọc RSS, trình đọc thư, bộ chỉ mục tệp, trình theo dõi hoạt động, v.v.). Nếu điều này không làm việc, hãy thử khởi động lại. Nếu hệ thống của bạn cho phép bạn bật hoặc tắt phần cứng trong môi trường tiền khởi động, hãy thử tắt phần cứng bạn không sử dụng. Nếu điều đó xảy ra vào mỗi lần khởi động lại trước khi bạn làm bất cứ điều gì, bạn có thể thử gỡ cài đặt mọi thứ, nhưng tại thời điểm này, bạn sẽ muốn chạy các công cụ định hình tòa nhà để theo dõi các ứng dụng cụ thể dường như gây ra tình trạng quá tải này.

Hy vọng rằng hệ thống cụ thể của bạn sẽ ngừng thể hiện hành vi này bằng một bản nâng cấp kernel trong tương lai (và nhiều nguyên nhân phổ biến nhất của việc này đã được giải quyết).


1
Tôi đã có một vấn đề đăng nhập chậm mà tôi nghĩ có liên quan đến điều này; Tôi quản lý để khắc phục nó bằng cách trì hoãn tất cả những gì được bắt đầu theo cách này: Askubfox.com/a/484856/46437
Sức mạnh của Bảo Bình

1
Có lẽ điều này là thừa, nhưng lời khen về một phản ứng rất rõ ràng. Đó là một số tiếng Anh thể hiện tốt, thưa ông.
Jon Carter

81

Kworker là gì? kworkercó nghĩa là một quy trình nhân Linux đang thực hiện "công việc" (xử lý các cuộc gọi hệ thống). Bạn có thể có một vài trong số chúng trong danh sách quy trình của bạn: kworker/0:1là một trong lõi CPU đầu tiên của bạn, kworker/1:1một trong số thứ hai của bạn, v.v.

Tại sao kworker hog CPU của bạn? Để tìm hiểu lý do tại sao một kworker lãng phí CPU của bạn, bạn có thể tạo backtraces CPU: xem tải bộ xử lý của bạn (với tophoặc một cái gì đó) và trong những khoảnh khắc tải cao kworker, thực hiện echo l > /proc/sysrq-triggerđể tạo ra một backtrace. (Trên Ubuntu, điều này cần bạn đăng nhập sudo -s). Làm điều này nhiều lần, sau đó xem backtraces ở cuối dmesgđầu ra. Xem những gì xảy ra thường xuyên trong backtraces CPU, hy vọng nó sẽ đưa bạn đến nguồn gốc của vấn đề.

Ví dụ: e1000e. Trong trường hợp của tôi, tôi đã tìm thấy một backtrace như thế này gần như mọi lúc:

Call Trace:
 delay_tsc+0x4a/0x80
 __const_udelay+0x2c/0x30
 e1000_acquire_swflag_ich8lan+0xa2/0x240 [e1000e]
 e1000e_read_phy_reg_igp+0x29/0x80 [e1000e]
 e1000e_phy_has_link_generic+0x85/0x120 [e1000e]
 e1000_check_for_copper_link_ich8lan+0x48/0x930 [e1000e]
 e1000e_has_link+0x55/0xd0 [e1000e]
 e1000_watchdog_task+0x5e/0x960 [e1000e]

Nó gợi ý cho tôi một vấn đề trong e1000emô-đun thẻ Ethernet, và thực sự là một sudo rmmod e1000etải CPU cao đã biến mất ngay lập tức [ lỗi e1000e # 26 ].


4
echo l > /proc/sysrq-triggerDường như không làm việc trên proxmox sysrq: SysRq : This sysrq operation is disabled.buồn bã.
hak8or

1
sysrq cần phải được kích hoạt lại với sysctl -w kernel.sysrq = 1 xem Askubfox.com/questions/911522/ trên
Sebastien

Làm thế nào bạn hiểu e1000 đã gây ra vấn đề? Chỉ vì nó đã được giữ lặp đi lặp lại?
onurcanbektas

@onurcanbektas Có - kết quả được lặp lại thường xuyên nhất là nguyên nhân có thể xảy ra nhất. Bởi vì backtraces kiểm tra tại chỗ CPU đang bận rộn trong khi nó bị kẹt.
tanius

70

Tại sao kworker hog CPU của bạn (tiếp)? Thay thế cho câu trả lời khác của tôi ở đây , Perf là ​​một cách chuyên nghiệp hơn để phân tích những tác vụ kernel nào đang ăn cắp CPU của bạn:

  1. Cài đặt perf:

    sudo apt-get install linux-tools-common linux-tools-3.11.0-15-generic
    

    (Gói thứ hai phải phù hợp với phiên bản kernel của bạn. Trước tiên, bạn có thể cài đặt chỉ linux-tools-commonvà gọi perfđể cho nó biết gói nào cần.)

  2. Ghi lại khoảng 10 giây backtraces trên tất cả các CPU của bạn:

    sudo perf record -g -a sleep 10
    
  3. Phân tích bản ghi của bạn:

    sudo perf report
    

    (Điều hướng đồ thị cuộc gọi với , , , Enter.)


2
Trên hệ thống của tôi, chạy bên trong một máy ảo VMware, sử dụng perftôi đã tìm ra vấn đề với sd_modmô-đun hạt nhân. Việc vô hiệu hóa SCSI trong vmxtệp đã ngăn mô-đun tải và đưa hệ thống trở lại tốc độ bình thường:scsi0.present = "FALSE"
feklee

E: Không thể định vị gói linux-tools-3.11.0-15-generic E: Không thể tìm thấy bất kỳ gói nào trên toàn cầu 'linux-tools-3.11.0-15-generic' E: Không thể tìm thấy bất kỳ gói nào theo regex 'linux-tools-3.11.0-15-generic'
Paddy

@Paddy: Vui lòng kiểm tra lại câu trả lời :-) "Gói [linux-tools - * - generic] phải khớp với phiên bản kernel của bạn. Trước tiên, bạn có thể cài đặt chỉ linux-tools-common và gọi perf để cho bạn biết gói nào cần. "
tanius

8

Chỉ cần để cho mọi người biết. Tôi gặp vấn đề này, đã cài đặt perf (là một công cụ tuyệt vời), nó chỉ ra khóa xoay và XFS. Điều đó chỉ ra NFS. Sau đó, tôi nhận ra một trong những thú cưỡi của mình đã hết chỗ. Giải phóng không gian khiến CPU kworker giảm xuống 0.

Vì vậy, rõ ràng đây có thể là một triệu chứng hết dung lượng ổ đĩa trên máy chủ NFS bận rộn!


1
Tôi nhận thấy tôi có một cuộc khủng hoảng kworker khi một hộp ảo cụ thể đang chạy. Hóa ra một người đang chạy NFS với máy chủ của tôi để chia sẻ tệp. Tuy nhiên nó không ở đâu gần đầy. Tháo gỡ NFS "giải quyết" vấn đề. Tôi đoán tôi sẽ chia sẻ với một sshfs mount.
trình viên

4

Gần đây tôi đã cài đặt Ubuntu Natty trên hộ chiếu USB ổ đĩa ngoài. Khi tôi bắt đầu trên máy tính để bàn khoảng hai tuổi, mọi thứ hoạt động như một bùa mê. Khi tôi khởi động trên máy tính xách tay mới của mình (hệ thống MSI gt680r), nó sẽ chậm lại sau khi tôi đánh thức máy tính khỏi chế độ ngủ hoặc nếu tôi cắm một đĩa USB khác.

Các quy trình Kworker mất ngày càng nhiều cpu và chuột đóng băng theo thời gian.

Tôi đã đọc một số giải pháp trên các diễn đàn khác nhau mà không hoạt động.

Tôi đã đi vào bios của máy tính xách tay của tôi, nơi có:

Hand XCHI OFF: Enabled
EHCI Hand OFF: disabled

Tôi đã thay đổi cho:

Hand XCHI OFF: disabled
EHCI Hand OFF: disabled

và kể từ đó, nó không bị đóng băng nữa trên máy tính xách tay của tôi.

Tôi sẽ cho phép quay lại nếu và khi vấn đề được khắc phục.


1
Bất cứ ai có thể giải thích tại sao điều này xảy ra? XCHI được kết nối như thế nào?
GuySoft

0

Tôi nghĩ rằng việc vô hiệu hóa Nepomuk có thể giúp bạn:

http://www.freetechie.com/blog/disable-nepomuk-desktop-search-on-kde-4-4-2-kubfox-lucid-10-04/


cảm ơn nhưng tôi đã cài đặt một bản sao mới của Kubfox 11.04 và vấn đề được đề cập trước đó đã biến mất.
davorao

1
Trong khi về mặt lý thuyết có thể trả lời câu hỏi, tốt hơn là nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo.
fossfreedom
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.