{"id":4695,"date":"2020-10-30T00:44:42","date_gmt":"2020-10-29T16:44:42","guid":{"rendered":"https:\/\/damogame.cn\/wordpress\/?p=4695"},"modified":"2020-10-30T00:44:42","modified_gmt":"2020-10-29T16:44:42","slug":"linux%e8%bf%9b%e7%a8%8b%e8%b0%83%e5%ba%a6-o1%e8%b0%83%e5%ba%a6%e5%92%8ccfs%e8%b0%83%e5%ba%a6%e5%99%a8","status":"publish","type":"post","link":"https:\/\/i007.cc\/wordpress\/archives\/4695","title":{"rendered":"Linux\u8fdb\u7a0b\u8c03\u5ea6&#8212;&#8212;-O(1)\u8c03\u5ea6\u548cCFS\u8c03\u5ea6\u5668"},"content":{"rendered":"<div class=\"article-header-box\">\n<div class=\"article-header\">\n<div class=\"article-title-box\"><\/div>\n<div class=\"article-info-box\">\n<div class=\"blog-tags-box\">\n<div class=\"tags-box artic-tag-box\"><a href=\"https:\/\/blog.csdn.net\/a2796749\/article\/details\/47101533\">\u539f\u6587\u5730\u5740<\/a><\/div>\n<\/div>\n<div class=\"operating\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<article class=\"baidu_pl\">\n<div id=\"article_content\" class=\"article_content clearfix\">\n<div id=\"content_views\" class=\"htmledit_views\">\n<div class=\"article_title\">\n<h1><a name=\"t0\"><\/a>\u00a0\u00a01. \u6982\u8ff0<\/h1>\n<\/div>\n<div id=\"article_content\" class=\"article_content\">\u00a0\u00a0 \u00a0\u5bf9\u4e8e\u5206\u65f6\u64cd\u4f5c\u7cfb\u7edf\u800c\u8a00\uff0c\u8868\u9762\u4e0a\u770b\u8d77\u6765\u662f\u591a\u4e2a\u8fdb\u7a0b\u540c\u65f6\u5728\u6267\u884c\uff0c\u800c\u5728\u7cfb\u7edf\u5185\u90e8\u5219\u8fdb\u884c\u7740\u4ece\u4e00\u4e2a\u8fdb\u7a0b\u5230\u53e6\u4e00\u4e2a\u8fdb\u7a0b\u7684\u5207\u6362\u52a8\u4f5c\u3002\u8fd9\u6837\u7684\u8fdb\u7a0b\u5e76\u53d1\u6267\u884c\u6d89\u53ca\u5230\u8fdb\u7a0b\u5207\u6362\uff08process switch\uff09\u548c\u8fdb\u7a0b\u8c03\u5ea6\uff08process scheduling\uff09\u4e24\u5927\u95ee\u9898\u3002\u5176\u4e2d\u8fdb\u7a0b\u8c03\u5ea6\u662f\u64cd\u4f5c\u7cfb\u7edf\u7684\u6838\u5fc3\u529f\u80fd\uff0c\u5b83\u662f\u4e00\u4e2a\u975e\u5e38\u590d\u6742\u7684\u8fc7\u7a0b\uff0c\u9700\u8981\u591a\u4e2a\u7cfb\u7edf\u534f\u540c\u5de5\u4f5c\u5b8c\u6210\u3002Linux\u4f5c\u4e3a\u4e00\u4e2a\u901a\u7528\u64cd\u4f5c\u7cfb\u7edf\uff0c\u5176\u8c03\u5ea6\u5668\u7684\u8bbe\u8ba1\u4e00\u76f4\u662f\u4e00\u4e2a\u9887\u6709\u9887\u6709\u6311\u6218\u6027\u7684\u8bfe\u9898\u3002\u4e00\u65b9\u9762\u5b83\u6d89\u53ca\u5e94\u7528Linux\u7684\u4f7f\u7528\u6a21\u578b\u3002\u5c3d\u7ba1Linux\u6700\u521d\u5f00\u53d1\u4e3a\u684c\u9762\u64cd\u4f5c\u7cfb\u7edf\u73af\u5883\uff0c\u4f46\u73b0\u5728\u5728\u670d\u52a1\u5668\u3001\u5fae\u578b\u5d4c\u5165\u5f0f\u8bbe\u5907\u3001\u4e3b\u673a\u548c\u8d85\u7ea7\u8ba1\u7b97\u673a\u4e2d\u90fd\u80fd\u53d1\u73b0\u5b83\uff0c\u65e0\u7591\u8fd9\u4e9b\u9886\u57df\u7684\u8c03\u5ea6\u8d1f\u8f7d\u6709\u5f88\u5927\u5dee\u5f02\u3002\u53e6\u4e00\u65b9\u9762\uff0c\u5b83\u8981\u8003\u8651\u5e73\u53f0\u65b9\u9762\u7684\u6280\u672f\u8fdb\u6b65\uff0c\u5305\u62ec\u67b6\u6784\uff08\u591a\u5904\u7406\u3001\u5bf9\u79f0\u591a\u7ebf\u7a0b\u3001\u975e\u4e00\u81f4\u5185\u5b58\u8bbf\u95ee [NUMA] \u548c\u865a\u62df\u5316\uff09\u3002\u53e6\u5916\uff0c\u8fd9\u91cc\u8fd8\u8981\u8003\u8651\u4ea4\u4e92\u6027\uff08\u7528\u6237\u54cd\u5e94\u80fd\u529b\uff09\u548c\u6574\u4f53\u516c\u5e73\u6027\u4e4b\u95f4\u7684\u5e73\u8861\u3002\u901a\u5e38Linux\u8c03\u5ea6\u5668\u5c06\u8fdb\u7a0b\u5206\u4e3a\u4e09\u7c7b\uff1a<br \/>\n\uff081\uff09\u4ea4\u4e92\u5f0f\u8fdb\u7a0b\uff1a\u6b64\u7c7b\u8fdb\u7a0b\u6709\u5927\u91cf\u7684\u4eba\u673a\u4ea4\u4e92\uff0c\u56e0\u6b64\u8fdb\u7a0b\u4e0d\u65ad\u5730\u5904\u4e8e\u7761\u7720\u72b6\u6001\uff0c\u7b49\u5f85\u7528\u6237\u8f93\u5165\u3002\u5178\u578b\u7684\u5e94\u7528\u6bd4\u5982\u7f16\u8f91\u5668vi\u3002\u6b64\u7c7b\u8fdb\u7a0b\u5bf9\u7cfb\u7edf\u54cd\u5e94\u65f6\u95f4\u8981\u6c42\u6bd4\u8f83\u9ad8\uff0c\u5426\u5219\u7528\u6237\u4f1a\u611f\u89c9\u7cfb\u7edf\u53cd\u5e94\u8fdf\u7f13\u3002<br \/>\n\uff082\uff09\u6279\u5904\u7406\u8fdb\u7a0b\uff1a\u6b64\u7c7b\u8fdb\u7a0b\u4e0d\u9700\u8981\u4eba\u673a\u4ea4\u4e92\uff0c\u5728\u540e\u53f0\u8fd0\u884c\uff0c\u9700\u8981\u5360\u7528\u5927\u91cf\u7684\u7cfb\u7edf\u8d44\u6e90\u3002\u4f46\u662f\u80fd\u591f\u5fcd\u53d7\u54cd\u5e94\u5ef6\u8fdf\u3002\u6bd4\u5982\u7f16\u8bd1\u5668\u3002<br \/>\n\uff083\uff09\u5b9e\u65f6\u8fdb\u7a0b\uff1a\u5b9e\u65f6\u5bf9\u8c03\u5ea6\u5ef6\u8fdf\u7684\u8981\u6c42\u6700\u9ad8\uff0c\u8fd9\u4e9b\u8fdb\u7a0b\u5f80\u5f80\u6267\u884c\u975e\u5e38\u91cd\u8981\u7684\u64cd\u4f5c\uff0c\u8981\u6c42\u7acb\u5373\u54cd\u5e94\u5e76\u6267\u884c\u3002\u6bd4\u5982\u89c6\u9891\u64ad\u653e\u8f6f\u4ef6\u6216\u98de\u673a\u98de\u884c\u63a7\u5236\u7cfb\u7edf\uff0c\u5f88\u660e\u663e\u8fd9\u7c7b\u7a0b\u5e8f\u4e0d\u80fd\u5bb9\u5fcd\u957f\u65f6\u95f4\u7684\u8c03\u5ea6\u5ef6\u8fdf\uff0c\u8f7b\u5219\u5f71\u54cd\u7535\u5f71\u653e\u6620\u6548\u679c\uff0c\u91cd\u5219\u673a\u6bc1\u4eba\u4ea1\u3002<br \/>\n\u6839\u636e\u8fdb\u7a0b\u7684\u4e0d\u540c\u5206\u7c7bLinux\u91c7\u7528\u4e0d\u540c\u7684\u8c03\u5ea6\u7b56\u7565\u3002\u5bf9\u4e8e\u5b9e\u65f6\u8fdb\u7a0b\uff0c\u91c7\u7528FIFO\u6216\u8005Round Robin\u7684\u8c03\u5ea6\u7b56\u7565\u3002\u5bf9\u4e8e\u666e\u901a\u8fdb\u7a0b\uff0c\u5219\u9700\u8981\u533a\u5206\u4ea4\u4e92\u5f0f\u548c\u6279\u5904\u7406\u5f0f\u7684\u4e0d\u540c\u3002\u4f20\u7edfLinux\u8c03\u5ea6\u5668\u63d0\u9ad8\u4ea4\u4e92\u5f0f\u5e94\u7528\u7684\u4f18\u5148\u7ea7\uff0c\u4f7f\u5f97\u5b83\u4eec\u80fd\u66f4\u5feb\u5730\u88ab\u8c03\u5ea6\u3002\u800cCFS\u548cRSDL\u7b49\u65b0\u7684\u8c03\u5ea6\u5668\u7684\u6838\u5fc3\u601d\u60f3\u662f\u201c\u5b8c\u5168\u516c\u5e73\u201d\u3002\u8fd9\u4e2a\u8bbe\u8ba1\u7406\u5ff5\u4e0d\u4ec5\u5927\u5927\u7b80\u5316\u4e86\u8c03\u5ea6\u5668\u7684\u4ee3\u7801\u590d\u6742\u5ea6\uff0c\u8fd8\u5bf9\u5404\u79cd\u8c03\u5ea6\u9700\u6c42\u7684\u63d0\u4f9b\u4e86\u66f4\u5b8c\u7f8e\u7684\u652f\u6301\u3002\u6ce8\u610fLinux\u901a\u8fc7\u5c06\u8fdb\u7a0b\u548c\u7ebf\u7a0b\u8c03\u5ea6\u89c6\u4e3a\u4e00\u4e2a\uff0c\u540c\u65f6\u5305\u542b\u4e8c\u8005\u3002\u8fdb\u7a0b\u53ef\u4ee5\u770b\u505a\u662f\u5355\u4e2a\u7ebf\u7a0b\uff0c\u4f46\u662f\u8fdb\u7a0b\u53ef\u4ee5\u5305\u542b\u5171\u4eab\u4e00\u5b9a\u8d44\u6e90\uff08\u4ee3\u7801\u548c\/\u6216\u6570\u636e\uff09\u7684\u591a\u4e2a\u7ebf\u7a0b\u3002\u56e0\u6b64\u8fdb\u7a0b\u8c03\u5ea6\u4e5f\u5305\u542b\u4e86\u7ebf\u7a0b\u8c03\u5ea6\u7684\u529f\u80fd\u3002<br \/>\n2. Linux\u8c03\u5ea6\u5668\u7684\u7b80\u53f2<br \/>\n\uff081\uff09Linux 2.4\u4e4b\u524d\u7684\u5185\u6838\u8c03\u5ea6\u5668<br \/>\n\u65e9\u671f\u7684Linux\u8fdb\u7a0b\u8c03\u5ea6\u5668\u4f7f\u7528\u4e86\u6700\u4f4e\u7684\u8bbe\u8ba1\uff0c\u5b83\u663e\u7136\u4e0d\u5173\u6ce8\u5177\u6709\u5f88\u591a\u5904\u7406\u5668\u7684\u5927\u578b\u67b6\u6784\uff0c\u66f4\u4e0d\u7528\u8bf4\u662f\u8d85\u7ebf\u7a0b\u4e86\u30021.2 Linux\u8c03\u5ea6\u5668\u4f7f\u7528\u4e86\u73af\u5f62\u961f\u5217\u7528\u4e8e\u53ef\u8fd0\u884c\u7684\u4efb\u52a1\u7ba1\u7406\uff0c\u4f7f\u7528\u5faa\u73af\u8c03\u5ea6\u7b56\u7565\u3002 \u6b64\u8c03\u5ea6\u5668\u6dfb\u52a0\u548c\u5220\u9664\u8fdb\u7a0b\u6548\u7387\u5f88\u9ad8\uff08\u5177\u6709\u4fdd\u62a4\u7ed3\u6784\u7684\u9501\uff09\u3002\u7b80\u800c\u8a00\u4e4b\uff0c\u8be5\u8c03\u5ea6\u5668\u5e76\u4e0d\u590d\u6742\u4f46\u662f\u7b80\u5355\u5feb\u6377\u3002Linux\u7248\u672c2.2\u5f15\u5165\u4e86\u8c03\u5ea6\u7c7b\u7684\u6982\u5ff5\uff0c\u5141\u8bb8\u9488\u5bf9\u5b9e\u65f6\u4efb\u52a1\u3001\u975e\u62a2\u5360\u5f0f\u4efb\u52a1\u3001\u975e\u5b9e\u65f6\u4efb\u52a1\u7684\u8c03\u5ea6\u7b56\u7565\u30022.2 \u8c03\u5ea6\u5668\u8fd8\u5305\u62ec\u5bf9\u79f0\u591a\u5904\u7406 (SMP) \u652f\u6301\u3002<br \/>\n\uff082\uff09Linux 2.4\u7684\u8c03\u5ea6\u5668<br \/>\nLinux2.4.18\u4e2d\u4f7f\u7528\u7684\u8c03\u5ea6\u5668\u91c7\u7528\u57fa\u4e8e\u4f18\u5148\u7ea7\u7684\u8bbe\u8ba1\uff0c\u8fd9\u4e2a\u8c03\u5ea6\u5668\u548cLinus\u57281992\u5e74\u53d1\u5e03\u7684\u8c03\u5ea6\u5668\u6ca1\u6709\u5927\u7684\u533a\u522b\u3002\u8be5\u8c03\u5ea6\u5668\u7684 pick next \u7b97\u6cd5\u975e\u5e38\u7b80\u5355\uff1a\u5bf9 runqueue \u4e2d\u6240\u6709\u8fdb\u7a0b\u7684\u4f18\u5148\u7ea7\u8fdb\u884c\u4f9d\u6b21\u8fdb\u884c\u6bd4\u8f83\uff0c\u9009\u62e9\u6700\u9ad8\u4f18\u5148\u7ea7\u7684\u8fdb\u7a0b\u4f5c\u4e3a\u4e0b\u4e00\u4e2a\u88ab\u8c03\u5ea6\u7684\u8fdb\u7a0b\u3002(Runqueue \u662f Linux \u5185\u6838\u4e2d\u4fdd\u5b58\u6240\u6709\u5c31\u7eea\u8fdb\u7a0b\u7684\u961f\u5217) \u3002\u672f\u8bed pick next \u7528\u6765\u6307\u4ece\u6240\u6709\u5019\u9009\u8fdb\u7a0b\u4e2d\u6311\u9009\u4e0b\u4e00\u4e2a\u8981\u88ab\u8c03\u5ea6\u7684\u8fdb\u7a0b\u7684\u8fc7\u7a0b\u3002<br \/>\n\u6bcf\u4e2a\u8fdb\u7a0b\u88ab\u521b\u5efa\u65f6\u90fd\u88ab\u8d4b\u4e88\u4e00\u4e2a\u65f6\u95f4\u7247\u3002\u65f6\u949f\u4e2d\u65ad\u9012\u51cf\u5f53\u524d\u8fd0\u884c\u8fdb\u7a0b\u7684\u65f6\u95f4\u7247\uff0c\u5f53\u8fdb\u7a0b\u7684\u65f6\u95f4\u7247\u88ab\u7528\u5b8c\u65f6\uff0c\u5b83\u5fc5\u987b\u7b49\u5f85\u91cd\u65b0\u8d4b\u4e88\u65f6\u95f4\u7247\u624d\u80fd\u6709\u673a\u4f1a\u8fd0\u884c\u3002Linux2.4 \u8c03\u5ea6\u5668\u4fdd\u8bc1\u53ea\u6709\u5f53\u6240\u6709 RUNNING \u8fdb\u7a0b\u7684\u65f6\u95f4\u7247\u90fd\u88ab\u7528\u5b8c\u4e4b\u540e\uff0c\u624d\u5bf9\u6240\u6709\u8fdb\u7a0b\u91cd\u65b0\u5206\u914d\u65f6\u95f4\u7247\u3002\u8fd9\u6bb5\u65f6\u95f4\u88ab\u79f0\u4e3a\u4e00\u4e2aepoch\u3002\u8fd9\u79cd\u8bbe\u8ba1\u4fdd\u8bc1\u4e86\u6bcf\u4e2a\u8fdb\u7a0b\u90fd\u6709\u673a\u4f1a\u5f97\u5230\u6267\u884c\u3002\u6bcf\u4e2aepoch\u4e2d\uff0c\u6bcf\u4e2a\u8fdb\u7a0b\u5141\u8bb8\u6267\u884c\u5230\u5176\u65f6\u95f4\u5207\u7247\u7528\u5b8c\u3002\u5982\u679c\u67d0\u4e2a\u8fdb\u7a0b\u6ca1\u6709\u4f7f\u7528\u5176\u6240\u6709\u7684\u65f6\u95f4\u5207\u7247\uff0c\u90a3\u4e48\u5269\u4f59\u65f6\u95f4\u5207\u7247\u7684\u4e00\u534a\u5c06\u88ab\u6dfb\u52a0\u5230\u65b0\u65f6\u95f4\u5207\u7247\u4f7f\u5176\u5728\u4e0b\u4e2aepoch\u4e2d\u53ef\u4ee5\u6267\u884c\u66f4\u957f\u65f6\u95f4\u3002\u8c03\u5ea6\u5668\u53ea\u662f\u8fed\u4ee3\u8fdb\u7a0b\uff0c\u5e94\u7528goodness\u51fd\u6570\uff08\u6307\u6807\uff09\u51b3\u5b9a\u4e0b\u9762\u6267\u884c\u54ea\u4e2a\u8fdb\u7a0b\u3002\u5f53\u7136\uff0c\u5404\u79cd\u8fdb\u7a0b\u5bf9\u8c03\u5ea6\u7684\u9700\u6c42\u5e76\u4e0d\u76f8\u540c\uff0cLinux 2.4\u8c03\u5ea6\u5668\u4e3b\u8981\u4f9d\u9760\u6539\u53d8\u8fdb\u7a0b\u7684\u4f18\u5148\u7ea7\uff0c\u6765\u6ee1\u8db3\u4e0d\u540c\u8fdb\u7a0b\u7684\u8c03\u5ea6\u9700\u6c42\u3002\u4e8b\u5b9e\u4e0a\uff0c\u6240\u6709\u540e\u6765\u7684\u8c03\u5ea6\u5668\u90fd\u4e3b\u8981\u4f9d\u8d56\u4fee\u6539\u8fdb\u7a0b\u4f18\u5148\u7ea7\u6765\u6ee1\u8db3\u4e0d\u540c\u7684\u8c03\u5ea6\u9700\u6c42\u3002<br \/>\n\u5b9e\u65f6\u8fdb\u7a0b\uff1a\u5b9e\u65f6\u8fdb\u7a0b\u7684\u4f18\u5148\u7ea7\u662f\u9759\u6001\u8bbe\u5b9a\u7684\uff0c\u800c\u4e14\u59cb\u7ec8\u5927\u4e8e\u666e\u901a\u8fdb\u7a0b\u7684\u4f18\u5148\u7ea7\u3002\u56e0\u6b64\u53ea\u6709\u5f53 runqueue \u4e2d\u6ca1\u6709\u5b9e\u65f6\u8fdb\u7a0b\u7684\u60c5\u51b5\u4e0b\uff0c\u666e\u901a\u8fdb\u7a0b\u624d\u80fd\u591f\u83b7\u5f97\u8c03\u5ea6\u3002\u5b9e\u65f6\u8fdb\u7a0b\u91c7\u7528\u4e24\u79cd\u8c03\u5ea6\u7b56\u7565\uff0cSCHED_FIFO \u548c SCHED_RR\u3002FIFO \u91c7\u7528\u5148\u8fdb\u5148\u51fa\u7684\u7b56\u7565\uff0c\u5bf9\u4e8e\u6240\u6709\u76f8\u540c\u4f18\u5148\u7ea7\u7684\u8fdb\u7a0b\uff0c\u6700\u5148\u8fdb\u5165 runqueue \u7684\u8fdb\u7a0b\u603b\u80fd\u4f18\u5148\u83b7\u5f97\u8c03\u5ea6\uff1bRound Robin\u91c7\u7528\u66f4\u52a0\u516c\u5e73\u7684\u8f6e\u8f6c\u7b56\u7565\uff0c\u4f7f\u5f97\u76f8\u540c\u4f18\u5148\u7ea7\u7684\u5b9e\u65f6\u8fdb\u7a0b\u80fd\u591f\u8f6e\u6d41\u83b7\u5f97\u8c03\u5ea6\u3002<br \/>\n\u666e\u901a\u8fdb\u7a0b\uff1a\u5bf9\u4e8e\u666e\u901a\u8fdb\u7a0b\uff0c\u8c03\u5ea6\u5668\u503e\u5411\u4e8e\u63d0\u9ad8\u4ea4\u4e92\u5f0f\u8fdb\u7a0b\u7684\u4f18\u5148\u7ea7\uff0c\u56e0\u4e3a\u5b83\u4eec\u9700\u8981\u5feb\u901f\u7684\u7528\u6237\u54cd\u5e94\u3002\u666e\u901a\u8fdb\u7a0b\u7684\u4f18\u5148\u7ea7\u4e3b\u8981\u7531\u8fdb\u7a0b\u63cf\u8ff0\u7b26\u4e2d\u7684 Counter \u5b57\u6bb5\u51b3\u5b9a (\u8fd8\u8981\u52a0\u4e0a nice \u8bbe\u5b9a\u7684\u9759\u6001\u4f18\u5148\u7ea7) \u3002\u8fdb\u7a0b\u88ab\u521b\u5efa\u65f6\u5b50\u8fdb\u7a0b\u7684 counter \u503c\u4e3a\u7236\u8fdb\u7a0b counter \u503c\u7684\u4e00\u534a\uff0c\u8fd9\u6837\u4fdd\u8bc1\u4e86\u4efb\u4f55\u8fdb\u7a0b\u4e0d\u80fd\u4f9d\u9760\u4e0d\u65ad\u5730 fork() \u5b50\u8fdb\u7a0b\u4ece\u800c\u83b7\u5f97\u66f4\u591a\u7684\u6267\u884c\u673a\u4f1a\u3002<br \/>\nLinux2.4\u8c03\u5ea6\u5668\u662f\u5982\u4f55\u63d0\u9ad8\u4ea4\u4e92\u5f0f\u8fdb\u7a0b\u7684\u4f18\u5148\u7ea7\u7684\u5462\uff1f\u5982\u524d\u6240\u8ff0\uff0c\u5f53\u6240\u6709 RUNNING \u8fdb\u7a0b\u7684\u65f6\u95f4\u7247\u88ab\u7528\u5b8c\u4e4b\u540e\uff0c\u8c03\u5ea6\u5668\u5c06\u91cd\u65b0\u8ba1\u7b97\u6240\u6709\u8fdb\u7a0b\u7684 counter \u503c\uff0c\u6240\u6709\u8fdb\u7a0b\u4e0d\u4ec5\u5305\u62ec RUNNING \u8fdb\u7a0b\uff0c\u4e5f\u5305\u62ec\u5904\u4e8e\u7761\u7720\u72b6\u6001\u7684\u8fdb\u7a0b\u3002\u5904\u4e8e\u7761\u7720\u72b6\u6001\u7684\u8fdb\u7a0b\u7684 counter \u672c\u6765\u5c31\u6ca1\u6709\u7528\u5b8c\uff0c\u5728\u91cd\u65b0\u8ba1\u7b97\u65f6\uff0c\u4ed6\u4eec\u7684 counter \u503c\u4f1a\u52a0\u4e0a\u8fd9\u4e9b\u539f\u6765\u672a\u7528\u5b8c\u7684\u90e8\u5206\uff0c\u4ece\u800c\u63d0\u9ad8\u4e86\u5b83\u4eec\u7684\u4f18\u5148\u7ea7\u3002\u4ea4\u4e92\u5f0f\u8fdb\u7a0b\u7ecf\u5e38\u56e0\u7b49\u5f85\u7528\u6237\u8f93\u5165\u800c\u5904\u4e8e\u7761\u7720\u72b6\u6001\uff0c\u5f53\u5b83\u4eec\u91cd\u65b0\u88ab\u5524\u9192\u5e76\u8fdb\u5165 runqueue \u65f6\uff0c\u5c31\u4f1a\u4f18\u5148\u4e8e\u5176\u5b83\u8fdb\u7a0b\u800c\u83b7\u5f97 CPU\u3002\u4ece\u7528\u6237\u89d2\u5ea6\u6765\u770b\uff0c\u4ea4\u4e92\u5f0f\u8fdb\u7a0b\u7684\u54cd\u5e94\u901f\u5ea6\u5c31\u63d0\u9ad8\u4e86\u3002<br \/>\n\u8be5\u8c03\u5ea6\u5668\u7684\u4e3b\u8981\u7f3a\u70b9\uff1a<br \/>\n\u53ef\u6269\u5c55\u6027\u4e0d\u597d\uff1a\u8c03\u5ea6\u5668\u9009\u62e9\u8fdb\u7a0b\u65f6\u9700\u8981\u904d\u5386\u6574\u4e2a runqueue \u4ece\u4e2d\u9009\u51fa\u6700\u4f73\u4eba\u9009\uff0c\u56e0\u6b64\u8be5\u7b97\u6cd5\u7684\u6267\u884c\u65f6\u95f4\u4e0e\u8fdb\u7a0b\u6570\u6210\u6b63\u6bd4\u3002\u53e6\u5916\u6bcf\u6b21\u91cd\u65b0\u8ba1\u7b97 counter \u6240\u82b1\u8d39\u7684\u65f6\u95f4\u4e5f\u4f1a\u968f\u7740\u7cfb\u7edf\u4e2d\u8fdb\u7a0b\u6570\u7684\u589e\u52a0\u800c\u7ebf\u6027\u589e\u957f\uff0c\u5f53\u8fdb\u7a0b\u6570\u5f88\u5927\u65f6\uff0c\u66f4\u65b0 counter \u64cd\u4f5c\u7684\u4ee3\u4ef7\u4f1a\u975e\u5e38\u9ad8\uff0c\u5bfc\u81f4\u7cfb\u7edf\u6574\u4f53\u7684\u6027\u80fd\u4e0b\u964d\u3002<br \/>\n\u9ad8\u8d1f\u8f7d\u7cfb\u7edf\u4e0a\u7684\u8c03\u5ea6\u6027\u80fd\u6bd4\u8f83\u4f4e\uff1a2.4\u7684\u8c03\u5ea6\u5668\u9884\u5206\u914d\u7ed9\u6bcf\u4e2a\u8fdb\u7a0b\u7684\u65f6\u95f4\u7247\u6bd4\u8f83\u5927\uff0c\u56e0\u6b64\u5728\u9ad8\u8d1f\u8f7d\u7684\u670d\u52a1\u5668\u4e0a\uff0c\u8be5\u8c03\u5ea6\u5668\u7684\u6548\u7387\u6bd4\u8f83\u4f4e\uff0c\u56e0\u4e3a\u5e73\u5747\u6bcf\u4e2a\u8fdb\u7a0b\u7684\u7b49\u5f85\u65f6\u95f4\u4e8e\u8be5\u65f6\u95f4\u7247\u7684\u5927\u5c0f\u6210\u6b63\u6bd4\u3002<br \/>\n\u4ea4\u4e92\u5f0f\u8fdb\u7a0b\u7684\u4f18\u5316\u5e76\u4e0d\u5b8c\u5584\uff1aLinux2.4\u8bc6\u522b\u4ea4\u4e92\u5f0f\u8fdb\u7a0b\u7684\u539f\u7406\u57fa\u4e8e\u4ee5\u4e0b\u5047\u8bbe\uff0c\u5373\u4ea4\u4e92\u5f0f\u8fdb\u7a0b\u6bd4\u6279\u5904\u7406\u8fdb\u7a0b\u66f4\u9891\u7e41\u5730\u5904\u4e8eSUSPENDED\u72b6\u6001\u3002\u7136\u800c\u73b0\u5b9e\u60c5\u51b5\u5f80\u5f80\u5e76\u975e\u5982\u6b64\uff0c\u6709\u4e9b\u6279\u5904\u7406\u8fdb\u7a0b\u867d\u7136\u6ca1\u6709\u7528\u6237\u4ea4\u4e92\uff0c\u4f46\u662f\u4e5f\u4f1a\u9891\u7e41\u5730\u8fdb\u884cIO\u64cd\u4f5c\uff0c\u6bd4\u5982\u4e00\u4e2a\u6570\u636e\u5e93\u5f15\u64ce\u5728\u5904\u7406\u67e5\u8be2\u65f6\u4f1a\u7ecf\u5e38\u5730\u8fdb\u884c\u78c1\u76d8IO\uff0c\u867d\u7136\u5b83\u4eec\u5e76\u4e0d\u9700\u8981\u5feb\u901f\u5730\u7528\u6237\u54cd\u5e94\uff0c\u8fd8\u662f\u88ab\u63d0\u9ad8\u4e86\u4f18\u5148\u7ea7\u3002\u5f53\u7cfb\u7edf\u4e2d\u8fd9\u7c7b\u8fdb\u7a0b\u7684\u8d1f\u8f7d\u8f83\u91cd\u65f6\uff0c\u4f1a\u5f71\u54cd\u771f\u6b63\u7684\u4ea4\u4e92\u5f0f\u8fdb\u7a0b\u7684\u54cd\u5e94\u65f6\u95f4\u3002<br \/>\n\u5bf9\u5b9e\u65f6\u8fdb\u7a0b\u7684\u652f\u6301\u4e0d\u591f\uff1aLinux2.4\u5185\u6838\u662f\u975e\u62a2\u5360\u7684\uff0c\u5f53\u8fdb\u7a0b\u5904\u4e8e\u5185\u6838\u6001\u65f6\u4e0d\u4f1a\u53d1\u751f\u62a2\u5360\uff0c\u8fd9\u5bf9\u4e8e\u771f\u6b63\u7684\u5b9e\u65f6\u5e94\u7528\u662f\u4e0d\u80fd\u63a5\u53d7\u7684\u3002<br \/>\n\u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898\uff0cIngo Molnar\u5f00\u53d1\u4e86\u65b0\u7684O(1)\u8c03\u5ea6\u5668\uff0c\u5728CFS\u548cRSDL\u4e4b\u524d\uff0c\u8fd9\u4e2a\u8c03\u5ea6\u5668\u4e0d\u4ec5\u88abLinux2.6\u91c7\u7528\uff0c\u8fd8\u88abbackport\u5230Linux2.4\u4e2d\uff0c\u5f88\u591a\u5546\u4e1a\u7684\u53d1\u884c\u7248\u672c\u90fd\u91c7\u7528\u4e86\u8fd9\u4e2a\u8c03\u5ea6\u5668\u3002<br \/>\n\uff083\uff09Linux 2.6\u7684O(1)\u8c03\u5ea6\u5668<br \/>\n\u4ece\u540d\u5b57\u5c31\u53ef\u4ee5\u770b\u51faO(1)\u8c03\u5ea6\u5668\u4e3b\u8981\u89e3\u51b3\u4e86\u4ee5\u524d\u7248\u672c\u4e2d\u7684\u6269\u5c55\u6027\u95ee\u9898\u3002O(1)\u8c03\u5ea6\u7b97\u6cd5\u6240\u82b1\u8d39\u7684\u65f6\u95f4\u4e3a\u5e38\u6570\uff0c\u4e0e\u5f53\u524d\u7cfb\u7edf\u4e2d\u7684\u8fdb\u7a0b\u4e2a\u6570\u65e0\u5173\u3002\u6b64\u5916Linux 2.6\u5185\u6838\u652f\u6301\u5185\u6838\u6001\u62a2\u5360\uff0c\u56e0\u6b64\u66f4\u597d\u5730\u652f\u6301\u4e86\u5b9e\u65f6\u8fdb\u7a0b\u3002\u76f8\u5bf9\u4e8e\u524d\u4efb\uff0cO(1)\u8c03\u5ea6\u5668\u8fd8\u66f4\u597d\u5730\u533a\u5206\u4e86\u4ea4\u4e92\u5f0f\u8fdb\u7a0b\u548c\u6279\u5904\u7406\u5f0f\u8fdb\u7a0b\u3002Linux 2.6\u5185\u6838\u4e5f\u652f\u6301\u4e09\u79cd\u8c03\u5ea6\u7b56\u7565\u3002\u5176\u4e2dSCHED_FIFO\u548cSCHED_RR\u7528\u4e8e\u5b9e\u65f6\u8fdb\u7a0b\uff0c\u800cSCHED_NORMAL\u7528\u4e8e\u666e\u901a\u8fdb\u7a0b\u3002O(1)\u8c03\u5ea6\u5668\u5728\u4e24\u4e2a\u65b9\u9762\u4fee\u6539\u4e86Linux 2.4\u8c03\u5ea6\u5668\uff0c\u4e00\u662f\u8fdb\u7a0b\u4f18\u5148\u7ea7\u7684\u8ba1\u7b97\u65b9\u6cd5\uff1b\u4e8c\u662fpick next\u7b97\u6cd5\u3002O(1)\u8c03\u5ea6\u5668\u8ddf\u8e2a\u8fd0\u884c\u961f\u5217\u4e2d\u53ef\u8fd0\u884c\u7684\u4efb\u52a1\uff08\u5b9e\u9645\u4e0a\uff0c\u6bcf\u4e2a\u4f18\u5148\u7ea7\u6c34\u5e73\u6709\u4e24\u4e2a\u8fd0\u884c\u961f\u5217\uff0c\u4e00\u4e2a\u7528\u4e8e\u6d3b\u52a8\u4efb\u52a1\uff0c\u4e00\u4e2a\u7528\u4e8e\u8fc7\u671f\u4efb\u52a1\uff09\uff0c \u8fd9\u610f\u5473\u7740\u8981\u786e\u5b9a\u63a5\u4e0b\u6765\u6267\u884c\u7684\u4efb\u52a1\uff0c\u8c03\u5ea6\u5668\u53ea\u9700\u6309\u4f18\u5148\u7ea7\u5c06\u4e0b\u4e00\u4e2a\u4efb\u52a1\u4ece\u7279\u5b9a\u6d3b\u52a8\u7684\u8fd0\u884c\u961f\u5217\u4e2d\u53d6\u51fa\u5373\u53ef\u3002<br \/>\n1\uff09\u666e\u901a\u8fdb\u7a0b\u7684\u4f18\u5148\u7ea7\u8ba1\u7b97<br \/>\n\u4e0d\u540c\u7c7b\u578b\u7684\u8fdb\u7a0b\u5e94\u8be5\u6709\u4e0d\u540c\u7684\u4f18\u5148\u7ea7\u3002\u6bcf\u4e2a\u8fdb\u7a0b\u4e0e\u751f\u4ff1\u6765\uff08\u5373\u4ece\u7236\u8fdb\u7a0b\u90a3\u91cc\u7ee7\u627f\u800c\u6765\uff09\u90fd\u6709\u4e00\u4e2a\u4f18\u5148\u7ea7\uff0c\u6211\u4eec\u5c06\u5176\u79f0\u4e3a\u9759\u6001\u4f18\u5148\u7ea7\u3002\u666e\u901a\u8fdb\u7a0b\u7684\u9759\u6001\u4f18\u5148\u7ea7\u8303\u56f4\u4ece100\u5230139\uff0c100\u4e3a\u6700\u9ad8\u4f18\u5148\u7ea7\uff0c139 \u4e3a\u6700\u4f4e\u4f18\u5148\u7ea7\uff0c0\uff0d99\u4fdd\u7559\u7ed9\u5b9e\u65f6\u8fdb\u7a0b\u3002\u5f53\u8fdb\u7a0b\u7528\u5b8c\u4e86\u65f6\u95f4\u7247\u540e\uff0c\u7cfb\u7edf\u5c31\u4f1a\u4e3a\u8be5\u8fdb\u7a0b\u5206\u914d\u65b0\u7684\u65f6\u95f4\u7247\uff08\u5373\u57fa\u672c\u65f6\u95f4\u7247\uff09\uff0c\u9759\u6001\u4f18\u5148\u7ea7\u672c\u8d28\u4e0a\u51b3\u5b9a\u4e86\u65f6\u95f4\u7247\u5206\u914d\u7684\u5927\u5c0f\u3002\u9759\u6001\u4f18\u5148\u7ea7\u548c\u57fa\u672c\u65f6\u95f4\u7247\u7684\u5173\u7cfb\u5982\u4e0b\uff1a<br \/>\n\u9759\u6001\u4f18\u5148\u7ea7&lt;120\uff0c\u57fa\u672c\u65f6\u95f4\u7247=max((140-\u9759\u6001\u4f18\u5148\u7ea7)*20, MIN_TIMESLICE)<br \/>\n\u9759\u6001\u4f18\u5148\u7ea7&gt;=120\uff0c\u57fa\u672c\u65f6\u95f4\u7247=max((140-\u9759\u6001\u4f18\u5148\u7ea7)*5, MIN_TIMESLICE)<br \/>\n\u5176\u4e2dMIN_TIMESLICE\u4e3a\u7cfb\u7edf\u89c4\u5b9a\u7684\u6700\u5c0f\u65f6\u95f4\u7247\u3002\u4ece\u8be5\u8ba1\u7b97\u516c\u5f0f\u53ef\u4ee5\u770b\u51fa\uff0c\u9759\u6001\u4f18\u5148\u7ea7\u8d8a\u9ad8\uff08\u503c\u8d8a\u4f4e\uff09\uff0c\u8fdb\u7a0b\u5f97\u5230\u7684\u65f6\u95f4\u7247\u8d8a\u957f\u3002\u5176\u7ed3\u679c\u662f\uff0c\u4f18\u5148\u7ea7\u9ad8\u7684\u8fdb\u7a0b\u4f1a\u83b7\u5f97\u66f4\u957f\u7684\u65f6\u95f4\u7247\uff0c\u800c\u4f18\u5148\u7ea7\u4f4e\u7684\u8fdb\u7a0b\u5f97\u5230\u7684\u65f6\u95f4\u7247\u5219\u8f83\u77ed\u3002\u8fdb\u7a0b\u9664\u4e86\u62e5\u6709\u9759\u6001\u4f18\u5148\u7ea7\u5916\uff0c\u8fd8\u6709\u52a8\u6001\u4f18\u5148\u7ea7\uff0c\u5176\u53d6\u503c\u8303\u56f4\u662f100\u5230139\u3002\u5f53\u8c03\u5ea6\u7a0b\u5e8f\u9009\u62e9\u65b0\u8fdb\u7a0b\u8fd0\u884c\u65f6\u5c31\u4f1a\u4f7f\u7528\u8fdb\u7a0b\u7684\u52a8\u6001\u4f18\u5148\u7ea7\uff0c\u52a8\u6001\u4f18\u5148\u7ea7\u548c\u9759\u6001\u4f18\u5148\u7ea7\u7684\u5173\u7cfb\u53ef\u53c2\u8003\u4e0b\u9762\u7684\u516c\u5f0f\uff1a<br \/>\n\u52a8\u6001\u4f18\u5148\u7ea7=max(100 , min(\u9759\u6001\u4f18\u5148\u7ea7 \u2013 bonus + 5) , 139)<br \/>\n\u4ece\u4e0a\u9762\u770b\u51fa\uff0c\u52a8\u6001\u4f18\u5148\u7ea7\u7684\u751f\u6210\u662f\u4ee5\u9759\u6001\u4f18\u5148\u7ea7\u4e3a\u57fa\u7840\uff0c\u518d\u52a0\u4e0a\u76f8\u5e94\u7684\u60e9\u7f5a\u6216\u5956\u52b1(bonus)\u3002\u8fd9\u4e2abonus\u5e76\u4e0d\u662f\u968f\u673a\u7684\u4ea7\u751f\uff0c\u800c\u662f\u6839\u636e\u8fdb\u7a0b\u8fc7\u53bb\u7684\u5e73\u5747\u7761\u7720\u65f6\u95f4\u505a\u76f8\u5e94\u7684\u60e9\u7f5a\u6216\u5956\u52b1\u3002\u6240\u8c13\u5e73\u5747\u7761\u7720\u65f6\u95f4\uff08sleep_avg\uff0c\u4f4d\u4e8etask_struct\u7ed3\u6784\u4e2d\uff09\u5c31\u662f\u8fdb\u7a0b\u5728\u7761\u7720\u72b6\u6001\u6240\u6d88\u8017\u7684\u603b\u65f6\u95f4\u6570\uff0c\u8fd9\u91cc\u7684\u5e73\u5747\u5e76\u4e0d\u662f\u76f4\u63a5\u5bf9\u65f6\u95f4\u6c42\u5e73\u5747\u6570\u3002\u5e73\u5747\u7761\u7720\u65f6\u95f4\u968f\u7740\u8fdb\u7a0b\u7684\u7761\u7720\u800c\u589e\u957f\uff0c\u968f\u7740\u8fdb\u7a0b\u7684\u8fd0\u884c\u800c\u51cf\u5c11\u3002\u56e0\u6b64\uff0c\u5e73\u5747\u7761\u7720\u65f6\u95f4\u8bb0\u5f55\u4e86\u8fdb\u7a0b\u7761\u7720\u548c\u6267\u884c\u7684\u65f6\u95f4\uff0c\u5b83\u662f\u7528\u6765\u5224\u65ad\u8fdb\u7a0b\u4ea4\u4e92\u6027\u5f3a\u5f31\u7684\u5173\u952e\u6570\u636e\u3002\u5982\u679c\u4e00\u4e2a\u8fdb\u7a0b\u7684\u5e73\u5747\u7761\u7720\u65f6\u95f4\u5f88\u5927\uff0c\u90a3\u4e48\u5b83\u5f88\u53ef\u80fd\u662f\u4e00\u4e2a\u4ea4\u4e92\u6027\u5f88\u5f3a\u7684\u8fdb\u7a0b\u3002\u53cd\u4e4b\uff0c\u5982\u679c\u4e00\u4e2a\u8fdb\u7a0b\u7684\u5e73\u5747\u7761\u7720\u65f6\u95f4\u5f88\u5c0f\uff0c\u90a3\u4e48\u5b83\u5f88\u53ef\u80fd\u4e00\u76f4\u5728\u6267\u884c\u3002\u53e6\u5916\uff0c\u5e73\u5747\u7761\u7720\u65f6\u95f4\u4e5f\u8bb0\u5f55\u7740\u8fdb\u7a0b\u5f53\u524d\u7684\u4ea4\u4e92\u72b6\u6001\uff0c\u6709\u5f88\u5feb\u7684\u53cd\u5e94\u901f\u5ea6\u3002\u6bd4\u5982\u4e00\u4e2a\u8fdb\u7a0b\u5728\u67d0\u4e00\u5c0f\u6bb5\u65f6\u95f4\u4ea4\u4e92\u6027\u5f88\u5f3a\uff0c\u90a3\u4e48sleep_avg\u5c31\u6709\u53ef\u80fd\u66b4\u6da8\uff08\u5f53\u7136\u5b83\u4e0d\u80fd\u8d85\u8fc7 MAX_SLEEP_AVG\uff09\uff0c\u4f46\u5982\u679c\u4e4b\u540e\u90fd\u4e00\u76f4\u5904\u4e8e\u6267\u884c\u72b6\u6001\uff0c\u90a3\u4e48sleep_avg\u5c31\u53c8\u53ef\u80fd\u4e00\u76f4\u9012\u51cf\u3002\u7406\u89e3\u4e86\u5e73\u5747\u7761\u7720\u65f6\u95f4\uff0c\u90a3\u4e48bonus\u7684\u542b\u4e49\u4e5f\u5c31\u663e\u800c\u6613\u89c1\u4e86\u3002\u4ea4\u4e92\u6027\u5f3a\u7684\u8fdb\u7a0b\u4f1a\u5f97\u5230\u8c03\u5ea6\u7a0b\u5e8f\u7684\u5956\u52b1\uff08bonus\u4e3a\u6b63\uff09\uff0c\u800c\u90a3\u4e9b\u4e00\u76f4\u9738\u5360CPU\u7684\u8fdb\u7a0b\u4f1a\u5f97\u5230\u76f8\u5e94\u7684\u60e9\u7f5a\uff08bonus\u4e3a\u8d1f\uff09\u3002\u5176\u5b9ebonus\u76f8\u5f53\u4e8e\u5e73\u5747\u7761\u7720\u65f6\u95f4\u7684\u7f29\u5f71\uff0c\u6b64\u65f6\u53ea\u662f\u5c06sleep_avg\u8c03\u6574\u6210bonus\u6570\u503c\u8303\u56f4\u5185\u7684\u5927\u5c0f\u3002\u53ef\u89c1\u5e73\u5747\u7761\u7720\u65f6\u95f4\u53ef\u4ee5\u7528\u6765\u8861\u91cf\u8fdb\u7a0b\u662f\u5426\u662f\u4e00\u4e2a\u4ea4\u4e92\u5f0f\u8fdb\u7a0b\u3002\u5982\u679c\u6ee1\u8db3\u4e0b\u9762\u7684\u516c\u5f0f\uff0c\u8fdb\u7a0b\u5c31\u88ab\u8ba4\u4e3a\u662f\u4e00\u4e2a\u4ea4\u4e92\u5f0f\u8fdb\u7a0b\uff1a<br \/>\n\u52a8\u6001\u4f18\u5148\u7ea7\u22643*\u9759\u6001\u4f18\u5148\u7ea7\/4 + 28<br \/>\n\u5e73\u5747\u7761\u7720\u65f6\u95f4\u662f\u8fdb\u7a0b\u5904\u4e8e\u7b49\u5f85\u7761\u7720\u72b6\u6001\u4e0b\u7684\u65f6\u95f4\uff0c\u8be5\u503c\u5728\u8fdb\u7a0b\u8fdb\u5165\u7761\u7720\u72b6\u6001\u65f6\u589e\u52a0\uff0c\u800c\u8fdb\u5165RUNNING\u72b6\u6001\u540e\u5219\u51cf\u5c11\u3002\u8be5\u503c\u7684\u66f4\u65b0\u65f6\u673a\u5206\u5e03\u5728\u5f88\u591a\u5185\u6838\u51fd\u6570\u5185\uff1a\u65f6\u949f\u4e2d\u65adscheduler_tick()\uff1b\u8fdb\u7a0b\u521b\u5efa\uff1b\u8fdb\u7a0b\u4eceTASK_INTERRUPTIBLE\u72b6\u6001\u5524\u9192\uff1b\u8d1f\u8f7d\u5e73\u8861\u7b49\u3002<br \/>\n2\uff09\u5b9e\u65f6\u8fdb\u7a0b\u7684\u4f18\u5148\u7ea7\u8ba1\u7b97<br \/>\n\u5b9e\u65f6\u8fdb\u7a0b\u7684\u4f18\u5148\u7ea7\u7531sys_sched_setschedule()\u8bbe\u7f6e\u3002\u8be5\u503c\u4e0d\u4f1a\u52a8\u6001\u4fee\u6539\uff0c\u800c\u4e14\u603b\u662f\u6bd4\u666e\u901a\u8fdb\u7a0b\u7684\u4f18\u5148\u7ea7\u9ad8\u3002\u5728\u8fdb\u7a0b\u63cf\u8ff0\u7b26\u4e2d\u7528rt_priority\u57df\u8868\u793a\u3002<br \/>\n3\uff09pick next\u7b97\u6cd5<br \/>\n\u666e\u901a\u8fdb\u7a0b\u7684\u8c03\u5ea6\u9009\u62e9\u7b97\u6cd5\u57fa\u4e8e\u8fdb\u7a0b\u7684\u4f18\u5148\u7ea7\uff0c\u62e5\u6709\u6700\u9ad8\u4f18\u5148\u7ea7\u7684\u8fdb\u7a0b\u88ab\u8c03\u5ea6\u5668\u9009\u4e2d\u30022.4\u4e2d\uff0c\u65f6\u95f4\u7247counter\u540c\u65f6\u4e5f\u8868\u793a\u4e86\u4e00\u4e2a\u8fdb\u7a0b\u7684\u4f18\u5148\u7ea7\u30022.6\u4e2d\u65f6\u95f4\u7247\u7528\u4efb\u52a1\u63cf\u8ff0\u7b26\u4e2d\u7684time_slice\u57df\u8868\u793a\uff0c\u800c\u4f18\u5148\u7ea7\u7528prio\uff08\u666e\u901a\u8fdb\u7a0b\uff09\u6216\u8005rt_priority\uff08\u5b9e\u65f6\u8fdb\u7a0b\uff09\u8868\u793a\u3002\u8c03\u5ea6\u5668\u4e3a\u6bcf\u4e00\u4e2aCPU\u7ef4\u62a4\u4e86\u4e24\u4e2a\u8fdb\u7a0b\u961f\u5217\u6570\u7ec4\uff1a\u6307\u5411\u6d3b\u52a8\u8fd0\u884c\u961f\u5217\u7684active\u6570\u7ec4\u548c\u6307\u5411\u8fc7\u671f\u8fd0\u884c\u961f\u5217\u7684expire\u6570\u7ec4\u3002\u6570\u7ec4\u4e2d\u7684\u5143\u7d20\u7740\u4fdd\u5b58\u67d0\u4e00\u4f18\u5148\u7ea7\u7684\u8fdb\u7a0b\u961f\u5217\u6307\u9488\u3002\u7cfb\u7edf\u4e00\u5171\u6709140\u4e2a\u4e0d\u540c\u7684\u4f18\u5148\u7ea7\uff0c\u56e0\u6b64\u8fd9\u4e24\u4e2a\u6570\u7ec4\u5927\u5c0f\u90fd\u662f140\u3002\u5b83\u4eec\u662f\u6309\u7167\u5148\u8fdb\u5148\u51fa\u7684\u987a\u5e8f\u8fdb\u884c\u670d\u52a1\u7684\u3002\u88ab\u8c03\u5ea6\u6267\u884c\u7684\u4efb\u52a1\u90fd\u4f1a\u88ab\u6dfb\u52a0\u5230\u5404\u81ea\u8fd0\u884c\u961f\u5217\u4f18\u5148\u7ea7\u5217\u8868\u7684\u672b\u5c3e\u3002\u6bcf\u4e2a\u4efb\u52a1\u90fd\u6709\u4e00\u4e2a\u65f6\u95f4\u7247\uff0c\u8fd9\u53d6\u51b3\u4e8e\u7cfb\u7edf\u5141\u8bb8\u6267\u884c\u8fd9\u4e2a\u4efb\u52a1\u591a\u957f\u65f6\u95f4\u3002\u8fd0\u884c\u961f\u5217\u7684\u524d100\u4e2a\u4f18\u5148\u7ea7\u5217\u8868\u4fdd\u7559\u7ed9\u5b9e\u65f6\u4efb\u52a1\u4f7f\u7528\uff0c\u540e40\u4e2a\u7528\u4e8e\u7528\u6237\u4efb\u52a1\uff0c\u53c2\u89c1\u4e0b\u56fe\uff1a<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/hi.csdn.net\/attachment\/201203\/20\/0_13322504982k3y.gif\" alt=\"\" \/><\/p>\n<p>\u56fe1 \u8c03\u5ea6\u5668\u7684\u8fd0\u884c\u961f\u5217\u7ed3\u6784<\/p>\n<p>\u5f53\u9700\u8981\u9009\u62e9\u5f53\u524d\u6700\u9ad8\u4f18\u5148\u7ea7\u7684\u8fdb\u7a0b\u65f6\uff0c2.6\u8c03\u5ea6\u5668\u4e0d\u7528\u904d\u5386\u6574\u4e2arunqueue\uff0c\u800c\u662f\u76f4\u63a5\u4eceactive\u6570\u7ec4\u4e2d\u9009\u62e9\u5f53\u524d\u6700\u9ad8\u4f18\u5148\u7ea7\u961f\u5217\u4e2d\u7684\u7b2c\u4e00\u4e2a\u8fdb\u7a0b\u3002\u5047\u8bbe\u5f53\u524d\u6240\u6709\u8fdb\u7a0b\u4e2d\u6700\u9ad8\u4f18\u5148\u7ea7\u4e3a50\uff08\u6362\u53e5\u8bdd\u8bf4\uff0c\u7cfb\u7edf\u4e2d\u6ca1\u6709\u4efb\u4f55\u8fdb\u7a0b\u7684\u4f18\u5148\u7ea7\u5c0f\u4e8e50\uff09\u3002\u5219\u8c03\u5ea6\u5668\u76f4\u63a5\u8bfb\u53d6 active[49]\uff0c\u5f97\u5230\u4f18\u5148\u7ea7\u4e3a50\u7684\u8fdb\u7a0b\u961f\u5217\u6307\u9488\u3002\u8be5\u961f\u5217\u5934\u4e0a\u7684\u7b2c\u4e00\u4e2a\u8fdb\u7a0b\u5c31\u662f\u88ab\u9009\u4e2d\u7684\u8fdb\u7a0b\u3002\u8fd9\u79cd\u7b97\u6cd5\u7684\u590d\u6742\u5ea6\u4e3aO(1)\uff0c\u4ece\u800c\u89e3\u51b3\u4e862.4\u8c03\u5ea6\u5668\u7684\u6269\u5c55\u6027\u95ee\u9898\u3002\u4e3a\u4e86\u5b9e\u73b0O(1)\u7b97\u6cd5active\u6570\u7ec4\u7ef4\u62a4\u4e86\u4e00\u4e2a\u75315\u4e2a32\u4f4d\u7684\u5b57\uff08140\u4e2a\u4f18\u5148\u7ea7\uff09\u7ec4\u6210\u7684bitmap\uff0c\u5f53\u67d0\u4e2a\u4f18\u5148\u7ea7\u522b\u4e0a\u6709\u8fdb\u7a0b\u88ab\u63d2\u5165\u5217\u8868\u65f6\uff0c\u76f8\u5e94\u7684\u6bd4\u7279\u4f4d\u5c31\u88ab\u7f6e\u4f4d\u3002 sched_find_first_bit()\u51fd\u6570\u67e5\u8be2\u8be5bitmap\uff0c\u8fd4\u56de\u5f53\u524d\u88ab\u7f6e\u4f4d\u7684\u6700\u9ad8\u4f18\u5148\u7ea7\u7684\u6570\u7ec4\u4e0b\u6807\u3002\u5728\u4e0a\u4f8b\u4e2dsched_find_first_bit\u51fd\u6570\u5c06\u8fd4\u56de49\u3002\u5728IA\u5904\u7406\u5668\u4e0a\u53ef\u4ee5\u901a\u8fc7bsfl\u7b49\u6307\u4ee4\u5b9e\u73b0\u3002\u53ef\u89c1\u67e5\u627e\u4e00\u4e2a\u4efb\u52a1\u6765\u6267\u884c\u6240\u9700\u8981\u7684\u65f6\u95f4\u5e76\u4e0d\u4f9d\u8d56\u4e8e\u6d3b\u52a8\u4efb\u52a1\u7684\u4e2a\u6570\uff0c\u800c\u662f\u4f9d\u8d56\u4e8e\u4f18\u5148\u7ea7\u7684\u6570\u91cf\u3002\u8fd9\u4f7f\u5f97 2.6 \u7248\u672c\u7684\u8c03\u5ea6\u5668\u6210\u4e3a\u4e00\u4e2a\u590d\u6742\u5ea6\u4e3a O(1) \u7684\u8fc7\u7a0b\uff0c\u56e0\u4e3a\u8c03\u5ea6\u65f6\u95f4\u65e2\u662f\u56fa\u5b9a\u7684\uff0c\u800c\u4e14\u4e5f\u4e0d\u4f1a\u53d7\u5230\u6d3b\u52a8\u4efb\u52a1\u4e2a\u6570\u7684\u5f71\u54cd\u3002<br \/>\n\u4e3a\u4e86\u63d0\u9ad8\u4ea4\u4e92\u5f0f\u8fdb\u7a0b\u7684\u54cd\u5e94\u65f6\u95f4\uff0cO(1)\u8c03\u5ea6\u5668\u4e0d\u4ec5\u52a8\u6001\u5730\u63d0\u9ad8\u8be5\u7c7b\u8fdb\u7a0b\u7684\u4f18\u5148\u7ea7\uff0c\u8fd8\u91c7\u7528\u4ee5\u4e0b\u65b9\u6cd5\uff1a\u6bcf\u6b21\u65f6\u949ftick\u4e2d\u65ad\u65f6\uff0c\u8fdb\u7a0b\u7684\u65f6\u95f4\u7247(time_slice)\u88ab\u51cf\u4e00\u3002\u5f53time_slice\u4e3a0\u65f6\uff0c\u8868\u793a\u5f53\u524d\u8fdb\u7a0b\u7684\u65f6\u95f4\u7247\u7528\u5b8c\uff0c\u8c03\u5ea6\u5668\u5224\u65ad\u5f53\u524d\u8fdb\u7a0b\u7684\u7c7b\u578b\uff0c\u5982\u679c\u662f\u4ea4\u4e92\u5f0f\u8fdb\u7a0b\u6216\u8005\u5b9e\u65f6\u8fdb\u7a0b\uff0c\u5219\u91cd\u7f6e\u5176\u65f6\u95f4\u7247\u5e76\u91cd\u65b0\u63d2\u5165active\u6570\u7ec4\u3002\u5982\u679c\u4e0d\u662f\u4ea4\u4e92\u5f0f\u8fdb\u7a0b\u5219\u4eceactive\u6570\u7ec4\u4e2d\u79fb\u5230expired\u6570\u7ec4\uff0c\u5e76\u6839\u636e\u4e0a\u8ff0\u516c\u5f0f\u91cd\u65b0\u8ba1\u7b97\u65f6\u95f4\u7247\u3002\u8fd9\u6837\u5b9e\u65f6\u8fdb\u7a0b\u548c\u4ea4\u4e92\u5f0f\u8fdb\u7a0b\u5c31\u603b\u80fd\u4f18\u5148\u83b7\u5f97CPU\u3002\u7136\u800c\u8fd9\u4e9b\u8fdb\u7a0b\u4e0d\u80fd\u59cb\u7ec8\u7559\u5728active\u6570\u7ec4\u4e2d\uff0c\u5426\u5219\u8fdb\u5165expire\u6570\u7ec4\u7684\u8fdb\u7a0b\u5c31\u4f1a\u4ea7\u751f\u9965\u997f\u73b0\u8c61\u3002\u5f53\u8fdb\u7a0b\u5df2\u7ecf\u5360\u7528CPU\u65f6\u95f4\u8d85\u8fc7\u4e00\u4e2a\u56fa\u5b9a\u503c\u540e\uff0c\u5373\u4f7f\u5b83\u662f\u5b9e\u65f6\u8fdb\u7a0b\u6216\u8005\u4ea4\u4e92\u5f0f\u8fdb\u7a0b\u4e5f\u4f1a\u88ab\u79fb\u5230expire\u6570\u7ec4\u4e2d\u3002\u5f53active\u6570\u7ec4\u4e2d\u7684\u6240\u6709\u8fdb\u7a0b\u90fd\u88ab\u79fb\u5230expire\u6570\u7ec4\u4e2d\u540e\uff0c\u8c03\u5ea6\u5668\u4ea4\u6362active\u6570\u7ec4\u548cexpire\u6570\u7ec4\u3002\u56e0\u6b64\u65b0\u7684active\u6570\u7ec4\u53c8\u6062\u590d\u4e86\u521d\u59cb\u60c5\u51b5\uff0c\u800cexpire\u6570\u7ec4\u4e3a\u7a7a\uff0c\u4ece\u800c\u5f00\u59cb\u65b0\u7684\u4e00\u8f6e\u8c03\u5ea6\u3002<br \/>\nLinux 2.6\u8c03\u5ea6\u5668\u6539\u8fdb\u4e86\u524d\u4efb\u8c03\u5ea6\u5668\u7684\u53ef\u6269\u5c55\u6027\u95ee\u9898\uff0cschedule()\u51fd\u6570\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3aO(1)\u3002\u8fd9\u53d6\u51b3\u4e8e\u4e24\u4e2a\u6539\u8fdb\uff1a<br \/>\n1\uff09Pick next\u7b97\u6cd5\u501f\u52a9\u4e8eactive\u6570\u7ec4\uff0c\u65e0\u9700\u904d\u5386runqueue\uff1b<br \/>\n2\uff09\u53d6\u6d88\u4e86\u5b9a\u671f\u66f4\u65b0\u6240\u6709\u8fdb\u7a0bcounter\u7684\u64cd\u4f5c\uff0c\u52a8\u6001\u4f18\u5148\u7ea7\u7684\u4fee\u6539\u5206\u5e03\u5728\u8fdb\u7a0b\u5207\u6362\uff0c\u65f6\u949ftick\u4e2d\u65ad\u4ee5\u53ca\u5176\u5b83\u4e00\u4e9b\u5185\u6838\u51fd\u6570\u4e2d\u8fdb\u884c\u3002<br \/>\nO(1)\u8c03\u5ea6\u5668\u533a\u5206\u4ea4\u4e92\u5f0f\u8fdb\u7a0b\u548c\u6279\u5904\u7406\u8fdb\u7a0b\u7684\u7b97\u6cd5\u4e0e\u4ee5\u524d\u867d\u5927\u6709\u6539\u8fdb\uff0c\u4f46\u4ecd\u7136\u5728\u5f88\u591a\u60c5\u51b5\u4e0b\u4f1a\u5931\u6548\u3002\u6709\u4e00\u4e9b\u8457\u540d\u7684\u7a0b\u5e8f\u603b\u80fd\u8ba9\u8be5\u8c03\u5ea6\u5668\u6027\u80fd\u4e0b\u964d\uff0c\u5bfc\u81f4\u4ea4\u4e92\u5f0f\u8fdb\u7a0b\u53cd\u5e94\u7f13\u6162\u3002\u4f8b\u5982fiftyp.c, thud.c, chew.c, ring-test.c, massive_intr.c\u7b49\u3002\u800c\u4e14O(1)\u8c03\u5ea6\u5668\u5bf9NUMA\u652f\u6301\u4e5f\u4e0d\u5b8c\u5584\u3002\u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898\uff0c\u5927\u91cf\u96be\u4ee5\u7ef4\u62a4\u548c\u9605\u8bfb\u7684\u590d\u6742\u4ee3\u7801\u88ab\u52a0\u5165Linux2.6.0\u7684\u8c03\u5ea6\u5668\u6a21\u5757\uff0c\u867d\u7136\u5f88\u591a\u6027\u80fd\u95ee\u9898\u56e0\u6b64\u5f97\u5230\u4e86\u89e3\u51b3\uff0c\u53ef\u662f\u53e6\u5916\u4e00\u4e2a\u4e25\u91cd\u95ee\u9898\u59cb\u7ec8\u56f0\u6270\u7740\u8bb8\u591a\u5185\u6838\u5f00\u53d1\u8005\uff0c\u90a3\u5c31\u662f\u4ee3\u7801\u7684\u590d\u6742\u5ea6\u95ee\u9898\u3002\u5f88\u591a\u590d\u6742\u7684\u4ee3\u7801\u96be\u4ee5\u7ba1\u7406\u5e76\u4e14\u5bf9\u4e8e\u7eaf\u7cb9\u4e3b\u4e49\u8005\u800c\u8a00\u672a\u80fd\u4f53\u73b0\u7b97\u6cd5\u7684\u672c\u8d28\u3002<br \/>\n\u4e3a\u4e86\u89e3\u51b3 O(1) \u8c03\u5ea6\u5668\u9762\u4e34\u7684\u95ee\u9898\u4ee5\u53ca\u5e94\u5bf9\u5176\u4ed6\u5916\u90e8\u538b\u529b\uff0c \u9700\u8981\u6539\u53d8\u67d0\u4e9b\u4e1c\u897f\u3002\u8fd9\u79cd\u6539\u53d8\u6765\u81eaCon Kolivas\u7684\u5185\u6838\u8865\u4e01staircase scheduler\uff08\u697c\u68af\u8c03\u5ea6\u7b97\u6cd5\uff09\uff0c\u4ee5\u53ca\u6539\u8fdb\u7684RSDL\uff08Rotating Staircase Deadline Scheduler\uff09\u3002\u5b83\u4e3a\u8c03\u5ea6\u5668\u8bbe\u8ba1\u63d0\u4f9b\u4e86\u4e00\u4e2a\u65b0\u7684\u601d\u8def\u3002Ingo Molnar\u5728RSDL\u4e4b\u540e\u5f00\u53d1\u4e86CFS\uff0c\u5e76\u6700\u7ec8\u88ab2.6.23\u5185\u6838\u91c7\u7528\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u5f00\u59cb\u4ecb\u7ecd\u8fd9\u4e9b\u65b0\u4e00\u4ee3\u8c03\u5ea6\u5668\u3002<br \/>\n3. Linux 2.6\u7684\u65b0\u4e00\u4ee3\u8c03\u5ea6\u5668CFS<br \/>\n\uff081\uff09\u697c\u68af\u8c03\u5ea6\u7b97\u6cd5staircase scheduler<br \/>\n\u697c\u68af\u7b97\u6cd5(SD)\u5728\u601d\u8def\u4e0a\u548cO(1)\u7b97\u6cd5\u6709\u5f88\u5927\u4e0d\u540c\uff0c\u5b83\u629b\u5f03\u4e86\u52a8\u6001\u4f18\u5148\u7ea7\u7684\u6982\u5ff5\u3002\u800c\u91c7\u7528\u4e86\u4e00\u79cd\u5b8c\u5168\u516c\u5e73\u7684\u601d\u8def\u3002\u524d\u4efb\u7b97\u6cd5\u7684\u4e3b\u8981\u590d\u6742\u6027\u6765\u81ea\u52a8\u6001\u4f18\u5148\u7ea7\u7684\u8ba1\u7b97\uff0c\u8c03\u5ea6\u5668\u6839\u636e\u5e73\u5747\u7761\u7720\u65f6\u95f4\u548c\u4e00\u4e9b\u5f88\u96be\u7406\u89e3\u7684\u7ecf\u9a8c\u516c\u5f0f\u6765\u4fee\u6b63\u8fdb\u7a0b\u7684\u4f18\u5148\u7ea7\u4ee5\u53ca\u533a\u5206\u4ea4\u4e92\u5f0f\u8fdb\u7a0b\u3002\u8fd9\u6837\u7684\u4ee3\u7801\u5f88\u96be\u9605\u8bfb\u548c\u7ef4\u62a4\u3002\u697c\u68af\u7b97\u6cd5\u601d\u8def\u7b80\u5355\uff0c\u4f46\u662f\u5b9e\u9a8c\u8bc1\u660e\u5b83\u5bf9\u5e94\u4ea4\u4e92\u5f0f\u8fdb\u7a0b\u7684\u54cd\u5e94\u6bd4\u5176\u524d\u4efb\u66f4\u597d\uff0c\u800c\u4e14\u6781\u5927\u5730\u7b80\u5316\u4e86\u4ee3\u7801\u3002<br \/>\n\u548cO(1)\u7b97\u6cd5\u4e00\u6837\uff0c\u697c\u68af\u7b97\u6cd5\u4e5f\u540c\u6837\u4e3a\u6bcf\u4e00\u4e2a\u4f18\u5148\u7ea7\u7ef4\u62a4\u4e00\u4e2a\u8fdb\u7a0b\u5217\u8868\uff0c\u5e76\u5c06\u8fd9\u4e9b\u5217\u8868\u7ec4\u7ec7\u5728active\u6570\u7ec4\u4e2d\u3002\u5f53\u9009\u53d6\u4e0b\u4e00\u4e2a\u88ab\u8c03\u5ea6\u8fdb\u7a0b\u65f6\uff0cSD\u7b97\u6cd5\u4e5f\u540c\u6837\u4eceactive\u6570\u7ec4\u4e2d\u76f4\u63a5\u8bfb\u53d6\u3002\u4e0eO(1)\u7b97\u6cd5\u4e0d\u540c\u5728\u4e8e\uff0c\u5f53\u8fdb\u7a0b\u7528\u5b8c\u4e86\u81ea\u5df1\u7684\u65f6\u95f4\u7247\u540e\uff0c\u5e76\u4e0d\u662f\u88ab\u79fb\u5230expire\u6570\u7ec4\u4e2d\u3002\u800c\u662f\u88ab\u52a0\u5165active\u6570\u7ec4\u7684\u4f4e\u4e00\u4f18\u5148\u7ea7\u5217\u8868\u4e2d\uff0c\u5373\u5c06\u5176\u964d\u4f4e\u4e00\u4e2a\u7ea7\u522b\u3002\u4e0d\u8fc7\u8bf7\u6ce8\u610f\u8fd9\u91cc\u53ea\u662f\u5c06\u8be5\u4efb\u52a1\u63d2\u5165\u4f4e\u4e00\u7ea7\u4f18\u5148\u7ea7\u4efb\u52a1\u5217\u8868\u4e2d\uff0c\u4efb\u52a1\u672c\u8eab\u7684\u4f18\u5148\u7ea7\u5e76\u6ca1\u6709\u6539\u53d8\u3002\u5f53\u65f6\u95f4\u7247\u518d\u6b21\u7528\u5b8c\uff0c\u4efb\u52a1\u88ab\u518d\u6b21\u653e\u5165\u66f4\u4f4e\u4e00\u7ea7\u4f18\u5148\u7ea7\u4efb\u52a1\u961f\u5217\u4e2d\u3002\u5c31\u8c61\u4e00\u90e8\u697c\u68af\uff0c\u4efb\u52a1\u6bcf\u6b21\u7528\u5b8c\u4e86\u81ea\u5df1\u7684\u65f6\u95f4\u7247\u4e4b\u540e\u5c31\u4e0b\u4e00\u7ea7\u697c\u68af\u3002\u4efb\u52a1\u4e0b\u5230\u6700\u4f4e\u4e00\u7ea7\u697c\u68af\u65f6\uff0c\u5982\u679c\u65f6\u95f4\u7247\u518d\u6b21\u7528\u5b8c\uff0c\u5b83\u4f1a\u56de\u5230\u521d\u59cb\u4f18\u5148\u7ea7\u7684\u4e0b\u4e00\u7ea7\u4efb\u52a1\u961f\u5217\u4e2d\u3002\u6bd4\u5982\u67d0\u8fdb\u7a0b\u7684\u4f18\u5148\u7ea7\u4e3a1\uff0c\u5f53\u5b83\u5230\u8fbe\u6700\u540e\u4e00\u7ea7\u53f0\u9636140\u540e\uff0c\u518d\u6b21\u7528\u5b8c\u65f6\u95f4\u7247\u65f6\u5c06\u56de\u5230\u4f18\u5148\u7ea7\u4e3a2\u7684\u4efb\u52a1\u961f\u5217\u4e2d\uff0c\u5373\u7b2c\u4e8c\u7ea7\u53f0\u9636\u3002\u4e0d\u8fc7\u6b64\u65f6\u5206\u914d\u7ed9\u8be5\u4efb\u52a1\u7684time_slice\u5c06\u53d8\u6210\u539f\u6765\u76842\u500d\u3002\u6bd4\u5982\u539f\u6765\u8be5\u4efb\u52a1\u7684\u65f6\u95f4\u7247time_slice\u4e3a10ms\uff0c\u5219\u73b0\u5728\u53d8\u6210\u4e8620ms\u3002\u57fa\u672c\u7684\u539f\u5219\u662f\uff0c\u5f53\u4efb\u52a1\u4e0b\u5230\u697c\u68af\u5e95\u90e8\u65f6\uff0c\u518d\u6b21\u7528\u5b8c\u65f6\u95f4\u7247\u5c31\u56de\u5230\u4e0a\u6b21\u4e0b\u697c\u68af\u7684\u8d77\u70b9\u7684\u4e0b\u4e00\u7ea7\u53f0\u9636\u3002\u5e76\u7ed9\u4e88\u8be5\u4efb\u52a1\u76f8\u540c\u4e8e\u5176\u6700\u521d\u5206\u914d\u7684\u65f6\u95f4\u7247\u3002\u603b\u7ed3\u5982\u4e0b\uff1a\u8bbe\u4efb\u52a1\u672c\u8eab\u4f18\u5148\u7ea7\u4e3aP\uff0c\u5f53\u5b83\u4ece\u7b2cN\u7ea7\u53f0\u9636\u5f00\u59cb\u4e0b\u697c\u68af\u5e76\u5230\u8fbe\u5e95\u90e8\u540e\uff0c\u5c06\u56de\u5230\u7b2cN+1\u7ea7\u53f0\u9636\u3002\u5e76\u4e14\u8d4b\u4e88\u8be5\u4efb\u52a1N+1\u500d\u7684\u65f6\u95f4\u7247\u3002<br \/>\n\u4ee5\u4e0a\u63cf\u8ff0\u7684\u662f\u666e\u901a\u8fdb\u7a0b\u7684\u8c03\u5ea6\u7b97\u6cd5\uff0c\u5b9e\u65f6\u8fdb\u7a0b\u8fd8\u662f\u91c7\u7528\u539f\u6765\u7684\u8c03\u5ea6\u7b56\u7565\uff0c\u5373FIFO\u6216\u8005Round Robin\u3002<br \/>\n\u697c\u68af\u7b97\u6cd5\u80fd\u907f\u514d\u8fdb\u7a0b\u9965\u997f\u73b0\u8c61\uff0c\u9ad8\u4f18\u5148\u7ea7\u7684\u8fdb\u7a0b\u4f1a\u6700\u7ec8\u548c\u4f4e\u4f18\u5148\u7ea7\u7684\u8fdb\u7a0b\u7ade\u4e89\uff0c\u4f7f\u5f97\u4f4e\u4f18\u5148\u7ea7\u8fdb\u7a0b\u6700\u7ec8\u83b7\u5f97\u6267\u884c\u673a\u4f1a\u3002\u5bf9\u4e8e\u4ea4\u4e92\u5f0f\u5e94\u7528\uff0c\u5f53\u8fdb\u5165\u7761\u7720\u72b6\u6001\u65f6\uff0c\u4e0e\u5b83\u540c\u7b49\u4f18\u5148\u7ea7\u7684\u5176\u4ed6\u8fdb\u7a0b\u5c06\u4e00\u6b65\u4e00\u6b65\u5730\u8d70\u4e0b\u697c\u68af\uff0c\u8fdb\u5165\u4f4e\u4f18\u5148\u7ea7\u8fdb\u7a0b\u961f\u5217\u3002\u5f53\u8be5\u4ea4\u4e92\u5f0f\u8fdb\u7a0b\u518d\u6b21\u5524\u9192\u540e\uff0c\u5b83\u8fd8\u7559\u5728\u9ad8\u5904\u7684\u697c\u68af\u53f0\u9636\u4e0a\uff0c\u4ece\u800c\u80fd\u66f4\u5feb\u5730\u88ab\u8c03\u5ea6\u5668\u9009\u4e2d\uff0c\u52a0\u901f\u4e86\u54cd\u5e94\u65f6\u95f4\u3002<br \/>\n\u697c\u68af\u7b97\u6cd5\u7684\u4f18\u70b9\uff1a\u4ece\u5b9e\u73b0\u89d2\u5ea6\u770b\uff0cSD\u57fa\u672c\u4e0a\u8fd8\u662f\u6cbf\u7528\u4e86O(1)\u7684\u6574\u4f53\u6846\u67b6\uff0c\u53ea\u662f\u5220\u9664\u4e86O(1)\u8c03\u5ea6\u5668\u4e2d\u52a8\u6001\u4fee\u6539\u4f18\u5148\u7ea7\u7684\u590d\u6742\u4ee3\u7801\uff1b\u8fd8\u6dd8\u6c70\u4e86expire\u6570\u7ec4\uff0c\u4ece\u800c\u7b80\u5316\u4e86\u4ee3\u7801\u3002\u5b83\u6700\u91cd\u8981\u7684\u610f\u4e49\u5728\u4e8e\u8bc1\u660e\u4e86\u5b8c\u5168\u516c\u5e73\u8fd9\u4e2a\u601d\u60f3\u7684\u53ef\u884c\u6027\u3002<br \/>\n\uff082\uff09RSDL\uff08Rotating Staircase Deadline Scheduler\uff09<br \/>\nRSDL\u4e5f\u662f\u7531Con Kolivas\u5f00\u53d1\u7684\uff0c\u5b83\u662f\u5bf9SD\u7b97\u6cd5\u7684\u6539\u8fdb\u3002\u6838\u5fc3\u7684\u601d\u60f3\u8fd8\u662f\u201c\u5b8c\u5168\u516c\u5e73\u201d\u3002\u6ca1\u6709\u590d\u6742\u7684\u52a8\u6001\u4f18\u5148\u7ea7\u8c03\u6574\u7b56\u7565\u3002RSDL\u91cd\u65b0\u5f15\u5165\u4e86expire\u6570\u7ec4\u3002\u5b83\u4e3a\u6bcf\u4e00\u4e2a\u4f18\u5148\u7ea7\u90fd\u5206\u914d\u4e86\u4e00\u4e2a \u201c\u7ec4\u65f6\u95f4\u914d\u989d\u201d\uff0c\u8bb0\u4e3aTg\uff1b\u540c\u4e00\u4f18\u5148\u7ea7\u7684\u6bcf\u4e2a\u8fdb\u7a0b\u90fd\u62e5\u6709\u540c\u6837\u7684&#8221;\u4f18\u5148\u7ea7\u65f6\u95f4\u914d\u989d&#8221;\uff0c\u7528Tp\u8868\u793a\u3002\u5f53\u8fdb\u7a0b\u7528\u5b8c\u4e86\u81ea\u8eab\u7684Tp\u65f6\uff0c\u5c31\u4e0b\u964d\u5230\u4e0b\u4e00\u4f18\u5148\u7ea7\u8fdb\u7a0b\u7ec4\u4e2d\u3002\u8fd9\u4e2a\u8fc7\u7a0b\u548cSD\u76f8\u540c\uff0c\u5728RSDL\u4e2d\u8fd9\u4e2a\u8fc7\u7a0b\u53eb\u505aminor rotation\uff08\u6b21\u8f6e\u8be2\uff09\u3002\u8bf7\u6ce8\u610fTp\u4e0d\u7b49\u4e8e\u8fdb\u7a0b\u7684\u65f6\u95f4\u7247\uff0c\u800c\u662f\u5c0f\u4e8e\u8fdb\u7a0b\u7684\u65f6\u95f4\u7247\u3002\u4e0b\u56fe\u8868\u793a\u4e86minor rotation\u3002\u8fdb\u7a0b\u4ecepriority1\u7684\u961f\u5217\u4e2d\u4e00\u6b65\u4e00\u6b65\u4e0b\u5230priority140\u4e4b\u540e\u56de\u5230priority2\u7684\u961f\u5217\u4e2d\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u5982\u4e0b\u56fe\u5de6\u8fb9\u6240\u793a\uff0c\u7136\u540e\u4ecepriority 2\u5f00\u59cb\u518d\u6b21\u4e00\u6b65\u4e00\u6b65\u4e0b\u697c\uff0c\u5230\u5e95\u540e\u518d\u6b21\u53cd\u5f39\u5230priority3\u961f\u5217\u4e2d\uff0c\u5982\u4e0b\u56fe\u6240\u793a\u3002<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/hi.csdn.net\/attachment\/201203\/20\/0_133225068296B9.gif\" alt=\"\" \/><\/p>\n<p>\u56fe2 RSDL\u7684\u6b21\u8f6e\u8be2\u8fc7\u7a0b<\/p>\n<p>\u5728SD\u7b97\u6cd5\u4e2d\uff0c\u5904\u4e8e\u697c\u68af\u5e95\u90e8\u7684\u4f4e\u4f18\u5148\u7ea7\u8fdb\u7a0b\u5fc5\u987b\u7b49\u5f85\u6240\u6709\u7684\u9ad8\u4f18\u5148\u7ea7\u8fdb\u7a0b\u6267\u884c\u5b8c\u624d\u80fd\u83b7\u5f97CPU\u3002\u56e0\u6b64\u4f4e\u4f18\u5148\u7ea7\u8fdb\u7a0b\u7684\u7b49\u5f85\u65f6\u95f4\u65e0\u6cd5\u786e\u5b9a\u3002RSDL\u4e2d\uff0c\u5f53\u9ad8\u4f18\u5148\u7ea7\u8fdb\u7a0b\u7ec4\u7528\u5b8c\u4e86\u5b83\u4eec\u7684Tg(\u5373\u7ec4\u65f6\u95f4\u914d\u989d)\u65f6\uff0c\u65e0\u8bba\u8be5\u7ec4\u4e2d\u662f\u5426\u8fd8\u6709\u8fdb\u7a0bTp\u5c1a\u672a\u7528\u5b8c\uff0c\u6240\u6709\u5c5e\u4e8e\u8be5\u7ec4\u7684\u8fdb\u7a0b\u90fd\u88ab\u5f3a\u5236\u964d\u4f4e\u5230\u4e0b\u4e00\u4f18\u5148\u7ea7\u8fdb\u7a0b\u7ec4\u4e2d\u3002\u8fd9\u6837\u4f4e\u4f18\u5148\u7ea7\u4efb\u52a1\u5c31\u53ef\u4ee5\u5728\u4e00\u4e2a\u53ef\u4ee5\u9884\u8ba1\u7684\u672a\u6765\u5f97\u5230\u8c03\u5ea6\u3002\u4ece\u800c\u6539\u5584\u4e86\u8c03\u5ea6\u7684\u516c\u5e73\u6027\u3002\u8fd9\u5c31\u662fRSDL\u4e2dDeadline\u4ee3\u8868\u7684\u542b\u4e49\u3002<br \/>\n\u8fdb\u7a0b\u7528\u5b8c\u4e86\u81ea\u5df1\u7684\u65f6\u95f4\u7247time_slice\u65f6\uff08\u4e0b\u56fe\u4e2dT2\uff09\uff0c\u5c06\u653e\u5165expire\u6570\u7ec4\u6307\u5411\u7684\u5bf9\u5e94\u521d\u59cb\u4f18\u5148\u7ea7\u961f\u5217\u4e2d(priority 1)\u3002<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/hi.csdn.net\/attachment\/201203\/20\/0_13322508185z4S.gif\" alt=\"\" \/><\/p>\n<p>\u56fe3 \u65f6\u95f4\u7247\u7528\u5b8c\u65f6\u7684\u5904\u7406<\/p>\n<p>\u5f53active\u6570\u7ec4\u4e3a\u7a7a\uff0c\u6216\u8005\u6240\u6709\u7684\u8fdb\u7a0b\u90fd\u964d\u4f4e\u5230\u6700\u4f4e\u4f18\u5148\u7ea7\u65f6\u5c31\u4f1a\u89e6\u53d1\u4e3b\u8f6e\u8be2major rotation\u3002Major rotation\u4ea4\u6362active\u6570\u7ec4\u548cexpire\u6570\u7ec4\uff0c\u6240\u6709\u8fdb\u7a0b\u90fd\u6062\u590d\u5230\u521d\u59cb\u72b6\u6001\uff0c\u518d\u4e00\u6b21\u4ece\u65b0\u5f00\u59cbminor rotation\u7684\u8fc7\u7a0b\u3002<br \/>\nRSDL\u5bf9\u4ea4\u4e92\u5f0f\u8fdb\u7a0b\u7684\u652f\u6301\uff1a\u548cSD\u540c\u6837\u7684\u9053\u7406\uff0c\u4ea4\u4e92\u5f0f\u8fdb\u7a0b\u5728\u7761\u7720\u65f6\u95f4\u65f6\uff0c\u5b83\u6240\u6709\u7684\u7ade\u4e89\u8005\u90fd\u56e0\u4e3aminor rotation\u800c\u964d\u5230\u4e86\u4f4e\u4f18\u5148\u7ea7\u8fdb\u7a0b\u961f\u5217\u4e2d\u3002\u5f53\u5b83\u91cd\u65b0\u8fdb\u5165RUNNING\u72b6\u6001\u65f6\uff0c\u5c31\u83b7\u5f97\u4e86\u76f8\u5bf9\u8f83\u9ad8\u7684\u4f18\u5148\u7ea7\uff0c\u4ece\u800c\u80fd\u88ab\u8fc5\u901f\u54cd\u5e94\u3002<br \/>\n\uff083\uff09\u5b8c\u5168\u516c\u5e73\u7684\u8c03\u5ea6\u5668CFS<br \/>\nCFS\u662f\u6700\u7ec8\u88ab\u5185\u6838\u91c7\u7eb3\u7684\u8c03\u5ea6\u5668\u3002\u5b83\u4eceRSDL\/SD\u4e2d\u5438\u53d6\u4e86\u5b8c\u5168\u516c\u5e73\u7684\u601d\u60f3\uff0c\u4e0d\u518d\u8ddf\u8e2a\u8fdb\u7a0b\u7684\u7761\u7720\u65f6\u95f4\uff0c\u4e5f\u4e0d\u518d\u4f01\u56fe\u533a\u5206\u4ea4\u4e92\u5f0f\u8fdb\u7a0b\u3002\u5b83\u5c06\u6240\u6709\u7684\u8fdb\u7a0b\u90fd\u7edf\u4e00\u5bf9\u5f85\uff0c\u8fd9\u5c31\u662f\u516c\u5e73\u7684\u542b\u4e49\u3002CFS\u7684\u7b97\u6cd5\u548c\u5b9e\u73b0\u90fd\u76f8\u5f53\u7b80\u5355\uff0c\u4f17\u591a\u7684\u6d4b\u8bd5\u8868\u660e\u5176\u6027\u80fd\u4e5f\u975e\u5e38\u4f18\u8d8a\u3002\u6309\u7167\u4f5c\u8005Ingo Molnar\u7684\u8bf4\u6cd5\uff08\u53c2\u8003Documentation\/scheduler\/sched-design-CFS.txt\uff09\uff0cCFS\u767e\u5206\u4e4b\u516b\u5341\u7684\u5de5\u4f5c\u53ef\u4ee5\u7528\u4e00\u53e5\u8bdd\u6982\u62ec\uff1aCFS\u5728\u771f\u5b9e\u7684\u786c\u4ef6\u4e0a\u6a21\u62df\u4e86\u5b8c\u5168\u7406\u60f3\u7684\u591a\u4efb\u52a1\u5904\u7406\u5668\u3002\u5728\u771f\u7a7a\u7684\u786c\u4ef6\u4e0a\uff0c\u540c\u4e00\u65f6\u523b\u6211\u4eec\u53ea\u80fd\u8fd0\u884c\u5355\u4e2a\u8fdb\u7a0b\uff0c\u56e0\u6b64\u5f53\u4e00\u4e2a\u8fdb\u7a0b\u5360\u7528CPU\u65f6\uff0c\u5176\u5b83\u8fdb\u7a0b\u5c31\u5fc5\u987b\u7b49\u5f85\uff0c\u8fd9\u5c31\u4ea7\u751f\u4e86\u4e0d\u516c\u5e73\u3002\u4f46\u662f\u5728\u201c\u5b8c\u5168\u7406\u60f3\u7684\u591a\u4efb\u52a1\u5904\u7406\u5668 \u201c\u4e0b\uff0c\u6bcf\u4e2a\u8fdb\u7a0b\u90fd\u80fd\u540c\u65f6\u83b7\u5f97CPU\u7684\u6267\u884c\u65f6\u95f4\uff0c\u5373\u5e76\u884c\u5730\u6bcf\u4e2a\u8fdb\u7a0b\u53601\/nr_running\u7684\u65f6\u95f4\u3002\u4f8b\u5982\u5f53\u7cfb\u7edf\u4e2d\u6709\u4e24\u4e2a\u8fdb\u7a0b\u65f6\uff0cCPU\u7684\u8ba1\u7b97\u65f6\u95f4\u88ab\u5206\u6210\u4e24\u4efd\uff0c\u6bcf\u4e2a\u8fdb\u7a0b\u83b7\u5f9750%\u3002\u5047\u8bberunqueue\u4e2d\u6709n\u4e2a\u8fdb\u7a0b\uff0c\u5f53\u524d\u8fdb\u7a0b\u8fd0\u884c\u4e8610ms\u3002\u5728\u201c\u5b8c\u5168\u7406\u60f3\u7684\u591a\u4efb\u52a1\u5904\u7406\u5668\u201d\u4e2d\uff0c10ms\u5e94\u8be5\u5e73\u5206\u7ed9n\u4e2a\u8fdb\u7a0b(\u4e0d\u8003\u8651\u5404\u4e2a\u8fdb\u7a0b\u7684nice\u503c)\uff0c\u56e0\u6b64\u5f53\u524d\u8fdb\u7a0b\u5e94\u5f97\u7684\u65f6\u95f4\u662f(10\/n)ms\uff0c\u4f46\u662f\u5b83\u5374\u8fd0\u884c\u4e8610ms\u3002\u6240\u4ee5CFS\u5c06\u60e9\u7f5a\u5f53\u524d\u8fdb\u7a0b\uff0c\u4f7f\u5176\u5b83\u8fdb\u7a0b\u80fd\u591f\u5728\u4e0b\u6b21\u8c03\u5ea6\u65f6\u5c3d\u53ef\u80fd\u53d6\u4ee3\u5f53\u524d\u8fdb\u7a0b\u3002\u6700\u7ec8\u5b9e\u73b0\u6240\u6709\u8fdb\u7a0b\u7684\u516c\u5e73\u8c03\u5ea6\u3002<br \/>\n\u4e0e\u4e4b\u524d\u7684Linux\u8c03\u5ea6\u5668\u4e0d\u540c\uff0cCFS\u6ca1\u6709\u5c06\u4efb\u52a1\u7ef4\u62a4\u5728\u94fe\u8868\u5f0f\u7684\u8fd0\u884c\u961f\u5217\u4e2d\uff0c\u5b83\u629b\u5f03\u4e86active\/expire\u6570\u7ec4\uff0c\u800c\u662f\u5bf9\u6bcf\u4e2aCPU\u7ef4\u62a4\u4e00\u4e2a\u4ee5\u65f6\u95f4\u4e3a\u987a\u5e8f\u7684\u7ea2\u9ed1\u6811\u3002\u8be5\u6811\u65b9\u6cd5\u80fd\u591f\u826f\u597d\u8fd0\u884c\u7684\u539f\u56e0\u5728\u4e8e\uff1a<br \/>\n* \u7ea2\u9ed1\u6811\u53ef\u4ee5\u59cb\u7ec8\u4fdd\u6301\u5e73\u8861\uff0c\u8fd9\u610f\u5473\u7740\u6811\u4e0a\u6ca1\u6709\u8def\u5f84\u6bd4\u4efb\u4f55\u5176\u4ed6\u8def\u5f84\u957f\u4e24\u500d\u4ee5\u4e0a\u3002<br \/>\n* \u7531\u4e8e\u7ea2\u9ed1\u6811\u662f\u4e8c\u53c9\u6811\uff0c\u67e5\u627e\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3aO(log n)\u3002\u4f46\u662f\u9664\u4e86\u6700\u5de6\u4fa7\u67e5\u627e\u4ee5\u5916\uff0c\u5f88\u96be\u6267\u884c\u5176\u4ed6\u67e5\u627e\uff0c\u5e76\u4e14\u6700\u5de6\u4fa7\u7684\u8282\u70b9\u6307\u9488\u59cb\u7ec8\u88ab\u7f13\u5b58\u3002<br \/>\n* \u5bf9\u4e8e\u5927\u591a\u6570\u64cd\u4f5c\uff08\u63d2\u5165\u3001\u5220\u9664\u3001\u67e5\u627e\u7b49\uff09\uff0c\u7ea2\u9ed1\u6811\u7684\u6267\u884c\u65f6\u95f4\u4e3aO(log n)\uff0c\u800c\u4ee5\u524d\u7684\u8c03\u5ea6\u7a0b\u5e8f\u901a\u8fc7\u5177\u6709\u56fa\u5b9a\u4f18\u5148\u7ea7\u7684\u4f18\u5148\u7ea7\u6570\u7ec4\u4f7f\u7528 O(1)\u3002O(log n) \u884c\u4e3a\u5177\u6709\u53ef\u6d4b\u91cf\u7684\u5ef6\u8fdf\uff0c\u4f46\u662f\u5bf9\u4e8e\u8f83\u5927\u7684\u4efb\u52a1\u6570\u65e0\u5173\u7d27\u8981\u3002Molnar\u5728\u5c1d\u8bd5\u8fd9\u79cd\u6811\u65b9\u6cd5\u65f6\uff0c\u9996\u5148\u5bf9\u8fd9\u4e00\u70b9\u8fdb\u884c\u4e86\u6d4b\u8bd5\u3002<br \/>\n* \u7ea2\u9ed1\u6811\u53ef\u901a\u8fc7\u5185\u90e8\u5b58\u50a8\u5b9e\u73b0\uff0c\u5373\u4e0d\u9700\u8981\u4f7f\u7528\u5916\u90e8\u5206\u914d\u5373\u53ef\u5bf9\u6570\u636e\u7ed3\u6784\u8fdb\u884c\u7ef4\u62a4\u3002<br \/>\n\u8981\u5b9e\u73b0\u5e73\u8861\uff0cCFS\u4f7f\u7528\u201c\u865a\u62df\u8fd0\u884c\u65f6\u201d\u8868\u793a\u67d0\u4e2a\u4efb\u52a1\u7684\u65f6\u95f4\u91cf\u3002\u4efb\u52a1\u7684\u865a\u62df\u8fd0\u884c\u65f6\u8d8a\u5c0f\uff0c\u610f\u5473\u7740\u4efb\u52a1\u88ab\u5141\u8bb8\u8bbf\u95ee\u670d\u52a1\u5668\u7684\u65f6\u95f4\u8d8a\u77ed\uff0c\u5176\u5bf9\u5904\u7406\u5668\u7684\u9700\u6c42\u8d8a\u9ad8\u3002CFS\u8fd8\u5305\u542b\u7761\u7720\u516c\u5e73\u6982\u5ff5\u4ee5\u4fbf\u786e\u4fdd\u90a3\u4e9b\u76ee\u524d\u6ca1\u6709\u8fd0\u884c\u7684\u4efb\u52a1\uff08\u4f8b\u5982\uff0c\u7b49\u5f85 I\/O\uff09\u5728\u5176\u6700\u7ec8\u9700\u8981\u65f6\u83b7\u5f97\u76f8\u5f53\u4efd\u989d\u7684\u5904\u7406\u5668\u3002<br \/>\n1\uff09CFS\u5982\u4f55\u5b9e\u73b0pick next<br \/>\n\u4e0b\u56fe\u662f\u4e00\u4e2a\u7ea2\u9ed1\u6811\u7684\u4f8b\u5b50\u3002<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/hi.csdn.net\/attachment\/201203\/20\/0_1332250922MH8O.gif\" alt=\"\" \/><\/p>\n<p>\u56fe4 \u4e00\u4e2a\u7ea2\u9ed1\u6811\u793a\u4f8b<\/p>\n<p>\u6240\u6709\u53ef\u8fd0\u884c\u7684\u4efb\u52a1\u901a\u8fc7\u4e0d\u65ad\u5730\u63d2\u5165\u64cd\u4f5c\u6700\u7ec8\u90fd\u5b58\u50a8\u5728\u4ee5\u65f6\u95f4\u4e3a\u987a\u5e8f\u7684\u7ea2\u9ed1\u6811\u4e2d\uff08\u7531 sched_entity \u5bf9\u8c61\u8868\u793a\uff09\uff0c\u5bf9\u5904\u7406\u5668\u9700\u6c42\u6700\u591a\u7684\u4efb\u52a1\uff08\u6700\u4f4e\u865a\u62df\u8fd0\u884c\u65f6\uff09\u5b58\u50a8\u5728\u6811\u7684\u5de6\u4fa7\uff0c\u5904\u7406\u5668\u9700\u6c42\u6700\u5c11\u7684\u4efb\u52a1\uff08\u6700\u9ad8\u865a\u62df\u8fd0\u884c\u65f6\uff09\u5b58\u50a8\u5728\u6811\u7684\u53f3\u4fa7\u3002 \u4e3a\u4e86\u516c\u5e73\uff0cCFS\u8c03\u5ea6\u5668\u4f1a\u9009\u62e9\u7ea2\u9ed1\u6811\u6700\u5de6\u8fb9\u7684\u53f6\u5b50\u8282\u70b9\u4f5c\u4e3a\u4e0b\u4e00\u4e2a\u5c06\u83b7\u5f97cpu\u7684\u4efb\u52a1\u3002\u8fd9\u6837\uff0c\u6811\u5de6\u4fa7\u7684\u8fdb\u7a0b\u5c31\u88ab\u7ed9\u4e88\u65f6\u95f4\u8fd0\u884c\u4e86\u3002<br \/>\n2\uff09tick\u4e2d\u65ad<br \/>\n\u5728CFS\u4e2d\uff0ctick\u4e2d\u65ad\u9996\u5148\u66f4\u65b0\u8c03\u5ea6\u4fe1\u606f\u3002\u7136\u540e\u8c03\u6574\u5f53\u524d\u8fdb\u7a0b\u5728\u7ea2\u9ed1\u6811\u4e2d\u7684\u4f4d\u7f6e\u3002\u8c03\u6574\u5b8c\u6210\u540e\u5982\u679c\u53d1\u73b0\u5f53\u524d\u8fdb\u7a0b\u4e0d\u518d\u662f\u6700\u5de6\u8fb9\u7684\u53f6\u5b50\uff0c\u5c31\u6807\u8bb0need_resched\u6807\u5fd7\uff0c\u4e2d\u65ad\u8fd4\u56de\u65f6\u5c31\u4f1a\u8c03\u7528scheduler()\u5b8c\u6210\u8fdb\u7a0b\u5207\u6362\u3002\u5426\u5219\u5f53\u524d\u8fdb\u7a0b\u7ee7\u7eed\u5360\u7528CPU\u3002\u4ece\u8fd9\u91cc\u53ef\u4ee5\u770b\u5230 CFS\u629b\u5f03\u4e86\u4f20\u7edf\u7684\u65f6\u95f4\u7247\u6982\u5ff5\u3002Tick\u4e2d\u65ad\u53ea\u9700\u66f4\u65b0\u7ea2\u9ed1\u6811\uff0c\u4ee5\u524d\u7684\u6240\u6709\u8c03\u5ea6\u5668\u90fd\u5728tick\u4e2d\u65ad\u4e2d\u9012\u51cf\u65f6\u95f4\u7247\uff0c\u5f53\u65f6\u95f4\u7247\u6216\u8005\u914d\u989d\u88ab\u7528\u5b8c\u65f6\u624d\u89e6\u53d1\u4f18\u5148\u7ea7\u8c03\u6574\u5e76\u91cd\u65b0\u8c03\u5ea6\u3002<br \/>\n3\uff09\u7ea2\u9ed1\u6811\u952e\u503c\u8ba1\u7b97<br \/>\n\u7406\u89e3CFS\u7684\u5173\u952e\u5c31\u662f\u4e86\u89e3\u7ea2\u9ed1\u6811\u952e\u503c\u7684\u8ba1\u7b97\u65b9\u6cd5\u3002\u8be5\u952e\u503c\u7531\u4e09\u4e2a\u56e0\u5b50\u8ba1\u7b97\u800c\u5f97\uff1a\u4e00\u662f\u8fdb\u7a0b\u5df2\u7ecf\u5360\u7528\u7684CPU\u65f6\u95f4\uff1b\u4e8c\u662f\u5f53\u524d\u8fdb\u7a0b\u7684nice\u503c\uff1b\u4e09\u662f\u5f53\u524d\u7684cpu\u8d1f\u8f7d\u3002\u8fdb\u7a0b\u5df2\u7ecf\u5360\u7528\u7684CPU\u65f6\u95f4\u5bf9\u952e\u503c\u7684\u5f71\u54cd\u6700\u5927\uff0c\u5176\u5b9e\u5f88\u5927\u7a0b\u5ea6\u4e0a\u6211\u4eec\u5728\u7406\u89e3CFS\u65f6\u53ef\u4ee5\u7b80\u5355\u5730\u8ba4\u4e3a\u952e\u503c\u5c31\u7b49\u4e8e\u8fdb\u7a0b\u5df2\u5360\u7528\u7684 CPU\u65f6\u95f4\u3002\u56e0\u6b64\u8be5\u503c\u8d8a\u5927\uff0c\u952e\u503c\u8d8a\u5927\uff0c\u4ece\u800c\u4f7f\u5f97\u5f53\u524d\u8fdb\u7a0b\u5411\u7ea2\u9ed1\u6811\u7684\u53f3\u4fa7\u79fb\u52a8\u3002\u53e6\u5916CFS\u89c4\u5b9a\uff0cnice\u503c\u4e3a1\u7684\u8fdb\u7a0b\u6bd4nice\u503c\u4e3a0\u7684\u8fdb\u7a0b\u591a\u83b7\u5f9710%\u7684 CPU\u65f6\u95f4\u3002\u5728\u8ba1\u7b97\u952e\u503c\u65f6\u4e5f\u8003\u8651\u5230\u8fd9\u4e2a\u56e0\u7d20\uff0c\u56e0\u6b64nice\u503c\u8d8a\u5927\uff0c\u952e\u503c\u4e5f\u8d8a\u5927\u3002<br \/>\nCFS\u4e3a\u6bcf\u4e2a\u8fdb\u7a0b\u90fd\u7ef4\u62a4\u4e24\u4e2a\u91cd\u8981\u53d8\u91cf\uff1afair_clock\u548cwait_runtime\u3002\u8fd9\u91cc\u6211\u4eec\u5c06\u4e3a\u6bcf\u4e2a\u8fdb\u7a0b\u7ef4\u62a4\u7684\u53d8\u91cf\u79f0\u4e3a\u8fdb\u7a0b\u7ea7\u53d8\u91cf\uff0c\u4e3a\u6bcf\u4e2aCPU\u7ef4\u62a4\u7684\u79f0\u4f5cCPU\u7ea7\u53d8\u91cf\uff0c\u4e3a\u6bcf\u4e2arunqueue\u7ef4\u62a4\u7684\u79f0\u4e3arunqueue\u7ea7\u53d8\u91cf\u3002\u8fdb\u7a0b\u63d2\u5165\u7ea2\u9ed1\u6811\u7684\u952e\u503c\u5373\u4e3afair_clock \u2013 wait_runtime\u3002\u5176\u4e2dfair_clock\u4ece\u5176\u5b57\u9762\u542b\u4e49\u4e0a\u8bb2\u5c31\u662f\u4e00\u4e2a\u8fdb\u7a0b\u5e94\u83b7\u5f97\u7684CPU\u65f6\u95f4\uff0c\u5373\u7b49\u4e8e\u8fdb\u7a0b\u5df2\u5360\u7528\u7684CPU\u65f6\u95f4\u9664\u4ee5\u5f53\u524d runqueue\u4e2d\u7684\u8fdb\u7a0b\u603b\u6570\uff1bwait_runtime\u662f\u8fdb\u7a0b\u7684\u7b49\u5f85\u65f6\u95f4\u3002\u5b83\u4eec\u7684\u5dee\u503c\u4ee3\u8868\u4e86\u4e00\u4e2a\u8fdb\u7a0b\u7684\u516c\u5e73\u7a0b\u5ea6\u3002\u8be5\u503c\u8d8a\u5927\uff0c\u4ee3\u8868\u5f53\u524d\u8fdb\u7a0b\u76f8\u5bf9\u4e8e\u5176\u5b83\u8fdb\u7a0b\u8d8a\u4e0d\u516c\u5e73\u3002\u5bf9\u4e8e\u4ea4\u4e92\u5f0f\u4efb\u52a1\uff0cwait_runtime\u957f\u65f6\u95f4\u5f97\u4e0d\u5230\u66f4\u65b0\uff0c\u56e0\u6b64\u5b83\u80fd\u62e5\u6709\u66f4\u9ad8\u7684\u7ea2\u9ed1\u6811\u952e\u503c\uff0c\u66f4\u9760\u8fd1\u7ea2\u9ed1\u6811\u7684\u5de6\u8fb9\u3002\u4ece\u800c\u5f97\u5230\u5feb\u901f\u54cd\u5e94\u3002<br \/>\n\u7ea2\u9ed1\u6811\u662f\u5e73\u8861\u6811\uff0c\u8c03\u5ea6\u5668\u6bcf\u6b21\u603b\u6700\u5de6\u8fb9\u8bfb\u51fa\u4e00\u4e2a\u53f6\u5b50\u8282\u70b9\uff0c\u8be5\u8bfb\u53d6\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u662fO(LgN)\u3002<br \/>\n4\uff09\u8c03\u5ea6\u5668\u7ba1\u7406\u5668<br \/>\n\u4e3a\u4e86\u652f\u6301\u5b9e\u65f6\u8fdb\u7a0b\uff0cCFS\u63d0\u4f9b\u4e86\u8c03\u5ea6\u5668\u6a21\u5757\u7ba1\u7406\u5668\u3002\u5404\u79cd\u4e0d\u540c\u7684\u8c03\u5ea6\u5668\u7b97\u6cd5\u90fd\u53ef\u4ee5\u4f5c\u4e3a\u4e00\u4e2a\u6a21\u5757\u6ce8\u518c\u5230\u8be5\u7ba1\u7406\u5668\u4e2d\u3002\u4e0d\u540c\u7684\u8fdb\u7a0b\u53ef\u4ee5\u9009\u62e9\u4f7f\u7528\u4e0d\u540c\u7684\u8c03\u5ea6\u5668\u6a21\u5757\u30022.6.23\u4e2d\uff0cCFS\u5b9e\u73b0\u4e86\u4e24\u4e2a\u8c03\u5ea6\u7b97\u6cd5\uff0cCFS\u7b97\u6cd5\u6a21\u5757\u548c\u5b9e\u65f6\u8c03\u5ea6\u6a21\u5757\u3002\u5bf9\u5e94\u5b9e\u65f6\u8fdb\u7a0b\uff0c\u5c06\u4f7f\u7528\u5b9e\u65f6\u8c03\u5ea6\u6a21\u5757\u3002\u5bf9\u5e94\u666e\u901a\u8fdb\u7a0b\u5219\u4f7f\u7528CFS\u7b97\u6cd5\u3002CFS \u8c03\u5ea6\u6a21\u5757\uff08\u5728 kernel\/sched_fair.c \u4e2d\u5b9e\u73b0\uff09\u7528\u4e8e\u4ee5\u4e0b\u8c03\u5ea6\u7b56\u7565\uff1aSCHED_NORMAL\u3001SCHED_BATCH \u548c SCHED_IDLE\u3002\u5bf9\u4e8e SCHED_RR \u548c SCHED_FIFO \u7b56\u7565\uff0c\u5c06\u4f7f\u7528\u5b9e\u65f6\u8c03\u5ea6\u6a21\u5757\uff08\u8be5\u6a21\u5757\u5728 kernel\/sched_rt.c \u4e2d\u5b9e\u73b0\uff09\u3002<br \/>\n5\uff09CFS\u7ec4\u8c03\u5ea6<br \/>\nCFS\u7ec4\u8c03\u5ea6\uff08\u5728 2.6.24 \u5185\u6838\u4e2d\u5f15\u5165\uff09\u662f\u53e6\u4e00\u79cd\u4e3a\u8c03\u5ea6\u5e26\u6765\u516c\u5e73\u6027\u7684\u65b9\u5f0f\uff0c\u5c24\u5176\u662f\u5728\u5904\u7406\u4ea7\u751f\u5f88\u591a\u5176\u4ed6\u4efb\u52a1\u7684\u4efb\u52a1\u65f6\u3002 \u5047\u8bbe\u4e00\u4e2a\u4ea7\u751f\u4e86\u5f88\u591a\u4efb\u52a1\u7684\u670d\u52a1\u5668\u8981\u5e76\u884c\u5316\u8fdb\u5165\u7684\u8fde\u63a5\uff08HTTP \u670d\u52a1\u5668\u7684\u5178\u578b\u67b6\u6784\uff09\u3002\u4e0d\u662f\u6240\u6709\u4efb\u52a1\u90fd\u4f1a\u88ab\u7edf\u4e00\u516c\u5e73\u5bf9\u5f85\uff0c CFS \u5f15\u5165\u4e86\u7ec4\u6765\u5904\u7406\u8fd9\u79cd\u884c\u4e3a\u3002\u4ea7\u751f\u4efb\u52a1\u7684\u670d\u52a1\u5668\u8fdb\u7a0b\u5728\u6574\u4e2a\u7ec4\u4e2d\uff08\u5728\u4e00\u4e2a\u5c42\u6b21\u7ed3\u6784\u4e2d\uff09\u5171\u4eab\u5b83\u4eec\u7684\u865a\u62df\u8fd0\u884c\u65f6\uff0c\u800c\u5355\u4e2a\u4efb\u52a1\u7ef4\u6301\u5176\u81ea\u5df1\u72ec\u7acb\u7684\u865a\u62df\u8fd0\u884c\u65f6\u3002\u8fd9\u6837\u5355\u4e2a\u4efb\u52a1\u4f1a\u6536\u5230\u4e0e\u7ec4\u5927\u81f4\u76f8\u540c\u7684\u8c03\u5ea6\u65f6\u95f4\u3002\u60a8\u4f1a\u53d1\u73b0 \/proc \u63a5\u53e3\u7528\u4e8e\u7ba1\u7406\u8fdb\u7a0b\u5c42\u6b21\u7ed3\u6784\uff0c\u8ba9\u60a8\u5bf9\u7ec4\u7684\u5f62\u6210\u65b9\u5f0f\u6709\u5b8c\u5168\u7684\u63a7\u5236\u3002\u4f7f\u7528\u6b64\u914d\u7f6e\uff0c\u60a8\u53ef\u4ee5\u8de8\u7528\u6237\u3001\u8de8\u8fdb\u7a0b\u6216\u5176\u53d8\u4f53\u5206\u914d\u516c\u5e73\u6027\u3002<br \/>\n\u8003\u8651\u4e00\u4e2a\u4e24\u7528\u6237\u793a\u4f8b\uff0c\u7528\u6237 A \u548c\u7528\u6237 B \u5728\u4e00\u53f0\u673a\u5668\u4e0a\u8fd0\u884c\u4f5c\u4e1a\u3002\u7528\u6237 A \u53ea\u6709\u4e24\u4e2a\u4f5c\u4e1a\u6b63\u5728\u8fd0\u884c\uff0c\u800c\u7528\u6237 B \u6b63\u5728\u8fd0\u884c 48 \u4e2a\u4f5c\u4e1a\u3002\u7ec4\u8c03\u5ea6\u4f7f CFS \u80fd\u591f\u5bf9\u7528\u6237 A \u548c\u7528\u6237 B \u8fdb\u884c\u516c\u5e73\u8c03\u5ea6\uff0c\u800c\u4e0d\u662f\u5bf9\u7cfb\u7edf\u4e2d\u8fd0\u884c\u7684 50 \u4e2a\u4f5c\u4e1a\u8fdb\u884c\u516c\u5e73\u8c03\u5ea6\u3002\u6bcf\u4e2a\u7528\u6237\u5404\u62e5\u6709 50% \u7684 CPU \u4f7f\u7528\u3002\u7528\u6237 B \u4f7f\u7528\u81ea\u5df1 50% \u7684 CPU \u5206\u914d\u8fd0\u884c\u4ed6\u7684 48 \u4e2a\u4f5c\u4e1a\uff0c\u800c\u4e0d\u4f1a\u5360\u7528\u5c5e\u4e8e\u7528\u6237 A \u7684\u53e6\u5916 50% \u7684 CPU \u5206\u914d\u3002<br \/>\n4\u3001Linux\u8c03\u5ea6\u5668\u7684\u4e3b\u8981\u6570\u636e\u7ed3\u6784<br \/>\n\uff081\uff09\u8fdb\u7a0b\u63cf\u8ff0\u7b26\uff1astruct task_struct<br \/>\n\u4e0b\u9762\u4ee3\u7801\u5256\u6790\u4f7f\u7528\u7684\u5185\u6838\u7248\u672c\u4e3a2.6.32.45\u3002CFS\u53bb\u6389\u4e86struct prio_array\uff0c\u5e76\u5f15\u5165\u8c03\u5ea6\u5b9e\u4f53\uff08scheduling entity\uff09\u548c\u8c03\u5ea6\u7c7b \uff08scheduling classes\uff09\uff0c\u5206\u522b\u7531struct sched_entity \u548c struct sched_class \u5b9a\u4e49\u3002\u56e0\u6b64\uff0ctask_struct\u7ed3\u6784\uff08\u5728.\/linux\/include\/linux\/sched.h\u4e2d\uff09\u5305\u542b\u5173\u4e8e sched_entity \u548c sched_class\u3002\u5982\u4e0b\uff1a<\/p>\n<p>&nbsp;<\/p>\n<div class=\"dp-highlighter bg_cpp\">\n<div class=\"bar\">\n<div class=\"tools\"><strong>[cpp]<\/strong>\u00a0<a class=\"ViewSource\" title=\"view plain\" href=\"http:\/\/blog.csdn.net\/zhoudaxia\/article\/details\/7375668#\" target=\"_blank\" rel=\"noopener noreferrer\">view plain<\/a>\u00a0<a class=\"CopyToClipboard\" title=\"copy\" href=\"http:\/\/blog.csdn.net\/zhoudaxia\/article\/details\/7375668#\" target=\"_blank\" rel=\"noopener noreferrer\">copy<\/a><\/p>\n<div><embed id=\"ZeroClipboardMovie_1\" src=\"https:\/\/csdnimg.cn\/public\/highlighter\/ZeroClipboard.swf\" type=\"application\/x-shockwave-flash\" width=\"15\" height=\"16\" align=\"middle\" name=\"ZeroClipboardMovie_1\" data-mce-fragment=\"1\"><\/embed><\/div>\n<div><embed id=\"ZeroClipboardMovie_7\" src=\"https:\/\/csdnimg.cn\/public\/highlighter\/ZeroClipboard.swf\" type=\"application\/x-shockwave-flash\" width=\"15\" height=\"16\" align=\"middle\" name=\"ZeroClipboardMovie_7\" data-mce-fragment=\"1\"><\/embed><\/div>\n<\/div>\n<\/div>\n<ol class=\"dp-cpp\">\n<li class=\"alt\"><span class=\"keyword\">struct<\/span>\u00a0task_struct\u00a0{<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">volatile<\/span>\u00a0<span class=\"datatypes\">long<\/span>\u00a0state;\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/*\u00a0-1\u00a0unrunnable,\u00a00\u00a0runnable,\u00a0&gt;0\u00a0stopped\u00a0*\/<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">void<\/span>\u00a0*stack;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0atomic_t\u00a0usage;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">int<\/span>\u00a0flags;\u00a0<span class=\"comment\">\/*\u00a0per\u00a0process\u00a0flags,\u00a0defined\u00a0below\u00a0*\/<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">int<\/span>\u00a0ptrace;<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/*\u00a0&#8230;&#8230;\u00a0*\/<\/span><\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"datatypes\">int<\/span>\u00a0prio,\u00a0static_prio,\u00a0normal_prio;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">int<\/span>\u00a0rt_priority;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">const<\/span>\u00a0<span class=\"keyword\">struct<\/span>\u00a0sched_class\u00a0*sched_class;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0sched_entity\u00a0se;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0sched_rt_entity\u00a0rt;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/*\u00a0&#8230;&#8230;\u00a0*\/<\/span><\/li>\n<li>};<\/li>\n<\/ol>\n<\/div>\n<pre><code class=\"language-cpp hljs\"><\/code><\/pre>\n<ol class=\"hljs-ln\">\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"1\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">task_struct<\/span> {<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"2\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">volatile<\/span> <span class=\"hljs-keyword\">long<\/span> state; <span class=\"hljs-comment\">\/* -1 unrunnable, 0 runnable, &gt;0 stopped *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"3\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">void<\/span> *<span class=\"hljs-built_in\">stack<\/span>;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"4\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">atomic_t<\/span> usage;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"5\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">int<\/span> flags; <span class=\"hljs-comment\">\/* per process flags, defined below *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"6\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">int<\/span> ptrace;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"7\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"8\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\">\/* &#8230;&#8230; *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"9\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"10\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">int<\/span> prio, static_prio, normal_prio;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"11\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">int<\/span> rt_priority;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"12\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">const<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">sched_class<\/span> *<span class=\"hljs-title\">sched_class<\/span>;<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"13\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">sched_entity<\/span> <span class=\"hljs-title\">se<\/span>;<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"14\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">sched_rt_entity<\/span> <span class=\"hljs-title\">rt<\/span>;<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"15\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\">\/* &#8230;&#8230; *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"16\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">};<\/div>\n<\/div>\n<\/li>\n<\/ol>\n<pre><code class=\"language-cpp hljs\"><\/code><\/pre>\n<p>\u8fdb\u7a0b\u8c03\u5ea6\u7684\u5b8c\u6574\u6570\u636e\u7ed3\u6784\u5c42\u6b21\u5982\u4e0b\u56fe\uff1a<br \/>\n&nbsp;<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/hi.csdn.net\/attachment\/201203\/20\/0_1332251079LeA5.gif\" alt=\"\" \/><\/p>\n<p>\u56fe5 \u8fdb\u7a0b\u8c03\u5ea6\u7684\u6570\u636e\u7ed3\u6784\u5c42\u6b21<\/p>\n<p>\u5404\u79cd\u7ed3\u6784\u7684\u5173\u7cfb\u5982\u4e0a\u56fe\u6240\u793a\u3002\u6811\u7684\u6839\u901a\u8fc7 rb_root \u5143\u7d20\u901a\u8fc7 cfs_rq \u7ed3\u6784\uff08\u5728 .\/kernel\/sched.c \u4e2d\uff09\u5f15\u7528\u3002\u7ea2\u9ed1\u6811\u7684\u53f6\u5b50\u4e0d\u5305\u542b\u4fe1\u606f\uff0c\u4f46\u662f\u5185\u90e8\u8282\u70b9\u4ee3\u8868\u4e00\u4e2a\u6216\u591a\u4e2a\u53ef\u8fd0\u884c\u7684\u4efb\u52a1\u3002\u7ea2\u9ed1\u6811\u7684\u6bcf\u4e2a\u8282\u70b9\u90fd\u7531 rb_node \u8868\u793a\uff0c\u5b83\u53ea\u5305\u542b\u5b50\u5f15\u7528\u548c\u7236\u5bf9\u8c61\u7684\u989c\u8272\u3002 rb_node \u5305\u542b\u5728 sched_entity \u7ed3\u6784\u4e2d\uff0c\u8be5\u7ed3\u6784\u5305\u542b rb_node \u5f15\u7528\u3001\u8d1f\u8f7d\u6743\u91cd\u4ee5\u53ca\u5404\u79cd\u7edf\u8ba1\u6570\u636e\u3002\u6700\u91cd\u8981\u7684\u662f\uff0c sched_entity \u5305\u542b vruntime\uff0864 \u4f4d\u5b57\u6bb5\uff09\uff0c\u5b83\u8868\u793a\u4efb\u52a1\u8fd0\u884c\u7684\u65f6\u95f4\u91cf\uff0c\u5e76\u4f5c\u4e3a\u7ea2\u9ed1\u6811\u7684\u7d22\u5f15\u3002 \u6700\u540e\uff0ctask_struct \u4f4d\u4e8e\u9876\u7aef\uff0c\u5b83\u5b8c\u6574\u5730\u63cf\u8ff0\u4efb\u52a1\u5e76\u5305\u542b sched_entity \u7ed3\u6784\u3002<br \/>\n\u5c31 CFS \u90e8\u5206\u800c\u8a00\uff0c\u8c03\u5ea6\u51fd\u6570\u975e\u5e38\u7b80\u5355\u3002 \u5728 .\/kernel\/sched.c \u4e2d\uff0c\u60a8\u4f1a\u770b\u5230\u901a\u7528 schedule() \u51fd\u6570\uff0c\u5b83\u4f1a\u5148\u62a2\u5360\u5f53\u524d\u8fd0\u884c\u4efb\u52a1\uff08\u9664\u975e\u5b83\u901a\u8fc7 yield() \u4ee3\u7801\u5148\u62a2\u5360\u81ea\u5df1\uff09\u3002\u6ce8\u610f CFS \u6ca1\u6709\u771f\u6b63\u7684\u65f6\u95f4\u5207\u7247\u6982\u5ff5\u7528\u4e8e\u62a2\u5360\uff0c\u56e0\u4e3a\u62a2\u5360\u65f6\u95f4\u662f\u53ef\u53d8\u7684\u3002 \u5f53\u524d\u8fd0\u884c\u4efb\u52a1\uff08\u73b0\u5728\u88ab\u62a2\u5360\u7684\u4efb\u52a1\uff09\u901a\u8fc7\u5bf9 put_prev_task \u8c03\u7528\uff08\u901a\u8fc7\u8c03\u5ea6\u7c7b\uff09\u8fd4\u56de\u5230\u7ea2\u9ed1\u6811\u3002 \u5f53 schedule \u51fd\u6570\u5f00\u59cb\u786e\u5b9a\u4e0b\u4e00\u4e2a\u8981\u8c03\u5ea6\u7684\u4efb\u52a1\u65f6\uff0c\u5b83\u4f1a\u8c03\u7528 pick_next_task \u51fd\u6570\u3002\u6b64\u51fd\u6570\u4e5f\u662f\u901a\u7528\u7684\uff08\u5728 .\/kernel\/sched.c \u4e2d\uff09\uff0c\u4f46\u5b83\u4f1a\u901a\u8fc7\u8c03\u5ea6\u5668\u7c7b\u8c03\u7528 CFS \u8c03\u5ea6\u5668\u3002 CFS \u4e2d\u7684 pick_next_task \u51fd\u6570\u53ef\u4ee5\u5728 .\/kernel\/sched_fair.c\uff08\u79f0\u4e3a pick_next_task_fair()\uff09\u4e2d\u627e\u5230\u3002 \u6b64\u51fd\u6570\u53ea\u662f\u4ece\u7ea2\u9ed1\u6811\u4e2d\u83b7\u53d6\u6700\u5de6\u7aef\u7684\u4efb\u52a1\u5e76\u8fd4\u56de\u76f8\u5173 sched_entity\u3002\u901a\u8fc7\u6b64\u5f15\u7528\uff0c\u4e00\u4e2a\u7b80\u5355\u7684 task_of() \u8c03\u7528\u786e\u5b9a\u8fd4\u56de\u7684 task_struct \u5f15\u7528\u3002\u901a\u7528\u8c03\u5ea6\u5668\u6700\u540e\u4e3a\u6b64\u4efb\u52a1\u63d0\u4f9b\u5904\u7406\u5668\u3002<br \/>\n\uff082\uff09\u8c03\u5ea6\u5b9e\u4f53\uff1astruct sched_entity<br \/>\n\u8be5\u7ed3\u6784\u5728.\/linux\/include\/linux\/sched.h\u4e2d\uff0c\u8868\u793a\u4e00\u4e2a\u53ef\u8c03\u5ea6\u5b9e\u4f53\uff08\u8fdb\u7a0b\uff0c\u8fdb\u7a0b\u7ec4\uff0c\u7b49\u7b49\uff09\u3002\u5b83\u5305\u542b\u4e86\u5b8c\u6574\u7684\u8c03\u5ea6\u4fe1\u606f\uff0c\u7528\u4e8e\u5b9e\u73b0\u5bf9\u5355\u4e2a\u4efb\u52a1\u6216\u4efb\u52a1\u7ec4\u7684\u8c03\u5ea6\u3002\u8c03\u5ea6\u5b9e\u4f53\u53ef\u80fd\u4e0e\u8fdb\u7a0b\u6ca1\u6709\u5173\u8054\u3002<\/p>\n<div class=\"dp-highlighter bg_cpp\">\n<div class=\"bar\">\n<div class=\"tools\"><strong>[cpp]<\/strong>\u00a0<a class=\"ViewSource\" title=\"view plain\" href=\"http:\/\/blog.csdn.net\/zhoudaxia\/article\/details\/7375668#\" target=\"_blank\" rel=\"noopener noreferrer\">view plain<\/a>\u00a0<a class=\"CopyToClipboard\" title=\"copy\" href=\"http:\/\/blog.csdn.net\/zhoudaxia\/article\/details\/7375668#\" target=\"_blank\" rel=\"noopener noreferrer\">copy<\/a><\/p>\n<div><embed id=\"ZeroClipboardMovie_2\" src=\"https:\/\/csdnimg.cn\/public\/highlighter\/ZeroClipboard.swf\" type=\"application\/x-shockwave-flash\" width=\"15\" height=\"16\" align=\"middle\" name=\"ZeroClipboardMovie_2\" data-mce-fragment=\"1\"><\/embed><\/div>\n<div><embed id=\"ZeroClipboardMovie_8\" src=\"https:\/\/csdnimg.cn\/public\/highlighter\/ZeroClipboard.swf\" type=\"application\/x-shockwave-flash\" width=\"15\" height=\"16\" align=\"middle\" name=\"ZeroClipboardMovie_8\" data-mce-fragment=\"1\"><\/embed><\/div>\n<\/div>\n<\/div>\n<ol class=\"dp-cpp\">\n<li class=\"alt\"><span class=\"keyword\">struct<\/span>\u00a0sched_entity\u00a0{<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0load_weight\u00a0\u00a0load;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/*\u00a0\u7528\u4e8e\u8d1f\u8f7d\u5e73\u8861\u00a0*\/<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0rb_node\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0run_node;\u00a0\u00a0\u00a0<span class=\"comment\">\/*\u00a0\u5bf9\u5e94\u7684\u7ea2\u9ed1\u6811\u7ed3\u70b9\u00a0*\/<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0list_head\u00a0\u00a0\u00a0\u00a0group_node;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">int<\/span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0on_rq;<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0exec_start;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0sum_exec_runtime;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0vruntime;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/*\u00a0\u865a\u62df\u8fd0\u884c\u65f6\u00a0*\/<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0prev_sum_exec_runtime;<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0last_wakeup;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0avg_overlap;<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0nr_migrations;<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0start_runtime;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0avg_wakeup;<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0avg_running;<\/li>\n<li class=\"alt\"><\/li>\n<li><span class=\"preprocessor\">#ifdef\u00a0CONFIG_SCHEDSTATS\u00a0<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0wait_start;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0wait_max;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0wait_count;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0wait_sum;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0iowait_count;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0iowait_sum;<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0sleep_start;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0sleep_max;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0s64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0sum_sleep_runtime;<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0block_start;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0block_max;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0exec_max;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0slice_max;<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0nr_migrations_cold;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0nr_failed_migrations_affine;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0nr_failed_migrations_running;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0nr_failed_migrations_hot;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0nr_forced_migrations;<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0nr_wakeups;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0nr_wakeups_sync;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0nr_wakeups_migrate;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0nr_wakeups_local;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0nr_wakeups_remote;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0nr_wakeups_affine;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0nr_wakeups_affine_attempts;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0nr_wakeups_passive;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0u64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0nr_wakeups_idle;<\/li>\n<li><span class=\"preprocessor\">#endif\u00a0<\/span><\/li>\n<li class=\"alt\"><\/li>\n<li><span class=\"preprocessor\">#ifdef\u00a0CONFIG_FAIR_GROUP_SCHED\u00a0<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0sched_entity\u00a0*parent;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/*\u00a0rq\u00a0on\u00a0which\u00a0this\u00a0entity\u00a0is\u00a0(to\u00a0be)\u00a0queued:\u00a0*\/<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0cfs_rq\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0*cfs_rq;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/*\u00a0rq\u00a0&#8220;owned&#8221;\u00a0by\u00a0this\u00a0entity\/group:\u00a0*\/<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0cfs_rq\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0*my_q;<\/li>\n<li><span class=\"preprocessor\">#endif\u00a0<\/span><\/li>\n<li class=\"alt\">};<\/li>\n<\/ol>\n<\/div>\n<pre><code class=\"language-cpp hljs\"><\/code><\/pre>\n<ol class=\"hljs-ln\">\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"1\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">sched_entity<\/span> {<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"2\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">load_weight<\/span> <span class=\"hljs-title\">load<\/span>;<\/span> <span class=\"hljs-comment\">\/* \u7528\u4e8e\u8d1f\u8f7d\u5e73\u8861 *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"3\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">rb_node<\/span> <span class=\"hljs-title\">run_node<\/span>;<\/span> <span class=\"hljs-comment\">\/* \u5bf9\u5e94\u7684\u7ea2\u9ed1\u6811\u7ed3\u70b9 *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"4\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">list_head<\/span> <span class=\"hljs-title\">group_node<\/span>;<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"5\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">int<\/span> on_rq;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"6\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"7\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 exec_start;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"8\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 sum_exec_runtime;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"9\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 vruntime; <span class=\"hljs-comment\">\/* \u865a\u62df\u8fd0\u884c\u65f6 *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"10\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 prev_sum_exec_runtime;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"11\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"12\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 last_wakeup;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"13\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 avg_overlap;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"14\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"15\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 nr_migrations;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"16\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"17\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 start_runtime;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"18\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 avg_wakeup;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"19\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"20\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 avg_running;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"21\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"22\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">ifdef<\/span> CONFIG_SCHEDSTATS<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"23\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 wait_start;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"24\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 wait_max;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"25\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 wait_count;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"26\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 wait_sum;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"27\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 iowait_count;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"28\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 iowait_sum;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"29\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"30\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 sleep_start;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"31\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 sleep_max;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"32\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">s64 sum_sleep_runtime;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"33\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"34\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 block_start;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"35\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 block_max;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"36\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 exec_max;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"37\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 slice_max;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"38\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"39\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 nr_migrations_cold;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"40\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 nr_failed_migrations_affine;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"41\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 nr_failed_migrations_running;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"42\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 nr_failed_migrations_hot;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"43\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 nr_forced_migrations;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"44\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"45\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 nr_wakeups;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"46\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 nr_wakeups_sync;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"47\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 nr_wakeups_migrate;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"48\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 nr_wakeups_local;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"49\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 nr_wakeups_remote;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"50\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 nr_wakeups_affine;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"51\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 nr_wakeups_affine_attempts;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"52\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 nr_wakeups_passive;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"53\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 nr_wakeups_idle;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"54\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">endif<\/span><\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"55\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"56\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">ifdef<\/span> CONFIG_FAIR_GROUP_SCHED<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"57\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">sched_entity<\/span> *<span class=\"hljs-title\">parent<\/span>;<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"58\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\">\/* rq on which this entity is (to be) queued: *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"59\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">cfs_rq<\/span> *<span class=\"hljs-title\">cfs_rq<\/span>;<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"60\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\">\/* rq &#8220;owned&#8221; by this entity\/group: *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"61\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">cfs_rq<\/span> *<span class=\"hljs-title\">my_q<\/span>;<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"62\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">endif<\/span><\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"63\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">};<\/div>\n<\/div>\n<\/li>\n<\/ol>\n<pre><code class=\"language-cpp hljs\"><\/code><\/pre>\n<p>\u8fd9\u91cc\u5305\u62ec\u8d1f\u8f7d\u6743\u91cdload\u3001\u5bf9\u5e94\u7684\u7ea2\u9ed1\u6811\u7ed3\u70b9run_node\u3001\u865a\u62df\u8fd0\u884c\u65f6vruntime\uff08\u8868\u793a\u8fdb\u7a0b\u7684\u8fd0\u884c\u65f6\u95f4\uff0c\u5e76\u4f5c\u4e3a\u7ea2\u9ed1\u6811\u7684\u7d22\u5f15\uff09\u3001\u5f00\u59cb\u6267\u884c\u65f6\u95f4\u3001\u6700\u540e\u5524\u9192\u65f6\u95f4\u3001\u5404\u79cd\u7edf\u8ba1\u6570\u636e\u3001\u7528\u4e8e\u7ec4\u8c03\u5ea6\u7684CFS\u8fd0\u884c\u961f\u5217\u4fe1\u606fcfs_rq\uff0c\u7b49\u7b49\u3002<br \/>\n\uff083\uff09\u8c03\u5ea6\u7c7b\uff1astruct sched_class<br \/>\n\u8be5\u8c03\u5ea6\u7c7b\u4e5f\u5728sched.h\u4e2d\uff0c\u662f\u5bf9\u8c03\u5ea6\u5668\u64cd\u4f5c\u7684\u9762\u5411\u5bf9\u8c61\u62bd\u8c61\uff0c\u534f\u52a9\u5185\u6838\u8c03\u5ea6\u7a0b\u5e8f\u7684\u5404\u79cd\u5de5\u4f5c\u3002\u8c03\u5ea6\u7c7b\u662f\u8c03\u5ea6\u5668\u7ba1\u7406\u5668\u7684\u6838\u5fc3\uff0c\u6bcf\u79cd\u8c03\u5ea6\u7b97\u6cd5\u6a21\u5757\u9700\u8981\u5b9e\u73b0struct sched_class\u5efa\u8bae\u7684\u4e00\u7ec4\u51fd\u6570\u3002<\/p>\n<div class=\"dp-highlighter bg_cpp\">\n<div class=\"bar\">\n<div class=\"tools\"><strong>[cpp]<\/strong>\u00a0<a class=\"ViewSource\" title=\"view plain\" href=\"http:\/\/blog.csdn.net\/zhoudaxia\/article\/details\/7375668#\" target=\"_blank\" rel=\"noopener noreferrer\">view plain<\/a>\u00a0<a class=\"CopyToClipboard\" title=\"copy\" href=\"http:\/\/blog.csdn.net\/zhoudaxia\/article\/details\/7375668#\" target=\"_blank\" rel=\"noopener noreferrer\">copy<\/a><\/p>\n<div><embed id=\"ZeroClipboardMovie_3\" src=\"https:\/\/csdnimg.cn\/public\/highlighter\/ZeroClipboard.swf\" type=\"application\/x-shockwave-flash\" width=\"15\" height=\"16\" align=\"middle\" name=\"ZeroClipboardMovie_3\" data-mce-fragment=\"1\"><\/embed><\/div>\n<div><embed id=\"ZeroClipboardMovie_9\" src=\"https:\/\/csdnimg.cn\/public\/highlighter\/ZeroClipboard.swf\" type=\"application\/x-shockwave-flash\" width=\"15\" height=\"16\" align=\"middle\" name=\"ZeroClipboardMovie_9\" data-mce-fragment=\"1\"><\/embed><\/div>\n<\/div>\n<\/div>\n<ol class=\"dp-cpp\">\n<li class=\"alt\"><span class=\"keyword\">struct<\/span>\u00a0sched_class\u00a0{<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">const<\/span>\u00a0<span class=\"keyword\">struct<\/span>\u00a0sched_class\u00a0*next;<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">void<\/span>\u00a0(*enqueue_task)\u00a0(<span class=\"keyword\">struct<\/span>\u00a0rq\u00a0*rq,\u00a0<span class=\"keyword\">struct<\/span>\u00a0task_struct\u00a0*p,\u00a0<span class=\"datatypes\">int<\/span>\u00a0wakeup,<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"datatypes\">bool<\/span>\u00a0head);<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">void<\/span>\u00a0(*dequeue_task)\u00a0(<span class=\"keyword\">struct<\/span>\u00a0rq\u00a0*rq,\u00a0<span class=\"keyword\">struct<\/span>\u00a0task_struct\u00a0*p,\u00a0<span class=\"datatypes\">int<\/span>\u00a0sleep);<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">void<\/span>\u00a0(*yield_task)\u00a0(<span class=\"keyword\">struct<\/span>\u00a0rq\u00a0*rq);<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">void<\/span>\u00a0(*check_preempt_curr)\u00a0(<span class=\"keyword\">struct<\/span>\u00a0rq\u00a0*rq,\u00a0<span class=\"keyword\">struct<\/span>\u00a0task_struct\u00a0*p,\u00a0<span class=\"datatypes\">int<\/span>\u00a0flags);<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0task_struct\u00a0*\u00a0(*pick_next_task)\u00a0(<span class=\"keyword\">struct<\/span>\u00a0rq\u00a0*rq);<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">void<\/span>\u00a0(*put_prev_task)\u00a0(<span class=\"keyword\">struct<\/span>\u00a0rq\u00a0*rq,\u00a0<span class=\"keyword\">struct<\/span>\u00a0task_struct\u00a0*p);<\/li>\n<li class=\"alt\"><\/li>\n<li><span class=\"preprocessor\">#ifdef\u00a0CONFIG_SMP\u00a0<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"datatypes\">int<\/span>\u00a0\u00a0(*select_task_rq)(<span class=\"keyword\">struct<\/span>\u00a0rq\u00a0*rq,\u00a0<span class=\"keyword\">struct<\/span>\u00a0task_struct\u00a0*p,<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"datatypes\">int<\/span>\u00a0sd_flag,\u00a0<span class=\"datatypes\">int<\/span>\u00a0flags);<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">long<\/span>\u00a0(*load_balance)\u00a0(<span class=\"keyword\">struct<\/span>\u00a0rq\u00a0*this_rq,\u00a0<span class=\"datatypes\">int<\/span>\u00a0this_cpu,<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0rq\u00a0*busiest,\u00a0unsigned\u00a0<span class=\"datatypes\">long<\/span>\u00a0max_load_move,<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0sched_domain\u00a0*sd,\u00a0<span class=\"keyword\">enum<\/span>\u00a0cpu_idle_type\u00a0idle,<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"datatypes\">int<\/span>\u00a0*all_pinned,\u00a0<span class=\"datatypes\">int<\/span>\u00a0*this_best_prio);<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"datatypes\">int<\/span>\u00a0(*move_one_task)\u00a0(<span class=\"keyword\">struct<\/span>\u00a0rq\u00a0*this_rq,\u00a0<span class=\"datatypes\">int<\/span>\u00a0this_cpu,<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0rq\u00a0*busiest,\u00a0<span class=\"keyword\">struct<\/span>\u00a0sched_domain\u00a0*sd,<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">enum<\/span>\u00a0cpu_idle_type\u00a0idle);<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">void<\/span>\u00a0(*pre_schedule)\u00a0(<span class=\"keyword\">struct<\/span>\u00a0rq\u00a0*this_rq,\u00a0<span class=\"keyword\">struct<\/span>\u00a0task_struct\u00a0*task);<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">void<\/span>\u00a0(*post_schedule)\u00a0(<span class=\"keyword\">struct<\/span>\u00a0rq\u00a0*this_rq);<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">void<\/span>\u00a0(*task_waking)\u00a0(<span class=\"keyword\">struct<\/span>\u00a0rq\u00a0*this_rq,\u00a0<span class=\"keyword\">struct<\/span>\u00a0task_struct\u00a0*task);<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">void<\/span>\u00a0(*task_woken)\u00a0(<span class=\"keyword\">struct<\/span>\u00a0rq\u00a0*this_rq,\u00a0<span class=\"keyword\">struct<\/span>\u00a0task_struct\u00a0*task);<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">void<\/span>\u00a0(*set_cpus_allowed)(<span class=\"keyword\">struct<\/span>\u00a0task_struct\u00a0*p,<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">const<\/span>\u00a0<span class=\"keyword\">struct<\/span>\u00a0cpumask\u00a0*newmask);<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">void<\/span>\u00a0(*rq_online)(<span class=\"keyword\">struct<\/span>\u00a0rq\u00a0*rq);<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">void<\/span>\u00a0(*rq_offline)(<span class=\"keyword\">struct<\/span>\u00a0rq\u00a0*rq);<\/li>\n<li><span class=\"preprocessor\">#endif\u00a0<\/span><\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">void<\/span>\u00a0(*set_curr_task)\u00a0(<span class=\"keyword\">struct<\/span>\u00a0rq\u00a0*rq);<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">void<\/span>\u00a0(*task_tick)\u00a0(<span class=\"keyword\">struct<\/span>\u00a0rq\u00a0*rq,\u00a0<span class=\"keyword\">struct<\/span>\u00a0task_struct\u00a0*p,\u00a0<span class=\"datatypes\">int<\/span>\u00a0queued);<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">void<\/span>\u00a0(*task_fork)\u00a0(<span class=\"keyword\">struct<\/span>\u00a0task_struct\u00a0*p);<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">void<\/span>\u00a0(*switched_from)\u00a0(<span class=\"keyword\">struct<\/span>\u00a0rq\u00a0*this_rq,\u00a0<span class=\"keyword\">struct<\/span>\u00a0task_struct\u00a0*task,<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"datatypes\">int<\/span>\u00a0running);<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">void<\/span>\u00a0(*switched_to)\u00a0(<span class=\"keyword\">struct<\/span>\u00a0rq\u00a0*this_rq,\u00a0<span class=\"keyword\">struct<\/span>\u00a0task_struct\u00a0*task,<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"datatypes\">int<\/span>\u00a0running);<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">void<\/span>\u00a0(*prio_changed)\u00a0(<span class=\"keyword\">struct<\/span>\u00a0rq\u00a0*this_rq,\u00a0<span class=\"keyword\">struct<\/span>\u00a0task_struct\u00a0*task,<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"datatypes\">int<\/span>\u00a0oldprio,\u00a0<span class=\"datatypes\">int<\/span>\u00a0running);<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">int<\/span>\u00a0(*get_rr_interval)\u00a0(<span class=\"keyword\">struct<\/span>\u00a0rq\u00a0*rq,<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0task_struct\u00a0*task);<\/li>\n<li class=\"alt\"><\/li>\n<li><span class=\"preprocessor\">#ifdef\u00a0CONFIG_FAIR_GROUP_SCHED\u00a0<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">void<\/span>\u00a0(*task_move_group)\u00a0(<span class=\"keyword\">struct<\/span>\u00a0task_struct\u00a0*p,\u00a0<span class=\"datatypes\">int<\/span>\u00a0on_rq);<\/li>\n<li><span class=\"preprocessor\">#endif\u00a0<\/span><\/li>\n<li class=\"alt\">};<\/li>\n<\/ol>\n<\/div>\n<pre><code class=\"language-cpp hljs\"><\/code><\/pre>\n<ol class=\"hljs-ln\">\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"1\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">sched_class<\/span> {<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"2\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">const<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">sched_class<\/span> *<span class=\"hljs-title\">next<\/span>;<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"3\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"4\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">void<\/span> (*enqueue_task) (struct rq *rq, struct task_struct *p, <span class=\"hljs-keyword\">int<\/span> wakeup,<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"5\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">bool<\/span> head);<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"6\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">void<\/span> (*dequeue_task) (struct rq *rq, struct task_struct *p, <span class=\"hljs-keyword\">int<\/span> sleep);<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"7\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">void<\/span> (*yield_task) (struct rq *rq);<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"8\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"9\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">void<\/span> (*check_preempt_curr) (struct rq *rq, struct task_struct *p, <span class=\"hljs-keyword\">int<\/span> flags);<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"10\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"11\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">task_struct<\/span> * (*<span class=\"hljs-title\">pick_next_task<\/span>) (<span class=\"hljs-title\">struct<\/span> <span class=\"hljs-title\">rq<\/span> *<span class=\"hljs-title\">rq<\/span>);<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"12\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">void<\/span> (*put_prev_task) (struct rq *rq, struct task_struct *p);<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"13\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"14\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">ifdef<\/span> CONFIG_SMP<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"15\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">int<\/span> (*select_task_rq)(struct rq *rq, struct task_struct *p,<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"16\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">int<\/span> sd_flag, <span class=\"hljs-keyword\">int<\/span> flags);<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"17\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"18\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-title\">long<\/span> <span class=\"hljs-params\">(*load_balance)<\/span> <span class=\"hljs-params\">(struct rq *this_rq, <span class=\"hljs-keyword\">int<\/span> this_cpu,<\/span><\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"19\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-params\"> struct rq *busiest, <span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">long<\/span> max_load_move,<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"20\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-params\"> struct sched_domain *sd, <span class=\"hljs-keyword\">enum<\/span> cpu_idle_type idle,<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"21\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-params\"> <span class=\"hljs-keyword\">int<\/span> *all_pinned, <span class=\"hljs-keyword\">int<\/span> *this_best_prio)<\/span>;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"22\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"23\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">int<\/span> (*move_one_task) (struct rq *this_rq, <span class=\"hljs-keyword\">int<\/span> this_cpu,<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"24\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">struct rq *busiest, struct sched_domain *sd,<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"25\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">enum<\/span> cpu_idle_type idle);<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"26\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">void<\/span> (*pre_schedule) (struct rq *this_rq, struct task_struct *task);<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"27\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">void<\/span> (*post_schedule) (struct rq *this_rq);<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"28\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">void<\/span> (*task_waking) (struct rq *this_rq, struct task_struct *task);<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"29\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">void<\/span> (*task_woken) (struct rq *this_rq, struct task_struct *task);<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"30\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"31\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">void<\/span> (*set_cpus_allowed)(struct task_struct *p,<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"32\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">const<\/span> struct cpumask *newmask);<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"33\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"34\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">void<\/span> (*rq_online)(struct rq *rq);<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"35\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">void<\/span> (*rq_offline)(struct rq *rq);<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"36\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">endif<\/span><\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"37\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"38\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">void<\/span> (*set_curr_task) (struct rq *rq);<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"39\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">void<\/span> (*task_tick) (struct rq *rq, struct task_struct *p, <span class=\"hljs-keyword\">int<\/span> queued);<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"40\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">void<\/span> (*task_fork) (struct task_struct *p);<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"41\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"42\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">void<\/span> (*switched_from) (struct rq *this_rq, struct task_struct *task,<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"43\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">int<\/span> running);<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"44\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">void<\/span> (*switched_to) (struct rq *this_rq, struct task_struct *task,<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"45\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">int<\/span> running);<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"46\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">void<\/span> (*prio_changed) (struct rq *this_rq, struct task_struct *task,<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"47\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">int<\/span> oldprio, <span class=\"hljs-keyword\">int<\/span> running);<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"48\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"49\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-title\">int<\/span> <span class=\"hljs-params\">(*get_rr_interval)<\/span> <span class=\"hljs-params\">(struct rq *rq,<\/span><\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"50\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-params\"> struct task_struct *task)<\/span>;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"51\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"52\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">ifdef<\/span> CONFIG_FAIR_GROUP_SCHED<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"53\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">void<\/span> (*task_move_group) (struct task_struct *p, <span class=\"hljs-keyword\">int<\/span> on_rq);<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"54\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">endif<\/span><\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"55\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">};<\/div>\n<\/div>\n<\/li>\n<\/ol>\n<pre><code class=\"language-cpp hljs\"><\/code><\/pre>\n<p>\u770b\u4e00\u4e0b\u5176\u4e2d\u7684\u4e3b\u8981\u51fd\u6570\uff1a<br \/>\n* enqueue_task\uff1a\u5f53\u67d0\u4e2a\u4efb\u52a1\u8fdb\u5165\u53ef\u8fd0\u884c\u72b6\u6001\u65f6\uff0c\u8be5\u51fd\u6570\u5c06\u5f97\u5230\u8c03\u7528\u3002\u5b83\u5c06\u8c03\u5ea6\u5b9e\u4f53\uff08\u8fdb\u7a0b\uff09\u653e\u5165\u7ea2\u9ed1\u6811\u4e2d\uff0c\u5e76\u5bf9 nr_running \u53d8\u91cf\u52a0 1\u3002\u4ece\u524d\u9762\u201cLinux\u8fdb\u7a0b\u7ba1\u7406\u201d\u7684\u5206\u6790\u4e2d\u53ef\u77e5\uff0c\u8fdb\u7a0b\u521b\u5efa\u7684\u6700\u540e\u4f1a\u8c03\u7528\u8be5\u51fd\u6570\u3002<br \/>\n* dequeue_task\uff1a\u5f53\u67d0\u4e2a\u4efb\u52a1\u9000\u51fa\u53ef\u8fd0\u884c\u72b6\u6001\u65f6\u8c03\u7528\u8be5\u51fd\u6570\uff0c\u5b83\u5c06\u4ece\u7ea2\u9ed1\u6811\u4e2d\u53bb\u6389\u5bf9\u5e94\u7684\u8c03\u5ea6\u5b9e\u4f53\uff0c\u5e76\u4ece nr_running \u53d8\u91cf\u4e2d\u51cf 1\u3002<br \/>\n* yield_task\uff1a\u5728 compat_yield sysctl \u5173\u95ed\u7684\u60c5\u51b5\u4e0b\uff0c\u8be5\u51fd\u6570\u5b9e\u9645\u4e0a\u6267\u884c\u5148\u51fa\u961f\u540e\u5165\u961f\uff1b\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5b83\u5c06\u8c03\u5ea6\u5b9e\u4f53\u653e\u5728\u7ea2\u9ed1\u6811\u7684\u6700\u53f3\u7aef\u3002<br \/>\n* check_preempt_curr\uff1a\u8be5\u51fd\u6570\u5c06\u68c0\u67e5\u5f53\u524d\u8fd0\u884c\u7684\u4efb\u52a1\u662f\u5426\u88ab\u62a2\u5360\u3002\u5728\u5b9e\u9645\u62a2\u5360\u6b63\u5728\u8fd0\u884c\u7684\u4efb\u52a1\u4e4b\u524d\uff0cCFS \u8c03\u5ea6\u7a0b\u5e8f\u6a21\u5757\u5c06\u6267\u884c\u516c\u5e73\u6027\u6d4b\u8bd5\u3002\u8fd9\u5c06\u9a71\u52a8\u5524\u9192\u5f0f\uff08wakeup\uff09\u62a2\u5360\u3002<br \/>\n* pick_next_task\uff1a\u8be5\u51fd\u6570\u9009\u62e9\u63a5\u4e0b\u6765\u8981\u8fd0\u884c\u7684\u6700\u5408\u9002\u7684\u8fdb\u7a0b\u3002<br \/>\n* load_balance\uff1a\u6bcf\u4e2a\u8c03\u5ea6\u7a0b\u5e8f\u6a21\u5757\u5b9e\u73b0\u4e24\u4e2a\u51fd\u6570\uff0cload_balance_start() \u548c load_balance_next()\uff0c\u4f7f\u7528\u8fd9\u4e24\u4e2a\u51fd\u6570\u5b9e\u73b0\u4e00\u4e2a\u8fed\u4ee3\u5668\uff0c\u5728\u6a21\u5757\u7684 load_balance \u4f8b\u7a0b\u4e2d\u8c03\u7528\u3002\u5185\u6838\u8c03\u5ea6\u7a0b\u5e8f\u4f7f\u7528\u8fd9\u79cd\u65b9\u6cd5\u5b9e\u73b0\u7531\u8c03\u5ea6\u6a21\u5757\u7ba1\u7406\u7684\u8fdb\u7a0b\u7684\u8d1f\u8f7d\u5e73\u8861\u3002<br \/>\n* set_curr_task\uff1a\u5f53\u4efb\u52a1\u4fee\u6539\u5176\u8c03\u5ea6\u7c7b\u6216\u4fee\u6539\u5176\u4efb\u52a1\u7ec4\u65f6\uff0c\u5c06\u8c03\u7528\u8fd9\u4e2a\u51fd\u6570\u3002<br \/>\n* task_tick\uff1a\u8be5\u51fd\u6570\u901a\u5e38\u8c03\u7528\u81ea time tick \u51fd\u6570\uff1b\u5b83\u53ef\u80fd\u5f15\u8d77\u8fdb\u7a0b\u5207\u6362\u3002\u8fd9\u5c06\u9a71\u52a8\u8fd0\u884c\u65f6\uff08running\uff09\u62a2\u5360\u3002<br \/>\n\u8c03\u5ea6\u7c7b\u7684\u5f15\u5165\u662f\u63a5\u53e3\u548c\u5b9e\u73b0\u5206\u79bb\u7684\u8bbe\u8ba1\u5178\u8303\uff0c\u4f60\u53ef\u4ee5\u5b9e\u73b0\u4e0d\u540c\u7684\u8c03\u5ea6\u7b97\u6cd5\uff08\u4f8b\u5982\u666e\u901a\u8fdb\u7a0b\u548c\u5b9e\u65f6\u8fdb\u7a0b\u7684\u8c03\u5ea6\u7b97\u6cd5\u5c31\u4e0d\u4e00\u6837\uff09\uff0c\u4f46\u7531\u4e8e\u6709\u7edf\u4e00\u7684\u63a5\u53e3\uff0c\u4f7f\u5f97\u8c03\u5ea6\u7b56\u7565\u88ab\u6a21\u5757\u5316\uff0c\u4e00\u4e2aLinux\u8c03\u5ea6\u7a0b\u5e8f\u53ef\u4ee5\u6709\u591a\u4e2a\u4e0d\u540c\u7684\u8c03\u5ea6\u7b56\u7565\u3002\u8c03\u5ea6\u7c7b\u663e\u8457\u589e\u5f3a\u4e86\u5185\u6838\u8c03\u5ea6\u7a0b\u5e8f\u7684\u53ef\u6269\u5c55\u6027\u3002\u6bcf\u4e2a\u4efb\u52a1\u90fd\u5c5e\u4e8e\u4e00\u4e2a\u8c03\u5ea6\u7c7b\uff0c\u8fd9\u51b3\u5b9a\u4e86\u4efb\u52a1\u5c06\u5982\u4f55\u8c03\u5ea6\u3002 \u8c03\u5ea6\u7c7b\u5b9a\u4e49\u4e00\u4e2a\u901a\u7528\u51fd\u6570\u96c6\uff0c\u51fd\u6570\u96c6\u5b9a\u4e49\u8c03\u5ea6\u5668\u7684\u884c\u4e3a\u3002\u4f8b\u5982\uff0c\u6bcf\u4e2a\u8c03\u5ea6\u5668\u63d0\u4f9b\u4e00\u79cd\u65b9\u5f0f\uff0c\u6dfb\u52a0\u8981\u8c03\u5ea6\u7684\u4efb\u52a1\u3001\u8c03\u51fa\u8981\u8fd0\u884c\u7684\u4e0b\u4e00\u4e2a\u4efb\u52a1\u3001\u63d0\u4f9b\u7ed9\u8c03\u5ea6\u5668\u7b49\u7b49\u3002\u6bcf\u4e2a\u8c03\u5ea6\u5668\u7c7b\u90fd\u5728\u4e00\u5bf9\u4e00\u8fde\u63a5\u7684\u5217\u8868\u4e2d\u5f7c\u6b64\u76f8\u8fde\uff0c\u4f7f\u7c7b\u53ef\u4ee5\u8fed\u4ee3\uff08\u4f8b\u5982\uff0c \u8981\u542f\u7528\u7ed9\u5b9a\u5904\u7406\u5668\u7684\u7981\u7528\uff09\u3002\u6ce8\u610f\uff0c\u5c06\u4efb\u52a1\u51fd\u6570\u52a0\u5165\u961f\u5217\u6216\u8131\u79bb\u961f\u5217\u53ea\u9700\u4ece\u7279\u5b9a\u8c03\u5ea6\u7ed3\u6784\u4e2d\u52a0\u5165\u6216\u79fb\u9664\u4efb\u52a1\u3002 \u6838\u5fc3\u51fd\u6570 pick_next_task \u9009\u62e9\u8981\u6267\u884c\u7684\u4e0b\u4e00\u4e2a\u4efb\u52a1\uff08\u53d6\u51b3\u4e8e\u8c03\u5ea6\u7c7b\u7684\u5177\u4f53\u7b56\u7565\uff09\u3002\u8c03\u5ea6\u7c7b\u7684\u56fe\u5f62\u89c6\u56fe\u5982\u4e0b\uff1a<br \/>\n&nbsp;<\/p>\n<div><img decoding=\"async\" src=\"http:\/\/hi.csdn.net\/attachment\/201203\/20\/0_13322512519q6O.gif\" alt=\"\" \/><br \/>\n\u56fe6 \u8c03\u5ea6\u7c7b\u56fe\u5f62\u89c6\u56fe<\/div>\n<p>\u8fd9\u91ccsched_rt.c, sched_fair.c, sched_idletask.c\u7b49\uff08\u90fd\u5728kernel\/\u76ee\u5f55\u4e0b\uff09\u5c31\u662f\u4e0d\u540c\u7684\u8c03\u5ea6\u7b97\u6cd5\u5b9e\u73b0\u3002\u4e0d\u8981\u5fd8\u4e86\u8c03\u5ea6\u7c7b\u662f\u4efb\u52a1\u7ed3\u6784\u672c\u8eab\u7684\u4e00\u90e8\u5206\uff08\u53c2\u89c1task_struct\uff09\u3002\u8fd9\u4e00\u70b9\u7b80\u5316\u4e86\u4efb\u52a1\u7684\u64cd\u4f5c\uff0c\u65e0\u8bba\u5176\u8c03\u5ea6\u7c7b\u5982\u4f55\u3002\u56e0\u4e3a\u8fdb\u7a0b\u63cf\u8ff0\u7b26\u4e2d\u6709sched_class\u5f15\u7528\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u76f4\u63a5\u901a\u8fc7\u8fdb\u7a0b\u63cf\u8ff0\u7b26\u6765\u8c03\u7528\u8c03\u5ea6\u7c7b\u4e2d\u7684\u5404\u79cd\u64cd\u4f5c\u3002\u5728\u8c03\u5ea6\u7c7b\u4e2d\uff0c\u968f\u7740\u8c03\u5ea6\u57df\u7684\u589e\u52a0\uff0c\u5176\u529f\u80fd\u4e5f\u5728\u589e\u52a0\u3002 \u8fd9\u4e9b\u57df\u5141\u8bb8\u60a8\u51fa\u4e8e\u8d1f\u8f7d\u5e73\u8861\u548c\u9694\u79bb\u7684\u76ee\u7684\u5c06\u4e00\u4e2a\u6216\u591a\u4e2a\u5904\u7406\u5668\u6309\u5c42\u6b21\u5173\u7cfb\u5206\u7ec4\u3002 \u4e00\u4e2a\u6216\u591a\u4e2a\u5904\u7406\u5668\u80fd\u591f\u5171\u4eab\u8c03\u5ea6\u7b56\u7565\uff08\u5e76\u5728\u5176\u4e4b\u95f4\u4fdd\u6301\u8d1f\u8f7d\u5e73\u8861\uff09\uff0c\u6216\u5b9e\u73b0\u72ec\u7acb\u7684\u8c03\u5ea6\u7b56\u7565\u3002<br \/>\n\u4e0d\u8fc7Linux\u8c03\u5ea6\u7a0b\u5e8f\u672c\u8eab\u8fd8\u6ca1\u6709\u88ab\u6a21\u5757\u5316\uff0c\u8fd9\u662f\u4e00\u4e2a\u53ef\u4ee5\u6539\u8fdb\u7684\u5730\u65b9\u3002\u4f8b\u5982\u5bf9Pluggable CPU\u8c03\u5ea6\u7a0b\u5e8f\u6846\u67b6\uff0c\u5728\u5185\u6838\u7f16\u8bd1\u65f6\u53ef\u4ee5\u9009\u62e9\u9ed8\u8ba4\u8c03\u5ea6\u7a0b\u5e8f\uff0c\u5728\u542f\u52a8\u65f6\u901a\u8fc7\u5411\u5185\u6838\u4f20\u9012\u53c2\u6570\u4e5f\u53ef\u4ee5\u9009\u62e9\u5176\u4ed6\u7684CPU\u8c03\u5ea6\u7a0b\u5e8f\u3002<br \/>\n\uff084\uff09\u53ef\u8fd0\u884c\u961f\u5217\uff1astruct rq<br \/>\n\u8c03\u5ea6\u7a0b\u5e8f\u6bcf\u6b21\u5728\u8fdb\u7a0b\u53d1\u751f\u5207\u6362\u65f6\uff0c\u90fd\u8981\u4ece\u53ef\u8fd0\u884c\u961f\u5217\u4e2d\u9009\u53d6\u4e00\u4e2a\u6700\u4f73\u7684\u8fdb\u7a0b\u6765\u8fd0\u884c\u3002Linux\u5185\u6838\u4f7f\u7528rq\u6570\u636e\u7ed3\u6784\uff08\u4ee5\u524d\u7684\u5185\u6838\u4e2d\u8be5\u7ed3\u6784\u4e3arunqueue\uff09\u8868\u793a\u4e00\u4e2a\u53ef\u8fd0\u884c\u961f\u5217\u4fe1\u606f\uff08\u4e5f\u5c31\u662f\u5c31\u7eea\u961f\u5217\uff09\uff0c\u6bcf\u4e2aCPU\u90fd\u6709\u4e14\u53ea\u6709\u4e00\u4e2a\u8fd9\u6837\u7684\u7ed3\u6784\u3002\u8be5\u7ed3\u6784\u5728kernel\/sched.c\u4e2d\uff0c\u4e0d\u4ec5\u63cf\u8ff0\u4e86\u6bcf\u4e2a\u5904\u7406\u5668\u4e2d\u5904\u4e8e\u53ef\u8fd0\u884c\u72b6\u6001\uff08TASK_RUNNING\uff09\uff0c\u800c\u4e14\u8fd8\u63cf\u8ff0\u4e86\u8be5\u5904\u7406\u5668\u7684\u8c03\u5ea6\u4fe1\u606f\u3002\u5982\u4e0b\uff1a<\/p>\n<p>&nbsp;<\/p>\n<div class=\"dp-highlighter bg_cpp\">\n<div class=\"bar\">\n<div class=\"tools\"><strong>[cpp]<\/strong>\u00a0<a class=\"ViewSource\" title=\"view plain\" href=\"http:\/\/blog.csdn.net\/zhoudaxia\/article\/details\/7375668#\" target=\"_blank\" rel=\"noopener noreferrer\">view plain<\/a>\u00a0<a class=\"CopyToClipboard\" title=\"copy\" href=\"http:\/\/blog.csdn.net\/zhoudaxia\/article\/details\/7375668#\" target=\"_blank\" rel=\"noopener noreferrer\">copy<\/a><\/p>\n<div><embed id=\"ZeroClipboardMovie_4\" src=\"https:\/\/csdnimg.cn\/public\/highlighter\/ZeroClipboard.swf\" type=\"application\/x-shockwave-flash\" width=\"15\" height=\"16\" align=\"middle\" name=\"ZeroClipboardMovie_4\" data-mce-fragment=\"1\"><\/embed><\/div>\n<div><embed id=\"ZeroClipboardMovie_10\" src=\"https:\/\/csdnimg.cn\/public\/highlighter\/ZeroClipboard.swf\" type=\"application\/x-shockwave-flash\" width=\"15\" height=\"16\" align=\"middle\" name=\"ZeroClipboardMovie_10\" data-mce-fragment=\"1\"><\/embed><\/div>\n<\/div>\n<\/div>\n<ol class=\"dp-cpp\">\n<li class=\"alt\"><span class=\"keyword\">struct<\/span>\u00a0rq\u00a0{<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/*\u00a0runqueue\u00a0lock:\u00a0*\/<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0spinlock_t\u00a0lock;<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/*<\/span><\/li>\n<li><span class=\"comment\">\u00a0\u00a0\u00a0\u00a0\u00a0*\u00a0nr_running\u00a0and\u00a0cpu_load\u00a0should\u00a0be\u00a0in\u00a0the\u00a0same\u00a0cacheline\u00a0because<\/span><\/li>\n<li class=\"alt\"><span class=\"comment\">\u00a0\u00a0\u00a0\u00a0\u00a0*\u00a0remote\u00a0CPUs\u00a0use\u00a0both\u00a0these\u00a0fields\u00a0when\u00a0doing\u00a0load\u00a0calculation.<\/span><\/li>\n<li><span class=\"comment\">\u00a0\u00a0\u00a0\u00a0\u00a0*\/<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">long<\/span>\u00a0nr_running;<\/li>\n<li><span class=\"preprocessor\">\u00a0\u00a0\u00a0\u00a0#define\u00a0CPU_LOAD_IDX_MAX\u00a05\u00a0<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">long<\/span>\u00a0cpu_load[CPU_LOAD_IDX_MAX];<\/li>\n<li><span class=\"preprocessor\">#ifdef\u00a0CONFIG_NO_HZ\u00a0<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">long<\/span>\u00a0last_tick_seen;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">char<\/span>\u00a0in_nohz_recently;<\/li>\n<li class=\"alt\"><span class=\"preprocessor\">#endif\u00a0<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/*\u00a0capture\u00a0load\u00a0from\u00a0*all*\u00a0tasks\u00a0on\u00a0this\u00a0cpu:\u00a0*\/<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0load_weight\u00a0load;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">long<\/span>\u00a0nr_load_updates;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0u64\u00a0nr_switches;<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0cfs_rq\u00a0cfs;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0rt_rq\u00a0rt;<\/li>\n<li class=\"alt\"><\/li>\n<li><span class=\"preprocessor\">#ifdef\u00a0CONFIG_FAIR_GROUP_SCHED\u00a0<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/*\u00a0list\u00a0of\u00a0leaf\u00a0cfs_rq\u00a0on\u00a0this\u00a0cpu:\u00a0*\/<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0list_head\u00a0leaf_cfs_rq_list;<\/li>\n<li class=\"alt\"><span class=\"preprocessor\">#endif\u00a0<\/span><\/li>\n<li><span class=\"preprocessor\">#ifdef\u00a0CONFIG_RT_GROUP_SCHED\u00a0<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0list_head\u00a0leaf_rt_rq_list;<\/li>\n<li><span class=\"preprocessor\">#endif\u00a0<\/span><\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/*<\/span><\/li>\n<li class=\"alt\"><span class=\"comment\">\u00a0\u00a0\u00a0\u00a0\u00a0*\u00a0This\u00a0is\u00a0part\u00a0of\u00a0a\u00a0global\u00a0counter\u00a0where\u00a0only\u00a0the\u00a0total\u00a0sum<\/span><\/li>\n<li><span class=\"comment\">\u00a0\u00a0\u00a0\u00a0\u00a0*\u00a0over\u00a0all\u00a0CPUs\u00a0matters.\u00a0A\u00a0task\u00a0can\u00a0increase\u00a0this\u00a0counter\u00a0on<\/span><\/li>\n<li class=\"alt\"><span class=\"comment\">\u00a0\u00a0\u00a0\u00a0\u00a0*\u00a0one\u00a0CPU\u00a0and\u00a0if\u00a0it\u00a0got\u00a0migrated\u00a0afterwards\u00a0it\u00a0may\u00a0decrease<\/span><\/li>\n<li><span class=\"comment\">\u00a0\u00a0\u00a0\u00a0\u00a0*\u00a0it\u00a0on\u00a0another\u00a0CPU.\u00a0Always\u00a0updated\u00a0under\u00a0the\u00a0runqueue\u00a0lock:<\/span><\/li>\n<li class=\"alt\"><span class=\"comment\">\u00a0\u00a0\u00a0\u00a0\u00a0*\/<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">long<\/span>\u00a0nr_uninterruptible;<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0task_struct\u00a0*curr,\u00a0*idle;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">long<\/span>\u00a0next_balance;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0mm_struct\u00a0*prev_mm;<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0u64\u00a0clock;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0u64\u00a0clock_task;<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0atomic_t\u00a0nr_iowait;<\/li>\n<li><\/li>\n<li class=\"alt\"><span class=\"preprocessor\">#ifdef\u00a0CONFIG_SMP\u00a0<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0root_domain\u00a0*rd;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0sched_domain\u00a0*sd;<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">long<\/span>\u00a0cpu_power;<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">char<\/span>\u00a0idle_at_tick;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/*\u00a0For\u00a0active\u00a0balancing\u00a0*\/<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"datatypes\">int<\/span>\u00a0post_schedule;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"datatypes\">int<\/span>\u00a0active_balance;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"datatypes\">int<\/span>\u00a0push_cpu;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/*\u00a0cpu\u00a0of\u00a0this\u00a0runqueue:\u00a0*\/<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"datatypes\">int<\/span>\u00a0cpu;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"datatypes\">int<\/span>\u00a0online;<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">long<\/span>\u00a0avg_load_per_task;<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0task_struct\u00a0*migration_thread;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0list_head\u00a0migration_queue;<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0u64\u00a0rt_avg;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0u64\u00a0age_stamp;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0u64\u00a0idle_stamp;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0u64\u00a0avg_idle;<\/li>\n<li class=\"alt\"><span class=\"preprocessor\">#endif\u00a0<\/span><\/li>\n<li><\/li>\n<li class=\"alt\"><span class=\"preprocessor\">#ifdef\u00a0CONFIG_IRQ_TIME_ACCOUNTING\u00a0<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0u64\u00a0prev_irq_time;<\/li>\n<li class=\"alt\"><span class=\"preprocessor\">#endif\u00a0<\/span><\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/*\u00a0calc_load\u00a0related\u00a0fields\u00a0*\/<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">long<\/span>\u00a0calc_load_update;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"datatypes\">long<\/span>\u00a0calc_load_active;<\/li>\n<li><\/li>\n<li class=\"alt\"><span class=\"preprocessor\">#ifdef\u00a0CONFIG_SCHED_HRTICK\u00a0<\/span><\/li>\n<li><span class=\"preprocessor\">#ifdef\u00a0CONFIG_SMP\u00a0<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"datatypes\">int<\/span>\u00a0hrtick_csd_pending;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0call_single_data\u00a0hrtick_csd;<\/li>\n<li class=\"alt\"><span class=\"preprocessor\">#endif\u00a0<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0hrtimer\u00a0hrtick_timer;<\/li>\n<li class=\"alt\"><span class=\"preprocessor\">#endif\u00a0<\/span><\/li>\n<li><\/li>\n<li class=\"alt\"><span class=\"preprocessor\">#ifdef\u00a0CONFIG_SCHEDSTATS\u00a0<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/*\u00a0latency\u00a0stats\u00a0*\/<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0sched_info\u00a0rq_sched_info;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">long<\/span>\u00a0<span class=\"datatypes\">long<\/span>\u00a0rq_cpu_time;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/*\u00a0could\u00a0above\u00a0be\u00a0rq-&gt;cfs_rq.exec_clock\u00a0+\u00a0rq-&gt;rt_rq.rt_runtime\u00a0?\u00a0*\/<\/span><\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/*\u00a0sys_sched_yield()\u00a0stats\u00a0*\/<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">int<\/span>\u00a0yld_count;<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/*\u00a0schedule()\u00a0stats\u00a0*\/<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">int<\/span>\u00a0sched_switch;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">int<\/span>\u00a0sched_count;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">int<\/span>\u00a0sched_goidle;<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/*\u00a0try_to_wake_up()\u00a0stats\u00a0*\/<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">int<\/span>\u00a0ttwu_count;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">int<\/span>\u00a0ttwu_local;<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/*\u00a0BKL\u00a0stats\u00a0*\/<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">int<\/span>\u00a0bkl_count;<\/li>\n<li class=\"alt\"><span class=\"preprocessor\">#endif\u00a0<\/span><\/li>\n<li>};<\/li>\n<\/ol>\n<\/div>\n<pre><code class=\"language-cpp hljs\"><\/code><\/pre>\n<ol class=\"hljs-ln hundred\">\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"1\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">rq<\/span> {<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"2\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\">\/* runqueue lock: *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"3\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">spinlock_t<\/span> lock;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"4\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"5\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\">\/*<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"6\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\"> * nr_running and cpu_load should be in the same cacheline because<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"7\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\"> * remote CPUs use both these fields when doing load calculation.<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"8\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\"> *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"9\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">long<\/span> nr_running;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"10\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">define<\/span> CPU_LOAD_IDX_MAX 5<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"11\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">long<\/span> cpu_load[CPU_LOAD_IDX_MAX];<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"12\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">ifdef<\/span> CONFIG_NO_HZ<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"13\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">long<\/span> last_tick_seen;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"14\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">char<\/span> in_nohz_recently;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"15\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">endif<\/span><\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"16\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\">\/* capture load from *all* tasks on this cpu: *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"17\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">load_weight<\/span> <span class=\"hljs-title\">load<\/span>;<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"18\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">long<\/span> nr_load_updates;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"19\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 nr_switches;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"20\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"21\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">cfs_rq<\/span> <span class=\"hljs-title\">cfs<\/span>;<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"22\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">rt_rq<\/span> <span class=\"hljs-title\">rt<\/span>;<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"23\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"24\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">ifdef<\/span> CONFIG_FAIR_GROUP_SCHED<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"25\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\">\/* list of leaf cfs_rq on this cpu: *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"26\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">list_head<\/span> <span class=\"hljs-title\">leaf_cfs_rq_list<\/span>;<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"27\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">endif<\/span><\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"28\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">ifdef<\/span> CONFIG_RT_GROUP_SCHED<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"29\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">list_head<\/span> <span class=\"hljs-title\">leaf_rt_rq_list<\/span>;<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"30\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">endif<\/span><\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"31\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"32\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\">\/*<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"33\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\"> * This is part of a global counter where only the total sum<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"34\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\"> * over all CPUs matters. A task can increase this counter on<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"35\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\"> * one CPU and if it got migrated afterwards it may decrease<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"36\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\"> * it on another CPU. Always updated under the runqueue lock:<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"37\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\"> *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"38\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">long<\/span> nr_uninterruptible;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"39\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"40\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">task_struct<\/span> *<span class=\"hljs-title\">curr<\/span>, *<span class=\"hljs-title\">idle<\/span>;<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"41\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">long<\/span> next_balance;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"42\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">mm_struct<\/span> *<span class=\"hljs-title\">prev_mm<\/span>;<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"43\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"44\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 clock;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"45\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 clock_task;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"46\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"47\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">atomic_t<\/span> nr_iowait;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"48\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"49\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">ifdef<\/span> CONFIG_SMP<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"50\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">root_domain<\/span> *<span class=\"hljs-title\">rd<\/span>;<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"51\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">sched_domain<\/span> *<span class=\"hljs-title\">sd<\/span>;<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"52\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"53\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">long<\/span> cpu_power;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"54\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"55\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">char<\/span> idle_at_tick;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"56\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\">\/* For active balancing *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"57\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">int<\/span> post_schedule;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"58\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">int<\/span> active_balance;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"59\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">int<\/span> push_cpu;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"60\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\">\/* cpu of this runqueue: *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"61\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">int<\/span> cpu;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"62\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">int<\/span> online;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"63\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"64\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">long<\/span> avg_load_per_task;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"65\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"66\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">task_struct<\/span> *<span class=\"hljs-title\">migration_thread<\/span>;<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"67\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">list_head<\/span> <span class=\"hljs-title\">migration_queue<\/span>;<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"68\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"69\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 rt_avg;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"70\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 age_stamp;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"71\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 idle_stamp;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"72\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 avg_idle;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"73\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">endif<\/span><\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"74\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"75\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">ifdef<\/span> CONFIG_IRQ_TIME_ACCOUNTING<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"76\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 prev_irq_time;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"77\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">endif<\/span><\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"78\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"79\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\">\/* calc_load related fields *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"80\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">long<\/span> calc_load_update;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"81\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">long<\/span> calc_load_active;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"82\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"83\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">ifdef<\/span> CONFIG_SCHED_HRTICK<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"84\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">ifdef<\/span> CONFIG_SMP<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"85\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">int<\/span> hrtick_csd_pending;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"86\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">call_single_data<\/span> <span class=\"hljs-title\">hrtick_csd<\/span>;<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"87\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">endif<\/span><\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"88\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">hrtimer<\/span> <span class=\"hljs-title\">hrtick_timer<\/span>;<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"89\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">endif<\/span><\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"90\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"91\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">ifdef<\/span> CONFIG_SCHEDSTATS<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"92\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\">\/* latency stats *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"93\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">sched_info<\/span> <span class=\"hljs-title\">rq_sched_info<\/span>;<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"94\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">long<\/span> <span class=\"hljs-keyword\">long<\/span> rq_cpu_time;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"95\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\">\/* could above be rq-&gt;cfs_rq.exec_clock + rq-&gt;rt_rq.rt_runtime ? *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"96\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"97\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\">\/* sys_sched_yield() stats *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"98\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">int<\/span> yld_count;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"99\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"100\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\">\/* schedule() stats *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"101\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">int<\/span> sched_switch;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"102\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">int<\/span> sched_count;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"103\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">int<\/span> sched_goidle;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"104\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"105\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\">\/* try_to_wake_up() stats *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"106\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">int<\/span> ttwu_count;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"107\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">int<\/span> ttwu_local;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"108\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"109\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\">\/* BKL stats *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"110\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">int<\/span> bkl_count;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"111\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">endif<\/span><\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"112\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">};<\/div>\n<\/div>\n<\/li>\n<\/ol>\n<pre><code class=\"language-cpp hljs\"><\/code><\/pre>\n<p>rq\u7ed3\u6784\u662f\u4e3b\u8981\u7684\uff08\u6bcf\u4e2aCPU\u4e0a\u7684\uff09\u8fd0\u884c\u961f\u5217\u6570\u636e\u7ed3\u6784\u3002\u5176\u52a0\u9501\u7684\u89c4\u5219\u662f\uff1a\u5728\u90a3\u4e9b\u60f3\u9501\u4f4f\u591a\u4e2a\u8fd0\u884c\u961f\u5217\u7684\u5730\u65b9\uff08\u4f8b\u5982\u8d1f\u8f7d\u5747\u8861\u6216\u8005\u7ebf\u7a0b\u8fc1\u79fb\u4ee3\u7801\uff09\uff0c\u9501\u7684\u83b7\u53d6\u64cd\u4f5c\u5fc5\u987b\u6309\u8fd0\u884c\u961f\u5217\u7684\u5347\u5e8f\u6392\u5e8f\u3002rq\u4e2d\u7684\u90e8\u5206\u6838\u5fc3\u6210\u5458\u542b\u4e49\u5982\u4e0b\uff1a<br \/>\nspinlock_t lock\uff1a\u4fdd\u62a4\u8fdb\u7a0b\u94fe\u8868\u7684\u81ea\u65cb\u9501\u3002<br \/>\nunsigned long nr_running\uff1a\u76ee\u524d\u5904\u7406\u5668\u7684\u8fd0\u884c\u961f\u5217\u4e2d\u8fdb\u7a0b\u6570\u91cf\u3002<br \/>\nunsigned long cpu_load[CPU_LOAD_IDX_MAX]\uff1a\u7528\u4ee5\u8868\u793a\u5904\u7406\u5668\u7684\u8d1f\u8f7d\uff0c\u5728\u6bcf\u4e2a\u5904\u7406\u5668\u7684rq\u4e2d\u90fd\u4f1a\u6709\u5bf9\u5e94\u5230\u8be5\u5904\u7406\u5668\u7684cpu_load\u53c2\u6570\u914d\u7f6e\uff0c\u5728\u6bcf\u6b21\u5904\u7406\u5668\u89e6\u53d1scheduler tick\u65f6\uff0c\u90fd\u4f1a\u547c\u53eb\u51fd\u6570update_cpu_load_active,\u8fdb\u884ccpu_load\u7684\u66f4\u65b0\u3002\u5728\u7cfb\u7edf\u521d\u59cb\u5316\u7684\u65f6\u5019\u4f1a\u547c\u53eb\u51fd\u6570sched_init\u628arq\u7684cpu_load array\u521d\u59cb\u5316\u4e3a0\u3002\u4e86\u89e3\u4ed6\u7684\u66f4\u65b0\u65b9\u5f0f\u6700\u597d\u7684\u65b9\u5f0f\u662f\u901a\u8fc7\u51fd\u6570update_cpu_load,\u516c\u5f0f\u5982\u4e0b\uff1a<br \/>\ncpu_load[0]\u4f1a\u76f4\u63a5\u7b49\u5f85rq\u4e2dload.weight\u7684\u503c\u3002<br \/>\ncpu_load[1]=(cpu_load[1]*(2-1)+cpu_load[0])\/2<br \/>\ncpu_load[2]=(cpu_load[2]*(4-1)+cpu_load[0])\/4<br \/>\ncpu_load[3]=(cpu_load[3]*(8-1)+cpu_load[0])\/8<br \/>\ncpu_load[4]=(cpu_load[4]*(16-1)+cpu_load[0]\/16<br \/>\n\u547c\u53eb\u51fd\u6570this_cpu_load\u65f6\uff0c\u6240\u8fd4\u56de\u7684cpu load\u503c\u662fcpu_load[0]\u3002\u800c\u5728\u8fdb\u884ccpu blance\u6216migration\u65f6\uff0c\u5c31\u4f1a\u547c\u53eb\u51fd\u6570source_load target_load\u53d6\u5f97\u5bf9\u8be5\u5904\u7406\u5668cpu_load index\u503c\uff0c\u6765\u8fdb\u884c\u8ba1\u7b97\u3002<br \/>\nstruct load_weight load\uff1a\u8d1f\u8f7d\u6743\u91cd\uff0c\u5373load-&gt;weight\u503c\u3002\u4f1a\u662f\u76ee\u524d\u6240\u6267\u884c\u7684schedule entity\u7684load-&gt;weight\u7684\u603b\u548c\uff0c\u4e5f\u5c31\u662f\u8bf4rq\u7684load-&gt;weight\u8d8a\u9ad8\uff0c\u8bf4\u660e\u6240\u8d1f\u8d23\u7684\u8fdb\u7a0b\u5355\u5143load-&gt;weight\u603b\u548c\u8d8a\u9ad8\uff0c\u8868\u793a\u5904\u7406\u5668\u6240\u8d1f\u8377\u7684\u6267\u884c\u5355\u5143\u4e5f\u8d8a\u91cd\u3002<br \/>\nunsigned long nr_load_updates\uff1a\u5728\u6bcf\u6b21scheduler tick\u4e2d\u547c\u53ebupdate_cpu_load\u65f6\uff0c\u8fd9\u4e2a\u503c\u5c31\u589e\u52a0\u4e00\uff0c\u53ef\u4ee5\u7528\u6765\u53cd\u9988\u76ee\u524dcpu load\u66f4\u65b0\u7684\u6b21\u6570\u3002<br \/>\nu64 nr_switches\uff1aCPU\u6267\u884c\u8fdb\u7a0b\u5207\u6362\u7684\u6b21\u6570\u3002\u7528\u6765\u7d2f\u52a0\u5904\u7406\u5668\u8fdb\u884ccontext switch\u7684\u6b21\u6570\uff0c\u4f1a\u5728\u51fd\u6570schedule\u547c\u53eb\u65f6\u8fdb\u884c\u7d2f\u52a0\uff0c\u5e76\u53ef\u4ee5\u901a\u8fc7\u51fd\u6570nr_context_switches\u7edf\u8ba1\u76ee\u524d\u6240\u6709\u5904\u7406\u5668\u603b\u5171\u7684context switch\u6b21\u6570\uff0c\u6216\u662f\u53ef\u4ee5\u900f\u8fc7\u67e5\u770b\u6587\u4ef6\/proc\/stat\u4e2d\u7684ctxt\u4f4d\u5f97\u77e5\u76ee\u524d\u6574\u4e2a\u7cfb\u7edf\u89e6\u53d1context switch\u7684\u6b21\u6570\u3002<br \/>\nstruct cfs_rq cfs\uff1a\u7528\u4e8e\u516c\u5e73\u8c03\u5ea6\u7684CFS\u8fd0\u884c\u961f\u5217\u3002<br \/>\nstruct rt_rq rt\uff1a\u7528\u4e8e\u5b9e\u65f6\u8fdb\u7a0b\u8c03\u5ea6\u7684\u8fd0\u884c\u961f\u5217\u3002<br \/>\nstruct list_head leaf_cfs_rq_list\uff1a\u76ee\u524dCPU\u4e0a\u53f6\u5b50cfs_rq\u7684\u5217\u8868\u3002<br \/>\nunsigned long nr_uninterruptible\uff1a\u4e4b\u524d\u5728\u8fd0\u884c\u961f\u5217\u4e2d\u800c\u73b0\u5728\u5904\u4e8e\u91cd\u5ea6\u7761\u7720\u72b6\u6001\u7684\u8fdb\u7a0b\u603b\u6570\u3002<br \/>\ntask_t *curr\uff1a\u6307\u5411\u672c\u5730CPU\u5f53\u524d\u6b63\u5728\u8fd0\u884c\u7684\u8fdb\u7a0b\u7684\u8fdb\u7a0b\u63cf\u8ff0\u7b26\uff0c\u5373current\u3002<br \/>\ntask_t *idle\uff1a\u6307\u5411\u672c\u5730CPU\u4e0a\u7684idle\u8fdb\u7a0b\u63cf\u8ff0\u7b26\u7684\u6307\u9488\u3002<br \/>\nunsigned long next_balance\uff1a\u57fa\u4e8e\u5904\u7406\u5668\u7684jiffies\u503c\uff0c\u7528\u4ee5\u8bb0\u5f55\u4e0b\u6b21\u8fdb\u884c\u5904\u7406\u5668balancing\u7684\u65f6\u95f4\u70b9\u3002<br \/>\nstruct mm_struct *prev_mm\uff1a\u5728\u8fdb\u7a0b\u8fdb\u884c\u5207\u6362\u65f6\u7528\u6765\u5b58\u653e\u88ab\u66ff\u6362\u8fdb\u7a0b\u5185\u5b58\u63cf\u8ff0\u7b26\u7684\u5730\u5740\u3002<br \/>\nu64 clock\uff1a\u76ee\u524dCPU\u7684\u65f6\u949f\u503c\u3002<br \/>\nint cpu\uff1a\u672c\u8fd0\u884c\u961f\u5217\u5bf9\u5e94\u7684CPU<br \/>\n\u6700\u540e\u662f\u8c03\u5ea6\u7684\u4e00\u4e2a\u4e9b\u7edf\u8ba1\u4fe1\u606f\uff0c\u5305\u62ecsys_sched_yield()\u3001schedule()\u3001try_to_wake_up()\u7684\u7edf\u8ba1\u4fe1\u606f\u3002\u6ce8\u610f\u73b0\u5728rq\u7ed3\u6784\u4e2d\u5df2\u7ecf\u6ca1\u6709active\/expire\u6570\u7ec4\u4e86\uff0c\u56e0\u6b64\u73b0\u5728rq\u7ed3\u6784\u5e76\u4e0d\u76f4\u63a5\u7ef4\u62a4\u8fdb\u7a0b\u961f\u5217\uff0c\u5bf9CFS\u8fdb\u7a0b\u961f\u5217\u7531\u7ea2\u9ed1\u6811\u6765\u7ef4\u62a4\uff08\u5bf9\u5b9e\u65f6\u8c03\u5ea6\u5219\u4ecd\u4f7f\u7528\u7ec4\u94fe\u8868\uff09\uff0c\u5e76\u4e14\u4ee5\u65f6\u95f4\u4e3a\u987a\u5e8f\u3002rq\u7ed3\u6784\u4e2d\u7684cfs\u7ed3\u6784\u6709\u6307\u5411\u7ea2\u9ed1\u6811\u7684\u6839\u7ed3\u70b9\uff0c\u7531\u6b64\u53ef\u4ee5\u8bbf\u95ee\u5230\u7ea2\u9ed1\u6811\u3002<br \/>\n\uff085\uff09CFS\u8fd0\u884c\u961f\u5217\uff1astruct cfs_rq<br \/>\n\u8be5\u7ed3\u6784\u5728kernel\/sched.c\u4e2d\uff0c\u662f\u7528\u4e8eCFS\u8c03\u5ea6\u7684\u8fd0\u884c\u961f\u5217\u3002\u5bf9\u4e8e\u6bcf\u4e2a\u8fd0\u884c\u961f\u5217\u4fe1\u606f\uff0c\u90fd\u63d0\u4f9b\u4e86\u4e00\u4e2acfs_rq\u7ed3\u6784\u6765\u4fdd\u5b58\u76f8\u5173\u7ea2\u9ed1\u6811\u7684\u4fe1\u606f\u3002<\/p>\n<div class=\"dp-highlighter bg_cpp\">\n<div class=\"bar\">\n<div class=\"tools\"><strong>[cpp]<\/strong>\u00a0<a class=\"ViewSource\" title=\"view plain\" href=\"http:\/\/blog.csdn.net\/zhoudaxia\/article\/details\/7375668#\" target=\"_blank\" rel=\"noopener noreferrer\">view plain<\/a>\u00a0<a class=\"CopyToClipboard\" title=\"copy\" href=\"http:\/\/blog.csdn.net\/zhoudaxia\/article\/details\/7375668#\" target=\"_blank\" rel=\"noopener noreferrer\">copy<\/a><\/p>\n<div><embed id=\"ZeroClipboardMovie_5\" src=\"https:\/\/csdnimg.cn\/public\/highlighter\/ZeroClipboard.swf\" type=\"application\/x-shockwave-flash\" width=\"15\" height=\"16\" align=\"middle\" name=\"ZeroClipboardMovie_5\" data-mce-fragment=\"1\"><\/embed><\/div>\n<div><embed id=\"ZeroClipboardMovie_11\" src=\"https:\/\/csdnimg.cn\/public\/highlighter\/ZeroClipboard.swf\" type=\"application\/x-shockwave-flash\" width=\"15\" height=\"16\" align=\"middle\" name=\"ZeroClipboardMovie_11\" data-mce-fragment=\"1\"><\/embed><\/div>\n<\/div>\n<\/div>\n<ol class=\"dp-cpp\">\n<li class=\"alt\"><span class=\"keyword\">struct<\/span>\u00a0cfs_rq\u00a0{<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0load_weight\u00a0load;\u00a0\u00a0<span class=\"comment\">\/*\u00a0\u8fd0\u884c\u8d1f\u8f7d\u00a0*\/<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">long<\/span>\u00a0nr_running;\u00a0\u00a0<span class=\"comment\">\/*\u00a0\u8fd0\u884c\u8fdb\u7a0b\u4e2a\u6570\u00a0*\/<\/span><\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0u64\u00a0exec_clock;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0u64\u00a0min_vruntime;\u00a0\u00a0<span class=\"comment\">\/*\u00a0\u4fdd\u5b58\u7684\u6700\u5c0f\u8fd0\u884c\u65f6\u95f4\u00a0*\/<\/span><\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0rb_root\u00a0tasks_timeline;\u00a0\u00a0<span class=\"comment\">\/*\u00a0\u8fd0\u884c\u961f\u5217\u6811\u6839\u00a0*\/<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0rb_node\u00a0*rb_leftmost;\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/*\u00a0\u4fdd\u5b58\u7684\u7ea2\u9ed1\u6811\u6700\u5de6\u8fb9\u7684\u8282\u70b9\uff0c\u8fd9\u4e2a\u4e3a\u6700\u5c0f\u8fd0\u884c\u65f6\u95f4\u7684\u8282\u70b9\uff0c<\/span><\/li>\n<li><span class=\"comment\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u5f53\u8fdb\u7a0b\u9009\u62e9\u4e0b\u4e00\u4e2a\u6765\u8fd0\u884c\u65f6\uff0c\u76f4\u63a5\u9009\u62e9\u8fd9\u4e2a\u00a0*\/<\/span><\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0list_head\u00a0tasks;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0list_head\u00a0*balance_iterator;<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/*<\/span><\/li>\n<li><span class=\"comment\">\u00a0\u00a0\u00a0\u00a0\u00a0*\u00a0&#8216;curr&#8217;\u6307\u9488\u6307\u5411\u672ccfs_rq\u4e0a\u5f53\u524d\u6b63\u5728\u8fd0\u884c\u7684\u8fdb\u7a0b\uff0c\u5982\u679c\u672ccfs_rq\u4e0a\u6ca1\u6709\u6b63\u5728\u8fd0\u884c\u7684\u8fdb\u7a0b\uff0c\u5219\u6307\u5411NULL<\/span><\/li>\n<li class=\"alt\"><span class=\"comment\">\u00a0\u00a0\u00a0\u00a0\u00a0*\/<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0sched_entity\u00a0*curr,\u00a0*next,\u00a0*last;<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">int<\/span>\u00a0nr_spread_over;<\/li>\n<li class=\"alt\"><\/li>\n<li><span class=\"preprocessor\">#ifdef\u00a0CONFIG_FAIR_GROUP_SCHED\u00a0<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0rq\u00a0*rq;\u00a0\u00a0<span class=\"comment\">\/*\u00a0\u672ccfs_rq\u5173\u8054\u7684\u8fd0\u884c\u961f\u5217\u00a0*\/<\/span><\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/*\u00a0\u53f6\u5b50cfs_rqs\u662f\u90a3\u4e9b\u5c42\u6b21\u4e2d\u6700\u5e95\u5c42\u7684\u53ef\u8c03\u5ea6\u5b9e\u4f53\uff0c\u5b83\u4eec\u6301\u6709\u8fdb\u7a0b\u3002\u975e\u53f6\u5b50lrqs\u6301\u6709\u5176\u4ed6\u66f4\u9ad8\u5c42\u7684\u53ef\u8c03\u7528\u5b9e\u4f53\uff08\u4f8b\u5982\u7528\u6237\uff0c\u5bb9\u5668\u7b49\uff09<\/span><\/li>\n<li><span class=\"comment\">\u00a0\u00a0\u00a0\u00a0\u00a0*\u00a0leaf_cfs_rq_list\u7528\u6765\u628a\u4e00\u4e2aCPU\u4e0a\u7684\u53f6\u5b50cfs_rq\u5217\u8868\u4e32\u7ed3\u6210\u4e00\u4e2a\u5217\u8868\uff0c\u8fd9\u4e2a\u5217\u8868\u88ab\u7528\u5728\u8d1f\u8f7d\u5e73\u8861\u4e2d<\/span><\/li>\n<li class=\"alt\"><span class=\"comment\">\u00a0\u00a0\u00a0\u00a0\u00a0*\/<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0list_head\u00a0leaf_cfs_rq_list;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0task_group\u00a0*tg;\u00a0\u00a0<span class=\"comment\">\/*\u00a0\u62e5\u6709\u672c\u8fd0\u884c\u961f\u5217\u7684\u7ec4\u00a0*\/<\/span><\/li>\n<li><\/li>\n<li class=\"alt\"><span class=\"preprocessor\">#ifdef\u00a0CONFIG_SMP\u00a0<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/*<\/span><\/li>\n<li class=\"alt\"><span class=\"comment\">\u00a0\u00a0\u00a0\u00a0\u00a0*\u00a0\u7531\u8fdb\u7a0b\u8d21\u732e\u7684load.weight\u90e8\u5206<\/span><\/li>\n<li><span class=\"comment\">\u00a0\u00a0\u00a0\u00a0\u00a0*\/<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">long<\/span>\u00a0task_weight;<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/*<\/span><\/li>\n<li><span class=\"comment\">\u00a0\u00a0\u00a0\u00a0\u00a0*\u00a0\u00a0\u00a0h_load\u00a0=\u00a0weight\u00a0*\u00a0f(tg)<\/span><\/li>\n<li class=\"alt\"><span class=\"comment\">\u00a0\u00a0\u00a0\u00a0\u00a0*\u00a0\u5176\u4e2df(tq)\u8868\u793a\u5206\u914d\u7ed9\u7ec4\u7684\u8fed\u4ee3\u6743\u91cd\u503c<\/span><\/li>\n<li><span class=\"comment\">\u00a0\u00a0\u00a0\u00a0\u00a0*\/<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">long<\/span>\u00a0h_load;<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/*<\/span><\/li>\n<li><span class=\"comment\">\u00a0\u00a0\u00a0\u00a0\u00a0*\u00a0this\u00a0cpu&#8217;s\u00a0part\u00a0of\u00a0tg-&gt;shares<\/span><\/li>\n<li class=\"alt\"><span class=\"comment\">\u00a0\u00a0\u00a0\u00a0\u00a0*\/<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">long<\/span>\u00a0shares;<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/*<\/span><\/li>\n<li class=\"alt\"><span class=\"comment\">\u00a0\u00a0\u00a0\u00a0\u00a0*\u00a0load.weight\u00a0at\u00a0the\u00a0time\u00a0we\u00a0set\u00a0shares<\/span><\/li>\n<li><span class=\"comment\">\u00a0\u00a0\u00a0\u00a0\u00a0*\/<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">long<\/span>\u00a0rq_weight;<\/li>\n<li><span class=\"preprocessor\">#endif\u00a0<\/span><\/li>\n<li class=\"alt\"><span class=\"preprocessor\">#endif\u00a0<\/span><\/li>\n<li>};<\/li>\n<\/ol>\n<\/div>\n<pre><code class=\"language-cpp hljs\"><\/code><\/pre>\n<ol class=\"hljs-ln\">\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"1\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">cfs_rq<\/span> {<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"2\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">load_weight<\/span> <span class=\"hljs-title\">load<\/span>;<\/span> <span class=\"hljs-comment\">\/* \u8fd0\u884c\u8d1f\u8f7d *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"3\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">long<\/span> nr_running; <span class=\"hljs-comment\">\/* \u8fd0\u884c\u8fdb\u7a0b\u4e2a\u6570 *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"4\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"5\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 exec_clock;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"6\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">u64 min_vruntime; <span class=\"hljs-comment\">\/* \u4fdd\u5b58\u7684\u6700\u5c0f\u8fd0\u884c\u65f6\u95f4 *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"7\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"8\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">rb_root<\/span> <span class=\"hljs-title\">tasks_timeline<\/span>;<\/span> <span class=\"hljs-comment\">\/* \u8fd0\u884c\u961f\u5217\u6811\u6839 *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"9\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">rb_node<\/span> *<span class=\"hljs-title\">rb_leftmost<\/span>;<\/span> <span class=\"hljs-comment\">\/* \u4fdd\u5b58\u7684\u7ea2\u9ed1\u6811\u6700\u5de6\u8fb9\u7684\u8282\u70b9\uff0c\u8fd9\u4e2a\u4e3a\u6700\u5c0f\u8fd0\u884c\u65f6\u95f4\u7684\u8282\u70b9\uff0c<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"10\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\"> \u5f53\u8fdb\u7a0b\u9009\u62e9\u4e0b\u4e00\u4e2a\u6765\u8fd0\u884c\u65f6\uff0c\u76f4\u63a5\u9009\u62e9\u8fd9\u4e2a *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"11\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"12\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">list_head<\/span> <span class=\"hljs-title\">tasks<\/span>;<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"13\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">list_head<\/span> *<span class=\"hljs-title\">balance_iterator<\/span>;<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"14\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"15\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\">\/*<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"16\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\"> * &#8216;curr&#8217;\u6307\u9488\u6307\u5411\u672ccfs_rq\u4e0a\u5f53\u524d\u6b63\u5728\u8fd0\u884c\u7684\u8fdb\u7a0b\uff0c\u5982\u679c\u672ccfs_rq\u4e0a\u6ca1\u6709\u6b63\u5728\u8fd0\u884c\u7684\u8fdb\u7a0b\uff0c\u5219\u6307\u5411NULL<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"17\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\"> *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"18\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">sched_entity<\/span> *<span class=\"hljs-title\">curr<\/span>, *<span class=\"hljs-title\">next<\/span>, *<span class=\"hljs-title\">last<\/span>;<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"19\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"20\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">int<\/span> nr_spread_over;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"21\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"22\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">ifdef<\/span> CONFIG_FAIR_GROUP_SCHED<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"23\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">rq<\/span> *<span class=\"hljs-title\">rq<\/span>;<\/span> <span class=\"hljs-comment\">\/* \u672ccfs_rq\u5173\u8054\u7684\u8fd0\u884c\u961f\u5217 *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"24\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"25\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\">\/* \u53f6\u5b50cfs_rqs\u662f\u90a3\u4e9b\u5c42\u6b21\u4e2d\u6700\u5e95\u5c42\u7684\u53ef\u8c03\u5ea6\u5b9e\u4f53\uff0c\u5b83\u4eec\u6301\u6709\u8fdb\u7a0b\u3002\u975e\u53f6\u5b50lrqs\u6301\u6709\u5176\u4ed6\u66f4\u9ad8\u5c42\u7684\u53ef\u8c03\u7528\u5b9e\u4f53\uff08\u4f8b\u5982\u7528\u6237\uff0c\u5bb9\u5668\u7b49\uff09<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"26\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\"> * leaf_cfs_rq_list\u7528\u6765\u628a\u4e00\u4e2aCPU\u4e0a\u7684\u53f6\u5b50cfs_rq\u5217\u8868\u4e32\u7ed3\u6210\u4e00\u4e2a\u5217\u8868\uff0c\u8fd9\u4e2a\u5217\u8868\u88ab\u7528\u5728\u8d1f\u8f7d\u5e73\u8861\u4e2d<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"27\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\"> *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"28\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">list_head<\/span> <span class=\"hljs-title\">leaf_cfs_rq_list<\/span>;<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"29\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">task_group<\/span> *<span class=\"hljs-title\">tg<\/span>;<\/span> <span class=\"hljs-comment\">\/* \u62e5\u6709\u672c\u8fd0\u884c\u961f\u5217\u7684\u7ec4 *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"30\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"31\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">ifdef<\/span> CONFIG_SMP<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"32\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\">\/*<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"33\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\"> * \u7531\u8fdb\u7a0b\u8d21\u732e\u7684load.weight\u90e8\u5206<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"34\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\"> *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"35\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">long<\/span> task_weight;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"36\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"37\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\">\/*<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"38\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\"> * h_load = weight * f(tg)<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"39\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\"> * \u5176\u4e2df(tq)\u8868\u793a\u5206\u914d\u7ed9\u7ec4\u7684\u8fed\u4ee3\u6743\u91cd\u503c<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"40\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\"> *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"41\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">long<\/span> h_load;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"42\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"43\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\">\/*<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"44\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\"> * this cpu&#8217;s part of tg-&gt;shares<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"45\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\"> *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"46\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">long<\/span> shares;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"47\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"48\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\">\/*<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"49\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\"> * load.weight at the time we set shares<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"50\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\"> *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"51\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">long<\/span> rq_weight;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"52\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">endif<\/span><\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"53\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">endif<\/span><\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"54\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">};<\/div>\n<\/div>\n<\/li>\n<\/ol>\n<pre><code class=\"language-cpp hljs\"><\/code><\/pre>\n<p>\u5176\u4e2d\u6709\u7ea2\u9ed1\u6811\u7684\u6839\u7ed3\u70b9\u3001\u6307\u5411\u5f53\u524d\u961f\u5217\u4e0a\u6b63\u5728\u8fd0\u884c\u8fdb\u7a0b\u7684curr\uff0c\u7528\u4e8e\u8d1f\u8f7d\u5e73\u8861\u7684\u53f6\u5b50\u961f\u5217leaf_cfs_rq_list\uff0c\u8d21\u732e\u7684\u8d1f\u8f7d\u6743\u91cd\u503ctask_weight\u7b49\u3002<br \/>\n\uff086\uff09\u7ea2\u9ed1\u6811\u7ed3\u70b9\uff1astruct rb_node, struct rb_root&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<div class=\"dp-highlighter bg_cpp\">\n<div class=\"bar\">\n<div class=\"tools\"><strong>[cpp]<\/strong>\u00a0<a class=\"ViewSource\" title=\"view plain\" href=\"http:\/\/blog.csdn.net\/zhoudaxia\/article\/details\/7375668#\" target=\"_blank\" rel=\"noopener noreferrer\">view plain<\/a>\u00a0<a class=\"CopyToClipboard\" title=\"copy\" href=\"http:\/\/blog.csdn.net\/zhoudaxia\/article\/details\/7375668#\" target=\"_blank\" rel=\"noopener noreferrer\">copy<\/a><\/p>\n<div><embed id=\"ZeroClipboardMovie_6\" src=\"https:\/\/csdnimg.cn\/public\/highlighter\/ZeroClipboard.swf\" type=\"application\/x-shockwave-flash\" width=\"15\" height=\"16\" align=\"middle\" name=\"ZeroClipboardMovie_6\" data-mce-fragment=\"1\"><\/embed><\/div>\n<div><embed id=\"ZeroClipboardMovie_12\" src=\"https:\/\/csdnimg.cn\/public\/highlighter\/ZeroClipboard.swf\" type=\"application\/x-shockwave-flash\" width=\"15\" height=\"16\" align=\"middle\" name=\"ZeroClipboardMovie_12\" data-mce-fragment=\"1\"><\/embed><\/div>\n<\/div>\n<\/div>\n<ol class=\"dp-cpp\">\n<li class=\"alt\"><span class=\"keyword\">struct<\/span>\u00a0rb_node<\/li>\n<li>{<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0unsigned\u00a0<span class=\"datatypes\">long<\/span>\u00a0\u00a0rb_parent_color;<\/li>\n<li><span class=\"preprocessor\">#define\u00a0RB_RED\u00a0\u00a0\u00a0\u00a0\u00a0\u00a00\u00a0<\/span><\/li>\n<li class=\"alt\"><span class=\"preprocessor\">#define\u00a0RB_BLACK\u00a0\u00a0\u00a0\u00a01\u00a0<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0rb_node\u00a0*rb_right;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0rb_node\u00a0*rb_left;<\/li>\n<li>}\u00a0__attribute__((aligned(<span class=\"keyword\">sizeof<\/span>(<span class=\"datatypes\">long<\/span>))));<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/*\u00a0The\u00a0alignment\u00a0might\u00a0seem\u00a0pointless,\u00a0but\u00a0allegedly\u00a0CRIS\u00a0needs\u00a0it\u00a0*\/<\/span><\/li>\n<li><\/li>\n<li class=\"alt\"><span class=\"keyword\">struct<\/span>\u00a0rb_root<\/li>\n<li>{<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">struct<\/span>\u00a0rb_node\u00a0*rb_node;<\/li>\n<li>};<\/li>\n<\/ol>\n<\/div>\n<pre><code class=\"language-cpp hljs\"><\/code><\/pre>\n<ol class=\"hljs-ln\">\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"1\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">rb_node<\/span><\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"2\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">{<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"3\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">long<\/span> rb_parent_color;<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"4\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">define<\/span> RB_RED 0<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"5\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">define<\/span> RB_BLACK 1<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"6\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">rb_node<\/span> *<span class=\"hljs-title\">rb_right<\/span>;<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"7\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">rb_node<\/span> *<span class=\"hljs-title\">rb_left<\/span>;<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"8\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">} __attribute__((aligned(<span class=\"hljs-keyword\">sizeof<\/span>(<span class=\"hljs-keyword\">long<\/span>))));<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"9\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-comment\">\/* The alignment might seem pointless, but allegedly CRIS needs it *\/<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"10\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"11\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">rb_root<\/span><\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"12\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">{<\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"13\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title\">rb_node<\/span> *<span class=\"hljs-title\">rb_node<\/span>;<\/span><\/div>\n<\/div>\n<\/li>\n<li>\n<div class=\"hljs-ln-numbers\">\n<div class=\"hljs-ln-line hljs-ln-n\" data-line-number=\"14\"><\/div>\n<\/div>\n<div class=\"hljs-ln-code\">\n<div class=\"hljs-ln-line\">};<\/div>\n<\/div>\n<\/li>\n<\/ol>\n<pre><code class=\"language-cpp hljs\"><\/code><\/pre>\n<p>rb_node\u548crb_root\u7684\u5b9a\u4e49\u5728.\/linux\/include\/linux\/rbtree.h\u4e2d\uff0c\u5176\u4e2drb_root\u8868\u793a\u7ea2\u9ed1\u6811\u7684\u6839\u7ed3\u70b9\u3002\u7ea2\u9ed1\u6811\u7684\u5b9e\u73b0\u5728.\/linux\/lib\/rbtree.c\u4e2d\uff0c\u5305\u62ec\u63d2\u5165\u3001\u5220\u9664\u3001\u65cb\u8f6c\u3001\u904d\u5386\u7b49\u64cd\u4f5c\u3002<br \/>\n\u8fd8\u6709\u5f88\u591a\u5176\u4ed6\u7684\u6570\u636e\u7ed3\u6784\uff0c\u5982\u8c03\u5ea6\u57dfsche_domain\uff08\u5728include\/linux\/sched.h\u4e2d\uff09\u3001\u6839\u57dfroot_domain\uff08\u5728kernel\/sched.c\u4e2d\uff09\u3001\u4efb\u52a1\u7ec4task_group\uff08\u5728kernel\/sched.c\u4e2d\uff09\u7b49\uff0c\u8fd9\u91cc\u4e0d\u4e00\u4e00\u4ecb\u7ecd\u4e86\u3002<br \/>\n\u6211\u4eec\u53ef\u4ee5\u4ece\u8bbe\u8ba1\u5c42\u9762\u6765\u603b\u7ed3Linux\u8fdb\u7a0b\u8c03\u5ea6\u4e00\u4e9b\u8bbe\u8ba1\u601d\u60f3\uff1a<br \/>\n\u628a\u8fdb\u7a0b\u62bd\u8c61\u6210\u8fdb\u7a0b\u63cf\u8ff0\u7b26task_struct\uff1a\u5305\u542b\u8fdb\u7a0b\u6240\u5fc5\u9700\u7684\u6570\u636e\uff0c\u5982\u72b6\u6001\u4fe1\u606f\u3001\u8c03\u5ea6\u4fe1\u606f\u3001\u4f18\u5148\u7ea7\u4fe1\u606f\u3001\u5185\u5b58\u9875\u4fe1\u606f\u7b49\u3002<br \/>\n\u628a\u9700\u8981\u8c03\u5ea6\u7684\u4e1c\u897f\u62bd\u8c61\u6210\u8c03\u5ea6\u5b9e\u4f53sched_entity\uff1a\u8c03\u5ea6\u5b9e\u4f53\u53ef\u4ee5\u662f\u8fdb\u7a0b\u3001\u8fdb\u7a0b\u7ec4\u3001\u7528\u6237\u7b49\u3002\u8fd9\u91cc\u5305\u542b\u8d1f\u8f7d\u6743\u91cd\u503c\u3001\u5bf9\u5e94\u7ea2\u9ed1\u6811\u7ed3\u70b9\u3001\u865a\u62df\u8fd0\u884c\u65f6vruntime\u7b49\u3002<br \/>\n\u628a\u8c03\u5ea6\u7b56\u7565\uff08\u7b97\u6cd5\uff09\u62bd\u8c61\u6210\u8c03\u5ea6\u7c7bsched_class\uff1a\u5305\u542b\u4e00\u7ec4\u901a\u7528\u7684\u8c03\u5ea6\u64cd\u4f5c\u63a5\u53e3\uff0c\u5c06\u63a5\u53e3\u548c\u5b9e\u73b0\u5206\u79bb\u3002\u4f60\u53ef\u4ee5\u6839\u636e\u8fd9\u7ec4\u63a5\u53e3\u5b9e\u73b0\u4e0d\u540c\u7684\u8c03\u5ea6\u7b97\u6cd5\uff0c\u4f7f\u5f97\u4e00\u4e2aLinux\u8c03\u5ea6\u7a0b\u5e8f\u53ef\u4ee5\u6709\u591a\u4e2a\u4e0d\u540c\u7684\u8c03\u5ea6\u7b56\u7565\u3002<br \/>\n\u628a\u8c03\u5ea6\u7684\u7ec4\u7ec7\u62bd\u8c61\u6210\u53ef\u8fd0\u884c\u961f\u5217rq\uff1a\u5305\u542b\u81ea\u65cb\u9501\u3001\u8fdb\u7a0b\u6570\u91cf\u3001\u7528\u4e8e\u516c\u5e73\u8c03\u5ea6\u7684CFS\u4fe1\u606f\u7ed3\u6784\u3001\u5f53\u524d\u6b63\u5728\u8fd0\u884c\u7684\u8fdb\u7a0b\u63cf\u8ff0\u7b26\u7b49\u3002\u5b9e\u9645\u7684\u8fdb\u7a0b\u961f\u5217\u7528\u7ea2\u9ed1\u6811\u6765\u7ef4\u62a4\uff08\u901a\u8fc7CFS\u4fe1\u606f\u7ed3\u6784\u6765\u8bbf\u95ee\uff09\u3002<br \/>\n\u628aCFS\u8c03\u5ea6\u7684\u8fd0\u884c\u961f\u5217\u4fe1\u606f\u62bd\u8c61\u6210cfs_rq\uff1a\u5305\u542b\u7ea2\u9ed1\u6811\u7684\u6839\u7ed3\u70b9\u3001\u6b63\u5728\u8fd0\u884c\u7684\u8fdb\u7a0b\u6307\u9488\u3001\u7528\u4e8e\u8d1f\u8f7d\u5e73\u8861\u7684\u53f6\u5b50\u961f\u5217\u7b49<\/p><\/div>\n<\/div>\n<\/div>\n<\/article>\n","protected":false},"excerpt":{"rendered":"<p>\u539f\u6587\u5730\u5740 \u00a0\u00a01. \u6982\u8ff0 \u00a0\u00a0 \u00a0\u5bf9\u4e8e\u5206<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","footnotes":""},"categories":[],"tags":[119],"class_list":["post-4695","post","type-post","status-publish","format-standard","hentry","tag-03-"],"_links":{"self":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts\/4695","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/comments?post=4695"}],"version-history":[{"count":0,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts\/4695\/revisions"}],"wp:attachment":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/media?parent=4695"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/categories?post=4695"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/tags?post=4695"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}