From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751962Ab1GTNoQ (ORCPT ); Wed, 20 Jul 2011 09:44:16 -0400 Received: from wega.rz.tu-ilmenau.de ([141.24.4.159]:44603 "EHLO wega.rz.tu-ilmenau.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751243Ab1GTNoO (ORCPT ); Wed, 20 Jul 2011 09:44:14 -0400 X-Greylist: delayed 393 seconds by postgrey-1.27 at vger.kernel.org; Wed, 20 Jul 2011 09:44:13 EDT Message-ID: <4E26DB41.9070002@tu-ilmenau.de> Date: Wed, 20 Jul 2011 15:42:25 +0200 From: =?ISO-8859-1?Q?Stephan_B=E4rwolf?= Reply-To: stephan.baerwolf@tu-ilmenau.de Organization: TU-Ilmenau User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.17) Gecko/20110622 Lightning/1.0b3pre Thunderbird/3.1.10 MIME-Version: 1.0 To: linux-kernel@vger.kernel.org CC: Ingo Molnar , ncrao@google.com Subject: sched: fix/optimise some issues Content-Type: multipart/mixed; boundary="------------080702030304070707090308" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is a multi-part message in MIME format. --------------080702030304070707090308 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit After reviewing the kernels processscheduler I have found three issues. I am not 100% sure, but I think they are worth patching. (see attached patch 0001 to 0003) - These patches are agains 3.0-rc7. I also implemented an 128bit vruntime support: Majorly on systems with many tasks and (for example) deep cgroups (or increased NICE0_LOAD/ SCHED_LOAD_SCALE as in commit c8b281161dfa4bb5d5be63fb036ce19347b88c63), a weighted timeslice (unsigned long) can become very large (on x86_64) and consumes a large part of the u64 vruntimes (per tick) when added. This might lead to missscheduling because of overflows. The patches (as single files or as a one file blockpatch) in the bz2-files mainly intruduce code (and a Kconfig) to switch to a 128bit vruntime on x86_64 (of course with a little overhead) or limiting a virtual timeslice. These patches are also "tidying up" the code around vruntimes by abstracting it into seperate files and types, which also makes further coding easier and simplifies debugging. For example vruntimes are stored into sched_vruntime_t type instead u64 after patching. Please see for your own (and excuse the direct export from my local git)... The bz2-patches are working against 2.6.39.3. Best regards, Stephan -- Dipl.-Inf. Stephan Bärwolf Ilmenau University of Technology, Integrated Communication Systems Group Phone: +49 (0)3677 69 4130 Email: stephan.baerwolf@tu-ilmenau.de, Web: http://www.tu-ilmenau.de/iks --------------080702030304070707090308 Content-Type: application/x-bzip; name="vruntime128bitpatches_single.tar.bz2" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="vruntime128bitpatches_single.tar.bz2" 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 zogf/xdyRThQkFG1T3g= --------------080702030304070707090308 Content-Type: application/x-bzip; name="vruntime128bitpatches_oneblock.bz2" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="vruntime128bitpatches_oneblock.bz2" QlpoOTFBWSZTWeH5I6gAOs5fgH99+/////////+/////YEe86CgFrXd2sN05xfWb51Z2j2b3 3ad6UE23rBSkXK3cdD7xqd7d33LFfOfWn0D0NWPnnlD77zz4+ee+vPWa9QPkPoNdHXu43vd7 59YPrWKASSU1RqdHThsA2aa1WFd2U6rWo9MV1vtPVXPR572FPt7vdjnzN2zt3c620bvt72kD MrR2xLsGlT7HU5bBX3ZbnK+29NK++lnEr2ybfe9PQ+755Le59d7MLXuB6c7e7eEoQIAE000m TEAmmmmmJGaaQSb1TZPKjTajCZNNADQGmhNNBNEJoE1PUxGlD9KfqnpMEwNQHqB5TAIzUGQ0 yaBKZCEIgI1E8p6m01Gj0E9JpiGmho0GjQAAA0BoBJpJEEAJqabRMRpoUntNJvSp5T/VTyT0 9KbSaaehqPUGgDRoMQRJCE1MInpBMqen5KnsaTCNBo1T9NSbSPBIzU9PRNT1DJpp6I2oESRA IBGQmRMIyRoZD1U/SnqeajUDQ/UjQGIABo09TrIck9dsWQEQWKKetCVIKSUhGEKSTy9X9n79 tY1dfv2Nkwmtn/we+jodDRJSXoVKUCA9t7wL59RO38IfxPlHOvgzzXEnBcIssqx2q48DMYaG l1bl00RfsuzJtDUejISmiijocRpSZG5dZh/XYbTNoJcVZlMStQeosP7wHWrshIYyLIYkwXC2 20zMuZlhauW4W3Ey2GOSGRUWIg9j/Ofy/qP6WLdReCJOHHMiska+D9/b+7g6uq4+O4GiXKnD ue97PKkHgElBy5qpTnSXqTA60aG9hksMtMW5lsD4XNUbo84hKAxA0WDrMYZtZk1bbpUWBhhc ZBzMuCZgBbVXBsSttmNmXCijgtzDBVhcGIwyKsYYFm1sRjfNmmSIgpsl2DLhu6chZY6Mxtwz Au2TRFBZjtsFTC7u0lSXFZoQwy5ltwwSCsuUmQqorMEoiTbUHamxoVRY7ZQETaH9xwv4Hb+Y 8Hg6c5MlEntKaKvFbfxzKgzS6XOvax4/pNC4U6alk+wsBZr19q4poUmd836pR0NH91UOdTD9 X4QOtVmSK0CsJb3NKpU91NHPm76WZUizIxTiazclqkS7gilytPTrltJ9anXfQM8mcmKL/Zab b02JmSe+XNFKlFUkXMeOT7sZomNhHCiVeehIcusdishm/6vH4280IKIS3kw8zt+36SKBxrlb 5uQp4U5F6perOCDmVdeL0VF9ULtsihVIjBqPlW/sOOLx7zDgJpNKqfO66Gqa6BZJrsTtONhg bXR6MW0TXkIX33+h/fcLGypUH834JwHpXQYJ6/PtFAHw1Dp69sOW1YihOecT+j7LzH+1rPFw iIGSrk9ba1pbmdDQ1hF8COU1x/P1mHHHxvOZKbcY/8OjjW7NV8G8FX6ZHDcTfR5sReTbwcIv HOvnIe6AW29TTnisCtTkoRvR8FXvQHf04jxxj6HwSPKkFezEyKnXjEqZq3W5s8ZW9jGag7LS bP0vIQXjtCaA8VF4s2RFiyWnbU5EGXgQORYX+RyMOvKlfcepFqghQywU9WlEIKC4WxR6Ha4r ay4xLbxc/pu7tabgEhJLJK7V1Ls81Q0L85kkAlCQc/tuM0IBTNGObBvM+PwvzA9VN2o2D0ID kML2du8ANR541R8xEFunx48aCKOK3suyc3ub4+zjx87CXjyE6KHdnMiapdR6HWFdICCU2pMT Zl3e27vw0G72dX8X4eD7/u9CZ6Kex9/t355GrWrGtXatEOU5m9OchYm1TWK9m8R6YTw0zS4l LEolt44Ux5+4fFd/G4jMubkNiCM55XMR3rwfEZGbV3MCR30uCaYbCiV1xAAiVUL2e0oDrJMg zCMoN4aPV79tx6n7Hs7WvYblA4iCMP7UqRZ+lzWq7qCiXJJ2+ZnYC8JHHaplzPk/PHf9flbH dsuvknzvw7NjcprLTDDJbO3WBT8rNaEUsRRT7lBOTfV27uVe3LpV0mKn2t6VljP9YW8laGj8 ppDpwpQV3Fxpil6GjBnNraaeTc8eibRn10NPBF+Bxwqqb71qc0+21jWYVVobSiWle/LScO/7 t+e3H48KvuEV/FftgAm6CrIEggWIiuImLGZBLMibsUgFlFdcZQSwqB8FIfP1UeKI3iHc7Wm4 0erxoTgp3l/l0G+E0J8YyiHrYaMO/NhLA83lrT6eOUuTbZGHOg/3xb9xXCNmHZgfaecTlKHL t6Qs32vNkJgiMEVFZfK5IJEte1iEQirIEINDCu1yw9PZ/Z5PvwNgDrnS9J8jKtvu6szwr99V iWhpP1y6YNGWadVT8/ewSXmkqnrsalZ2i+OEUSmBOmvxLz2LxkwoYKMEiIqkERSVPf1TriLP xQCk7PL7PtGPeCgOrQz+UsDxS3UoqKn9/7D4mkoMxjYdppHn5oB+KbWBNRB7nqI4VyupsGsZ m/g7l7q6MaEuxjZCcr7LLQ3+lwdS3zFhj1WY2uwrSSInocMH/qZ6B9iQQZy3e7cDnz3fAt1P Y6WKX5jkGbkimVFzGgRpkAffY2Zx2ihDwPZ9PcfiPOCf45mVVVWtVb/Nv+jeb7Ssu+TEUUEQ 23pisI79W2vzemjxyivMzD1I24mudzS8Wt1ufRRXuXtqJ1tUKwJGCobPl9E2+78285g/9VpD bGSOQdwoaLgXEO1c4Hvex3vTOv8pBHHXHwpftR8I3Pv1w6uhpe+yr7pwYFGZVxNZcdsPg3Ab dcg7fiF9zOwYftT/6n+Tx9OwvD9T5LRoB6kioWXyI37SteYy5cHb7ms9P4wnMA5/b9GrJ6xm w5ysEVyKPvvYvxn3i9bQVpRS8w9k9ZDaQ74u3EwyUvHuORjO7vjE6Hw7vq84npX3aUE6ZqR2 +8fch7FXAZZA1C+dzg5j4tfb7GimcW2Hi/bUUZVZei71VLRC0tWilitXq/XKqd9M7EhqsfT1 6tefp2cvY/zKdW/WrkPiM/IXt/t8kOl4Gtc0EdQEXfaqj4DigXwKJhxX9CXMoSZkdWdDoxAU CpN30FaxQfXJy+zjgFJ8vUMAfWXnAjfTujyyIj1qGpoMajrcXZGlL/mjX0SY8LqgXTARSdpN a6dUyX9fn6sT17051OU1o4VXKcnMNDmc6AsFOZZc8XdDmir1HM0kgqTDOJ3qx/vuTqT3OMwd 7eY3fcdPfJOCoJEFQRoN0Zs4o3n3na4YRadvh91dnPjWn2UfbSZQvqL/OZl+eUQ6fbNUD0hd WXvR7+eP11/CRQlLJP79ekR8ECM1vXn8iDy7fuWW9mvoeSAwhSjos9+cukQuyqcdoJJIyEBQ cKFmFYStQNQ5uqD2cbfTzn0iRMGyBjCsZP1s2Zn632/N3fyGjp4d08O8URWRRoV8Ib9i2yMR vkYr4z60VBUWgpSt9GkVTOZmog9IPclsH+9FHsjgC2zW9K8hWZKlvlWlSGYSHRmsDwPXVE7V 0wQtyOo44S3e7vNHahqFJY369e7zMFleNZrawqs1XT2xBDfU4kfX58pqQU5EdoOMLf5cdHre t14anDfGHHa/i6uOwQZ2W2z0oRnuZ7nisjBY3GQSYsXTqOuGi8q1V2M/ZHyzgqe4Q1ki0uUQ HIMrGh5otjqSGINmSNktN3DTZvmKhQjNHKAVtCCAVj5XIjhDWMjJTRD+KzpT3mE4aA7jFudW TZW7Xh3vii7iYYsha5KiXYU2ZVWTsLexO5sTW6B3Si/MuJ0MwWhFFIdS6Y5MnnyXZtsiyUgj a5ByAqkqFy3Dcu0Z8We37+lJ3dEksnNhCRA3URtk5iE5+KiguOqoSmL1dNNjpq6DEyMk2FJe aLOl3XtmwWjbGjnz2Pyhu0VL62eajVM8te6CylDuSPMUYeg9VqyfHRdHZvM+XZqM3gPZNM6B SlKBhVue1hhLQt9LUMwwdeVY9aaY1QnuOZ77VlgbZtJAgOqO99xcWRdKAer0EHE6rF24UfSc qsqB8EglCEQjiUPjQVB8B003Q9sDwS9GTdFivdA0Ip5LMr3hAgb+cFww5BiAqhGHphk31eW2 JAxXyuLae/GPVXwq4cfN4X1YQVYNfMvnswCWYfPYKgo609DdwcQxu4nuTBTRaxvFqvXfY9GF JkkTpF4yGoB4OQqKV6urDifsryfFVV/qdn0qqr+L7lVVVVVVVe4Op+X8hDq5dfdJh2Xh+0h3 8Ak7lEUVEXBMZd3LK0zqsWVM8jUr8+amZJ6z7/CzQdtht09enC+/yPAwweRb6Hl367r4tE+T O6np47c7DhhWnJ96exvTRfZ4NmuxTYqrIG10TkDyWUkgkEPZu4o3HKivr4msE+oYhk6fll11 mqigPLbjiNk5XyljiXUcq3RwgyIqgW+hvQr4X00j8KZUu8NhyRtNTTiz3lJKzgV8VRo6RmLs CIWFaNDW91EDmjy3cWEezEfCDeyOjOi6y4unNUxP2M26NZe+jSFFTmpsNM8YQfHVOPOUihDc W9amAvR+jq6vHXJ3DzZxnYXQdOE4grEEYSSiM1McF/QPa1US6pOjQ+suRSBzC3xdQUa3xE3k yVK1Wh1UqxAOIncOryljSskBwqCgG1pppoZEJMOKXcmD1XDUsXvrFnBDw6cLaIaDhSQbiyXQ FSWcsLoEFofvsQhM+/b1w37XzaoZtigozcmmbivaadaXsExeT1UW5c/d1vlLBnLxXG+m1dc3 GCkiTofRy2NJTdGQV8n8etOmeXo4Hxa5Y3GsHZUTwio+0zOhyvUVtSRQWQ9fL27ZJl9Snq6C KXu651uwqOVUGZJGwywZxUazbuj+JCMCyE0aeTiad+3vDkRr3GK8uQzTQyrPcjA6k1s+MiyY V2vKOdTewu00Vw5teGte+LY0YXcr2kYQ8TtzznG3Xts5yd+YbyegJ6eJXg7CISTSI2Hc7iBt XsD+HGDleTjxUb0E8b2TrSl5GYmTikXWlikicV2nXu0Go7DNGmJqI52wKsq1qH3gii9AqMqn ywmSYsGO4TrMJweejYTpqU9GJ8Tspo8VTA5sHKpMTRGRhKSCUiX4NXJai3EzsU+6rCWVpCQa k/zykQsoFSjOt3OZVaqbY5oTStjTsonmKO/UXfGR2AxXdugq4Cg0RTRQa7/BFUmF9XHNRl8Q nWu7+XK9AJ0ZDjy9FZ8xyQ4uaQXpZWGNSKRDnlkPRKModQmZSf5nnAyQNMNiFpEmxF+JPUPf 0BiwY+n8ICA8y0T9GzByrV977HbHOhqUcvbQpyD/KXqtAJvZUWE7z1vKj9FUklXCaL0oQLbb negXx4rZatu5v5p7QJtL3heqMYOGbuxQidkgiegRT8L+bDKi5aOGQ/2/6zMdjZjcylFlC2Dt ZKkQQy2VkzLXDJUuXMLCggxxbWBgkoggVHpvt88kTl1ZB6Ojp5fBobJVLUQ8qTWf0hUvdpeX L3fOgXGCLBADg/a0iKCCeJPZ7qeXzE8TfzF69HDQsThkJofCgOykIfb7994EAqAfvgXI2947 tAjd/jB9cd/7D+0s/ul4co/3c6p/XoW9/x/a7z3vOutm/1e34Zd/SVKfqavAUYL2GQOKljkz Y/Kb1QehMfCr2FBDjKYOkihBF2KOKVYsfvkhw4ik7+aeZFk6TMmIbJV1HLyC94jgkPE+G6gk Qzb2yokNUKecSfW8hspmn6SNyK+fCcuJhIiKpaqJ7gUc4b0TUIJ6otWrtYo3E3cFHxsTPd57 jB0J4w5eP8eMXbtkvvrzjhAvvTIUkNt98StU4gyZHfy+39702fRo2KhqusF3mu99+zYLt3kH kqS1zU1u2OS1GJkFK6nVhU0AIHee+SbmO7TsckEcg1Kfn8a12JLWqP7RnY9h/3b2DpygcXai sykqCgqgii/VnhCHMbiTlrFTuFcp2+rtv9Z66IxoNhau6kD0QZEM4RHFQvpbfq7IH3de36q6 8xqV9fExsg3h1sTfXrmMdGx0c+lybWtteXrdYQfoddq/YOTz0OP5N1/mfsk9f2v/CL/2l+tT 2fTy50eg0mx3ame5jWLyP5FNikybGx1zzu1U7HncIs3vuKuWieeWZr/dHVOqpQaiQ98zNx9v 8UuKIZM1p+UOrzq00QcSUVVZWZLs6uL7arNdFlKQ7BPBmkPItfKz5/Z3ZsYfXD5RtBiFpa70 41jFepTzJxt5MeCS/f9SN0orCqo3ErORNnlD1LzH9HvwCmwc9d17Efsv4Pw+POG4QhdW/Kau tjdrkSnozahJKeNn6yW2HAyV+/yayLVMOWhgVB54rycHc3RKuqbtc3cKI3zPb3OKIaJ1OS/E IBWZz29S8Dgshu+6iUmWjuomFrU95hMfL9i9smPXPfD4ig81VGPP51rTdoJIKsnxFHpoEUIa Hu1M+G6BTXjO9C7vnKHz635dBvdlY1TQbt5TFa1Iq4K4IwRgr87Metedth21HHJaoR0WG+DD tonPs1nPfbWuPEXlypk7yi1g8s/cE9R52oIixUWIDCIxJFFiikFgwRBYioMFSKIoLIL/q7CB QOlg6RHu/8er57/29XdLZQ/jAA2h3InGAWOiAhUQ5SCB4SP2CgiRiBD5EYUAJn6z+N8Be7FG H10Kl1Hz8fTH14Ap/CI+2IasDebDCQkJCfHcfhEDf8qFU/v+/h7yZ6mR9vPKzEVOVT/LDVF6 9Xc4dcs87INU1M3z/PTo8NF2t2L0RDWVDKiiiJX1d5f535yaPKOPQj0lNoxd3YYO04WOWjNO 5D1QueUX3n4Fsu4nhl+kzKvDbjbqBLp4znNouEM8zR7SGOAKmoJkcRVyN93P2RzqiSY0GJRK 3Xeqdamh/g0dPNONs01lcvdvYon8sMxMeJA2kwNkTKvBlvcycrPZkjkj2zoGOnMlio8kVOBV GFUXGTJ6HOstKEpmF3mJdvMS1IYkHITLJTNSWTZ7bckOC7erf7W61f19bavyytpr2UF5ubxr fezWnO9Tkmr2hEsU3q5atHW0ixDM7ysVs5aRakh5q7vFZaFmSz0sbaaZVpeiVfI7Z0O831PG KrzQX5Yj5RaRilLMvn+MznT92ivk72qP+h6r9+abk0efThdlnnYqeAl3t8afbjh6V+7AE0IQ kn0wOAV9YI5o1cP6qitLCEhIIcoPIP/ND187pXkfCj7MZdRPsOzmH+KKiKMiJQ56RPbg5lzM ww3CcBkUUnIYJhzq/Y8FHlu7GSEPysNjgjubXOdKMguPMcQUdUCx58srM4WI6kVBRVWs2da2 oJ0CCXH/dadm50jtWufksrzOF/DA0b132MIu9jVQgxcIZMVLIIQKjJhLnPnd1Hu/uajqFv7S PN8d0hvhGddljqAsLFUy1va4RsO4rXQtWVXY5MD31RvhYV9CIlkCYFc/ovvIRFfp4XaBOV3u cK2Gj5RIHuDIX7IjII3BHwgjtz29vXxzY1MpzLlTLlnseHxa6zB52oSbTG2N/M8/fGUwnIND QNo2SDUEJZF+T1IoRJB8PhcDGACqEU/HLAf0j6MoyAskRCKGAfqpYTEDgZYZ/6pUXC0bZ/5H KAl/UEMfP37Qw6kQ67xVVRRRXBsBQeGaBuG24iIjjRERERERH5OIcAIUHi8ewNLySSSkO9NN hNgYMu77IHeBfR7ZxsjJIjX2OVfd7FkbZdJusGmyUXZ4nJXpieki/AYoJd00IMnkzL4kpOJ0 7a9s3l3CtQyKSdciAX1NowgWiMt+AFKN3yiMs5NXxXJtw9TsQI9NI6Ig02TqFFbPd0yEFFP3 ECZREDW3ouJo+4TXQS5lpppvdDliHPoVVUki0e/P9j8ETzosALlE3tbz3HVmZYoNI3JpLCDI kKAoY/UUS3aq1nDPzOFhVl6SrFIRECgXTzJAwF6uU1LynCi9wct3Ml6A6PQBtJdcqiIKxDUY cGhhUuZTeLs2It+ED3AMg2nNhlc96k0LX3awRHf0jcNwXrlqnoo2T/nHWLDbqLC217TNW4GZ 9AQeGBdBtx1zgCw4XOdC/FYDAjzNCaGwPqTKSgggEkkoCDVDrtdL0SEJ6spKdLk1nfffoVfv sfrx+LsZ0b9lP/VHpY67+HDfe064cwRnfSOZbuVK7lS+Xlhpbwtfp27CN9UMWnuWvdkTxSzk 77UvT3mm3iAJ6WWA6CKJQuQibcLUjdtDcTHcDoV6r9XPgF9ez9Ia+lkfBW/TnVdiT1POgV8u +kCBNdcak9OaIkEX64HZXwuAPs79/7+Vzz2xZNP0pSGu7nlXhn3Ch/B4e/fPTot2F1sZ8Lx0 X0ujuCCJraiIvXVATwwyi5nObIAK6ODlphliA9KQ1B3UXsGm2TY5gqZ3i9FNPsYvdIIzoYDP raHq/PEUo4q4emVSvYAF01LGOUQOgXW1sBIOYEGTgxZVl4ZqyXG1UrGIw3PbE1YwyxM4mZZ2 pWMrAazUWbTnerjnl3vDNNnAHkAowOFF0CEhSGMb76pji2t9iQ++IYIOwBAjABuUMON+AaYG /dfDLPwDzIeXqNxC9yDIxM4BaKhiAUdQkUa9+OOFvAFByrtpMNfg16h2FVnE0s+2XkrPHMmQ nF01tkOaNHOob6qEAhB0F1NGu4s1NbHbW2wQZKBHrhKya4q95q1pLitV02jhyQa3a5oNYqYq 0O+LIklyjyqIipgk3USYrYAK2qUmgjWmY0Y3eyyYI9oAVtg+voAgTSWc7bEHUbg1AXg5hRB1 MiT1pHjW+uavapaNKwCBKKpcnjNG4MRWXa9mQM8YtGllTAs9p0lKfMBodHp8tfYeTIJcoj/6 /rZiP6vxckhCR+GCWIYME4idZHznYA3czO3w43JB2wm6sG4jUa+m11jvbO+1BfVmZp80Zo81 1hfEj3H6VujdH3kRQqpnwqI3UCX6+u6KA9L0bjvou/qvNVA5YPpOUhD7jskwCgMsDtqpPdcR oXfzvNbuLihmUThj7Fcpavx54uRVSTRHNMwUfczvxBkmNFbv4T82mnPjw4v9vTpuSO0pNPxO lgo/0Y2rt8s775pDSLqQemv+Wxf/AlasXr5P5FoUSKsxQkYMKr+tfP5lElLKCCFYuyRKZ8Hh n0iC/T9b1PNMzNd4g9Z3j3Kj66gECEh6P5HC9xqKdeHX89A+iKdaH+XppXZ8X0y5eJJGVxxh jLP+MphcmBsAzaJJwPlpStAqcGDGTdDGGsLICh+x5/h7Z7R8D3TDuwfckH1pSlbIWXMMqUK5 RVCwQ9RicJlhSUnZ5SOx7n7wlemSfIowU6RAWCO3K6QNQEIRBUy/R6H8PM8az/EEAggH1iAf rrc+8J+z4+0L50/JfyTBJCE/P9EAND7HD6gpUxYoLfwGx/uo6f1EsnBzd5EuqHpu8rgaeReQ oPM/8ifunIuDYwPczqB8Jei20JNk+5S/71A1iNY1EcAAE7OCTd9ITMd0kJADbCohZYdCqOpn w0Lu8sXCBScwyQyQMBkGA+QNEEw3x8GxRTNiK7THqz60nsWJSvXe/UM0ejSM2zZKqDtw12+B OUN/CB/JzPQF8UGEDOhUoIpgYqtkw3Im1e0Hmi7zgZmoRNLckmiO9A95yDTBbYuIrvOCjjjQ 7Hon/RLlOCMQ3DiwkHw0E4RyRLnIdEueW1uJ5t0D5fb4CmfA3NgkhuYFQkgwDnibctxXMF1C Xbhru+/2NMROHi9P9C50Tr9NkE8j/v3GADZOG4Ye4oyAgQqnQ35IhSdaTEGLHApFmWDoIxey hA1WWAAIdhuA4F7teggQIRwXqusiJEadjQMhAweP9vmA4pii0Z4IJmrgkRAseWpCUGBqBh5l xMX0po9YZndJMwLo6iuhzYlJ7k9pgRdUb6hof756ENuqQK1SQgbj9oBYPA2P8XUul4lwTcFQ Ols35a753d3CKaCvQSM7WqzoibuBkFCR3I8DgCXuLzdqhLv5uGpqXUIGifcB60+iOxMJAHRZ JIQ6h6E0IJcibMqRAsBiEknadu1YHt+IZ+AnJKYw3qGWw+vIMPMMK1nhsliVIhVhLSNcRPj8 rWwQOji3D2ukMGtxMADBIkd9kISDJ1rBTZYYDFI4pdmMLQCzYywmappEaDkRpT0ncRGon0AF dA9Awu1gnAgejZBLg2pdffmpitjE40mQaGBXL/hwHSQPV0OZzEce2m8vzIdvERhoHajV3gZC tBujteK+LKxwCiBA9LZnQIo+DOsw6jfJuND6k2oXcQLnHjpxLpmCES9HknQbg/ANDULDuD1A SdmegEBSaFEFijO08KPf5bFiob5iXmwbYiRDjBJGDOSUP8sCxE7mlYKqRYeA2R+ho+ojIcEF 2HbD+Ps1wNtOFDsLcimI7whiAZMAbOJTZEhjDeQqQySQImpppFo9gdwmHRdTH2F0PjnRzTuV 8TXOx5F5PCMs1Al03NHHlewfQvFR1GkCh27ik53MbSQNC0PYXKI3FT0MqfTQGuHoQkkm401O RxW2ZcNTJIZGS03Rehd5MoxAkHCNgsuVDyibE5ZxP+qB68SoPYgdgz0D8h7Q+FQ8J1dkSv3W +r3vHjwh+nFN6IG/kEOHHgAiXnEqKGkyKA52KeCaUi8Uq3eap6Np3XaGAo0oaTAe4Hfc4sRS LEcJlRuYd9LCFD/UaG8U8Ee93qdosMFO4ewsQIDCl5WI9MOI9jwB/D4z9O30ftGfLjIroNBf Tn7v40/hpURVE/Xc+Q/d9H3mwfT9f1/b2bcFoaH3147QPm08neOhE/F1Hw9jwtJ7feXpha8T SIHxhTlkFPkcB8QZbCy7CMSEAIZAYJHnA+nIPY8x0zW7stJkWgQgQiEMmgswsajpV4RIwsjR f5r92jgGdHxOAaWDRdIgdzGIbuf5MyiSSSQnF3RNSDRIGhl+ffscDDHkcmWDUSAmxlTZ4BAB oOBPqO8/Qn2rFQ+6C/UrUmFPqtMZPi/0/1UukgY2J3+/w8dqPtbWXEkPqDJ+0l0frcvtsGeE pMkf2e/cQMBglVRyIfXqg/CFEWlMh78HCecPf3OqobA/bCRtyEMYH1jw3BkF0D/XN42AIN7c u9PveI7t2zn4b9OQCjCamSHEyPbwkCyUZ7tya+sdqPA1zpOxDnE2S+E3Dy9jsXYGd2fMo4OK Wy4G5A1nxmLWeUISISKlREZzjnoHYJeSjbYLWp4cQtxjyuLlg5s7PJr2Ylkv6XhvSY1DElO+ XXMf5hmV8zFFJAwgbUFZ650WcqxLeCREtkFHQ48sANTXpff/DctMyzg4OOrcEqIiqaTWWGmC ohNyRIG21MJuQ4CJGABECANROASESKTY0OrzJDC9K4BRYvxpCoAiC1gFPfBk+r/pohgie4FX Wtfz6NnAlKFSCBSSF8DshrRzLKXhLv+CHNI5fEofofPQ8QjGBDme2sZJngJFFFZAGAxgrAsv tOi0VrVkxYqf4GdtGBy0L2Snpekh1CPTqJjB8AVqE9R6j5YN34Wj5ttslwLrQXDHYTLDrYtA ORENuKSxkQN4WbMaHu7DGLuYr/jDy2Y9X0+aDOHRDC5lGUuEsSImjwnkbKhCYIvlMUhCJ/Lv 0x6BlqBvjohgmurtBc41RX4gd9JMdopt+MTC+dENr2DxLgcNBNPObjPRYPS7jNYYQx2FjPAr yI4AP1EQDkH9Rx4GJUkjlJDTZLzZKHQD6jlkFdYVIIV8WQ3Yd+4TgQIMUD4cejXF4W1aoq1m lr2VlwNfLiI5IcDi9T40WNzqCbUdgcJY/dGKpMDkDncBs+nSdTM4eOYRg8AnEG+jq2meN3mz XzQQkYEfXDyQe2xOITU90+jbf57XYdb7j7IyEinKIWPtR3UGsuMEwpIQovDvh1KPB/+X8P2W LIbYykMYmDPcP1hTwIPbE/AiYQuINJGoMgpXtFmQTUYdjngWTzRgZJEbwShK0D9vfSVVBgT4 nwcgIlhD+wSJ7+GBleEjPGoDLPuZhegoZS4NkFgUFiAiEFhbn5/KGQ+OJhjTxvB/pyNUDxqH USRGRCCSx5EiELG3yeaahu/N1fLTqFt6wNbSHih0Q5NHQe+gIObFRH+BFIQNTCeHhl6+zx5F 7Fic9RKlMZTRGiTlvqnPmK0AeTidvamuknTR8iy3B/yNcgO0cm1XRpwl8KAN3lUAb56T9qbj 2x99nJF8JPyB5SaQIsEYQkJs11xag3j/nueoDBpw7dkNyevtTIf8gO5M14T9zkd6mnItJSkY j4I2jE0PA+Y32J1B4Q7mKiglEE7GH/UzV/oOysPVvwfW8uzWPW620HRDoUqJOUGGDI0wycss 0gRchIRArTMja6KxShlKP1FDpMWk4hgMS18KTScuHJcsNfFNjRUURgmw0RmcQNZS8tBMlzNV reVxOyQ5NgGAKYSTIs+lrGTfIM4EwsiuUaSBeDUZjSItLw+PuFsZcEoA8SJHaQIjoUlAEMrA eKaOZgEnzRaYxjsvfhAIIMQ3H+sJDIeImNGcD0zczCapmj7zW5hK9LNyFqKG8DFH2YNrqTm6 IG+zRDwKASvwR6amhKCN6ikcc8OSz1n7YjkCSHhc7EAsbopnE0g1vve/eGJED9kaLmT5vdBv QZMOFsj82s1qh5lT8NUg62zqbhN3iqeudxZJpIWsj7+8PhSlQGGaoiXDswS63F6ZFrF8Kq0c Y6I51EmtC1ECrGyLfKgDjqLvcWobps/2/OmAbW01lIWf897u2zC8LQ1ebtsQIkGotWlkm5Vh jccBoWjAi27a4Wl1qDQOGGNhYrMRmKuhC3igSJwO9mX8Yzz84jXVxG5mymwZjkhTtzO1sMF4 WAdrWe4wLMpUgmoyFRNlGiXqSIGMkNUZuo6VMrbJKZtzN3JqqrjdRUW1TCXGQDBrU5oEKsYo 4oFZC4TCRxCigoCwOid0TguMwU+lCWssh07BsnIMQijBYwVRSCiMBkUU6L15VCKJEWMW0s40 M6qTgyGyu6BxdiCWzrZMLkAMwuZEqb8V00mUEgvJAJekOAITMI3WQ0gBiR47dJqCMIh0lm8Z CIjFjJYkkxlGo05Bo0Sc2xowJWMlbQYNRlCFSWIKXiiXBLWXr5c9TQgpikANgNA3P7i+xDUl BPcMmQ/pOMGRCRSEQbneOluy40gBpACLUWVCNEi9gJD16gNv2d9tDIKiUhyG2LmgMMLNd0xE BpXjvs3mHv28h8g8OsZg3ZFVQMa3yTHldAs5UoBpBVeiwB1xOHAOhZS8XduCt6C/jECu/yCy qWzYwMVoaDJAX1bJwL7973SRVzKronH9Pd3mahllOZ7vpFISqi/f3IoYnerqd/F2U3FdDmwd xUnYEZmHEcjUaWV3XQSboLIDBGBy0PX3bAYv3U9AEzC0BumVZvGxTN9qLQkK77M9iKZfCSDw PSm6H5tQzbnrO87AE5hYmRUw93MWhOLKaWTp2FVkqbDYHG4XB6Skiyc0/jZesQ0VEJERQ5Jy UXrzzBWINIJ25Wa0puyIbSb84cRFVEUFIqsEUWWnRKG6epUO5fI3bsxytQSBAgTKjYfgip6N 8+LSa36EQIovaqyVpJWnaVd5p2JLyzLIUdjvNaxM7N4u+LgSDKmCA7h4qEQ+lQAeQdzpIBJl 8Mze7Y7HlnVqgQ9s2FQ9VHJDxRuGyb30+8Otp6UYlpvz5GGYFogUcykf0Ne+yXR6sPoMg6sh B0PFUPo9VMYKDSOdvewofLCTYssJbEYmNEUK1ETBUUhUlPq7zCcBgyEZw8SHhC0l4Owbu+BA 4A1QVgR5FAobYvFXKBgEzAvFWgMk1FC747BWnNSqYAvcjIpH3jCRL6qpmY3fxgpnYxE4ZaK6 5D+EsD9CAu2fu4tDiIQdsCGclULBCAAoQFgO8s7nElSdKRST57Z3BtIXIEoAwbIomDoUSxxS Ygcc/p4m1GTUAAe7fQ30lKjlCuZCQdQncRKW5RU52Hn49ZGJETcOXkB28ShcMp7Ep10uwNig uawcoF1CcyZr3DIiB7Q/MwNib8kWJpQ1kd39JXG5DFgvFZBkEhECRE6/0XUVbdQDLzlhdJCJ yhGFQsUMgwbTMHcWeoij5vTIaoME4zF9I9oEIQCqiCKjIsZsM4JsXaZxDkYQ3NFMikNQVeI+ A2vtG+H8+B8YbMsbYc1s8ugzN0SG95ywgxgyIsnhr2Ksh3juEH9U7JEOi0GgE5F6xcwglCUZ IFQEoC5z5xkDTjSPe4RN/A2m2dRGKhmmoBP5NNEk/EZJRkfOU+oyimISxiqKBv+MMkJAigUo 6Ud28UtegbJ7geEAGTtDEiIWiFBEyHgqOyZGgZAmSd86tcBCBCdjsod0DRTr9vz0D7vImagn 1RSREReITeHLmjl/MfOpOjd94QMohyly1NWDQOdPRggHd8jL5HDyF/IAXHHHwzTXpgCkEhkG FNefgcziU36k0X2988nPTvFzV0TPDe6VISuH4YrWvK5vwBqTydj3RhJF7AJy7ioIYSqdoGDf NgzLtZgN7skCxHCCGHhaDpxUJhT5wRtngmIGEXH2qm4aIkATlIQPgHyMSMSz3CKYAOfnGSQE kROuTQjYiBISXQ/I09uKnqgvnOAd45B7d++RJIxEIwZGIwGSKwREY9gVkcfv9Ca+jOaHnibB altnbkumC3T+afoJJIQgRMp052NwTCj9hFO8oxWhnXYNfQMzruLGR2QTsgBzBrIiDRO24EQ5 00O+S8ZDgdfTCU4UodF5amsMQ7hXjLYLHeysQSC9pBsYgiatGR+j4GwjBkjuTBT4ILAGhkJr PnNTxJxrDjGMQWU9m16uYb8g5nUHshLBSyHqtVKWsBrRkUqCtLIpKSTVJ1gIU9UDvgFnoNrA Nd9t8OnmMh2kLlhj8OVHJgJlqjIh94XXlJvgFjCctPpgYxDSAdrrVO4ay3bqpcl4YSMCxQND ATE3vDed/DdOJoeAdNAhbV1uJIfw+ctWZv2dow5FBqOE/HV5n1FEpwBuOAC2Utaa5Duj3JA9 6AVxhQKUU78pxjmS3Appnl6jIEfQPtGBHsOgNxzA+ZPEkWChzLW+rwyTUhbFDEM7zhIbulGx 8a+saRiQkAw5YWwQ9eHDCYM6lqMdiG3nSm6AFiEgHIiJ4no91qV1i2ILa9rNqohHxUOke8IK FF8xRsihNwQDF9giJFADWkyUYqthoOsed48NtqaQVTfYGQnb0paNvupmFRJ1fTzkI0RzxIzB GKfUEyPq49jaEM2Ww8fZZoCylH6rFHrh21LtjjRVQMtzNyHjAAkVCRSRnOhwiqBaCCBQb6MP nfaHddT4fbfZMw2IgljzZ+MzsEYHYnkd9NF68SzvmBpXN2FTJiiYlM9zMYMYadTDIdFKc7kL J+nLhFJJPz4l1kwOfmFoTrYqwdovtRiGg6izIS7OMNkfBFmBNhYo2lg0WzcsFUdBGliTUsKM KkHowuskoZmgpmnCWZgjrM0mgXBuMDBo4OmOqS/v0YbDJraxf4tsGZvlHeVYauTfExlMyQ0U HDRZ/fJD0Uh/Abyblu4VgU00UroOvAqaZxCVi5uzbYlCAUPoQ4CjD+fAyYQsOPf7rWcqadQ3 S1hX4HahxBuBsvNgLMRxdIWfYOgGAaNAQtglDIQc2shmsgY6hILIiBFhFA3w4CD0d/BUMUs4 FChAOmZazGKSMZEWCqRIxGQjBIooKDBUZIg6qVAqRN2MgXsmWrVbVZbAZWdImBAPE3U2VzoR KKGLUDHR/DeNBjkwRk2yoAHoDoiToOnNM5Sxr6PLdMGyhVDGkayGYlSkbbD7g1ercvd1Q2JI cXWCx6qQ0FMwMZhSlRLaCRhpUsBlslSjmpqGtKEBhJJJocgSYCjCYrEMuXS5Dx7fJaj9eY+L byKA8pvoSxAm5OPdU0CEvup8cKQfX7fRpRZ+h2ZvbNpZ9h80mpSP5prndIlhRxr0FFosB6jI Irujl4IxoopPVjGodcROhT+wmqbtnvUaHuIh0eY7Quxzx7zq4qfybu2gYuYEuSqXgLBpHoGw EIkVwj32aVZDZO6Rq8bzSP6Q9Cg1BwmW9osKG1Qb2XCuMBsjxjBeIbusxBziEO17RSTa0VYb 5Q6Nebz6BIiTMjWpMV3odMLPhVYvFO8jvglRNKpKC/OUXCGwJkpzid+VAFQ6HKoWhAvPzOQd NTlAkDdJVa3SXUpDnlrWJxDhbMcMCPke1KgPuoJWT1S6fvDjKHZYBzOjD+uIHfYp3xE6zCKW ghsfGCeym0sjpXLkXvAw87rfX5N+9NmJf5gEDExHGqGFgZ/AFYuqBtOfQvuzKfp6rxz/rIp5 GrFvwHcAXqGp9X2A2K6E4RgNSHX5ILDoOI1OsDGKLX5G+y2bni2MqNpo7O2BoJEtgMcqNZIk HakUzP0a75dPRxUfnDxiYYIWjpOkDdHTz37/H5YnQC8H78fH5yRhG9U1Br6lfCPwUetGH1IA GpBgQHqGMQo2zMzYQ6DYGkKpWnyy1ElQTNlEyIKgpzI3ArVEu2xM2HJmyF2s0ORMYVVQUVV2 TUhqCLK4hUEUUi0a2NZD3MsFGFqUetnKSEhiN6lY2EyzQNF/PPXhX2InYODSHnvaxmDvL+Z8 Mw9lqzwDgdALHOhsxBcpprMVQszMitErchkDrA7kCRI+r6xNHsHIxDvvydO3fiIf7sTe4jQ6 hBxas6qDDuMUvcXqZZEFqNCOPyODKKhQvy9vN1vDWv8uTdkOhioixVgpBIxENWWRSRNko5gL wGdWD9d+V+ZFxiMDJAc0iFHXGRgEAwKhcFLCRbr64Z+IFEB0s/QeB20uHmhigUkMYhIq1BCn tUj8WKt+cCll2vIOKqHOanNpOYYIGxNBjgIwRBsI8eHRsGiHCRsSqcg+5HQVTPb31qxjD8sr 9WEKPhShRFGEQS8aCKyLIpIyJxopXaqB2sgVk2TTKIVrJFgYwBTELlGEQUZE/LceW/cW40jX vucsb1MI91Vc/E/kFAn0/L93E2jC7vuyOgzb7P0PW6+k0EzCBww+QMmyfxqehhoxvDZ6LpHk p8cX5lRBXGJBxY5tNqDuSBehv/NNYQUupP0EBhePcWkBMJzqiJbfDLI7AwsCmSlGF6uwAeQv ON9c5SBxdRJuwURZUYOio9ehoCa6q4nsVuuzF4MKOsusa5jsbr5223JFTXE+++mt72xz1z2O 26jryDeHl/QQhCED4JCPwDnx/pSopPacOc7vNMYFJyOiMRRmhA3B6Py/TnW0Ufvh1e/7lVWB t378NA0gGsDJh+eaPifsusoU2Sl5BceF1xsslBkCwKlLS0sUAo1At+FoZFLdjgaxTqoTaM9Q HuTzE9kA+EUr3WE+1v1541LGGsbwvU8bZ/ZcyH4gc+24Xbbup/MSB8qLQbEC0+5NbuJMOBTx wQUnyXABHjICkxhSByhc5sdkOIYVyq13oQMbMG/TtJ8XpkycKpnWNQrQujUzbEN5nqmCIJE3 G0zzvfCdKvVok5cJIe+KkFgTOhOkRSn4lElrQFskSm4xwn8CHhBzrxDfc3zht/hLefJcbcCY tdDsW3lmzRhdNeuQc5aHc2KdiztwwLJSnm222NG+XAQVKLnI4MOb9cQaTtI9tkgi2iy2koWW DA88E9pRd8OBr7Jp6d65b9NxawJZee3FWmU0MKTz2sFgqiBAqAxlRpm6BgOfwQs9+qryx5FE ZKHTzokyA3YFTpGvms5CBxOZPqEoJkZmVbsMuJ0S4xKqoxPjUWyufe6wUHXi4GRWQna8wxA5 iFGFZpCoGDIc6Jw58N6mpAp7suuGKyC4L1azAGc7ZuPFsRU0znJjepDxKFCyGuU3Y9Z1cxYJ GHGNBxEVs5I56sN3y1XMucFytE0eq1lEsQN5rabm2xLYAy3l8yX36GY7rmc8qcDkztGSxFpo kSUKFBDRynTjfH2ZCbrL0jocS8ciGUs4Rf1tFUYQNbjGcQMonI4mIuaSsUZVoNQrMQBRoYFG +zu4E0C6VVMN9YJkmHTIdWRvJQlxg5wKjQ5OAUYUTQgAaXAGqAXW8zW17JKBLEEoSTWuAd++ JD3Fxk3un1op2gYShUUYtoMg+kxUUz4EChOJc3mAb+BhSQiXKKQxLPLlpykMWsuBnek1zsRl XKA5v8Cx1uOHMjCGqZk7PFoVv7HHjuHiRcFvij1ntlB9kFQwpAMzj2Cw/onDqyLJtO9WIoSN jIqjd+c6fz/TnkezNeIgnrgN+WlPmuIzwQ9hAU3xBwjYj7ONFoXiIBIL74CDjBQfZgBIyNRU NSBiETxAsHTgHRjhYL05fk7d81fHvw9xzMGA5Z14XFXWWHgmsipauxjDiajDuZieUKIqAiJG mCAW8HbzHvOox8oHR+mAGcSRA6jO87Bq3RLvfzUcQxDYwqG8xzRO6AqXDVHuPdjTOawxoZir LGSLNERQw4FOGHuJqknQY/nUWopcgcE22CGnx54564Coc5kO5FCP5ZISdHu/1Ppu5JEumHw+ W9Xkc0PlGlKUUQYvoA5JqEsZLmnjPLRU50P3x0NjvBU91OArzkIlil1yuWQkXWAVSGIBqBEQ z/Gg8jv8YBvKHjHJA3onvMcTvA4hCQZGMGAFG2gxciMQSUIgPadRB3CcZ9QfbDZ83CRNg1Td 8RGR9Xac8YTS+cTEQT73CZZSjT1oTOcm4EkkQ5CYPPz0YCMc5s5FtT7g6oG2JPzzjQt8Ta+I kkCwKm3bI9TR108ENkP45J5ECZFQRhroXKvC6j4NVEO7xClTkJyAb+IBSfVObQyIdrzFzNo4 cbbJLV+MEskiromkUqFrTLENgsB6oSFKBIA3IPO9o9nncA5VU4stJrWQXYHQhqqGsrWaBYDD GaQmGaprWo5ti6QdBoozMg40FKmszJayIlhlsK3VJLE2ZmFqFTGYkxaLJpfSJKosJ8GLCbBD LopWKRFhUMkgGxb8LeBbCKMN3TKgbugQEIPm7u09IgdrsRJNOrQQB+Tt1yPuomOvwchY51Wi JvEeMHiqCe1aQQ25ZVoliMN+vJDJEREoWTYroNBXQWouFGosWff57rSBelOcXsodQwOkfEZI fqMQ78p1DBTnMNjQMW4l0Ouc5nhVQ/UCMvSBcDEvYYpdRYeaUp64FDgGuvtrlEA8jyFDBtzb mW5uyiS345KnEYMPf1Sa3HY2392obAzAYylnLCsd5yl4NgO2NptSt5JLDqB4PaOvb0z0aCbt DJTXR98eZE7K8ig2QD4EEH0jIEgh+C/YfQfA/xmCBYybpUUiBwthSAWfE4UM1vdzVdQVDcf/ i7kinChIcPyR1AA= --------------080702030304070707090308 Content-Type: text/plain; name="0003-sched-fix-incorrect-use-of-ideal_runtime-s-timeunit.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename*0="0003-sched-fix-incorrect-use-of-ideal_runtime-s-timeunit.pat"; filename*1="ch" >>From c9b7e910de032ce0851ec297575d42bc8f07a4a3 Mon Sep 17 00:00:00 2001 From: Stephan Baerwolf Date: Wed, 20 Jul 2011 15:06:17 +0200 Subject: [PATCH 3/3] sched: fix incorrect use of "ideal_runtime"s timeunit In "check_preempt_tick()" (kernel/sched_fair.c:1093) a ulong called "ideal_runtime" stores a timeslice of the current task (scheduling entity). This time complies real cpu-time. At the end of the same function (nr_running > 1) this (real) time is compared with a virtual-runtime-delta. Obviously the timeunits (real vs. virtual) didn't fit. Using "wakeup_preempt_entity()" instead should fix this in a even more general way. Signed-off-by: Stephan Baerwolf --- kernel/sched_fair.c | 16 +++++++--------- 1 files changed, 7 insertions(+), 9 deletions(-) diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c index 66dc9f7..61d002d 100644 --- a/kernel/sched_fair.c +++ b/kernel/sched_fair.c @@ -1083,6 +1083,9 @@ dequeue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) update_cfs_shares(cfs_rq); } +static int +wakeup_preempt_entity(struct sched_entity *curr, struct sched_entity *se); + /* * Preempt the current task with a newly woken task if needed: */ @@ -1115,14 +1118,11 @@ check_preempt_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr) return; if (cfs_rq->nr_running > 1) { + // check, if maybe curr has finally overtaken the remaining leftmost struct sched_entity *se = __pick_first_entity(cfs_rq); - s64 delta = curr->vruntime - se->vruntime; - - if (delta < 0) - return; - - if (delta > ideal_runtime) - resched_task(rq_of(cfs_rq)->curr); + + if (wakeup_preempt_entity(curr, se) > 0) + resched_task(rq_of(cfs_rq)->curr); } } @@ -1156,8 +1156,6 @@ set_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *se) se->prev_sum_exec_runtime = se->sum_exec_runtime; } -static int -wakeup_preempt_entity(struct sched_entity *curr, struct sched_entity *se); /* * Pick the next process, keeping these things in mind, in this order: -- 1.7.3.4 --------------080702030304070707090308 Content-Type: text/plain; name="0002-sched-replace-use-of-entity_key.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0002-sched-replace-use-of-entity_key.patch" >>From df6bc28340e3cc2b4ebe132492971e8a4164fe11 Mon Sep 17 00:00:00 2001 From: Stephan Baerwolf Date: Wed, 20 Jul 2011 14:46:59 +0200 Subject: [PATCH 2/3] sched: replace use of "entity_key()" "entity_key()" is only used in "__enqueue_entity()" and its only function is to subtract a tasks vruntime by its groups minvruntime. Before this patch a rbtree enqueue-decision is done by comparing two tasks in the style: "if (entity_key(cfs_rq, se) < entity_key(cfs_rq, entry))" which would be "if (se->vruntime-cfs_rq->min_vruntime < entry->vruntime-cfs_rq->min_vruntime)" or (if reducing cfs_rq->min_vruntime out) "if (se->vruntime < entry->vruntime)" which is "if (entity_before(se, entry))" So we do not need "entity_key()". If "entity_before()" is inline we will also save one subtraction (only one, because "entity_key(cfs_rq, se)" was cached in "key") Signed-off-by: Stephan Baerwolf --- kernel/sched_fair.c | 8 +------- 1 files changed, 1 insertions(+), 7 deletions(-) diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c index e092e72..66dc9f7 100644 --- a/kernel/sched_fair.c +++ b/kernel/sched_fair.c @@ -334,11 +334,6 @@ static inline int entity_before(struct sched_entity *a, return (s64)(a->vruntime - b->vruntime) < 0; } -static inline s64 entity_key(struct cfs_rq *cfs_rq, struct sched_entity *se) -{ - return se->vruntime - cfs_rq->min_vruntime; -} - static void update_min_vruntime(struct cfs_rq *cfs_rq) { u64 vruntime = cfs_rq->min_vruntime; @@ -372,7 +367,6 @@ static void __enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se) struct rb_node **link = &cfs_rq->tasks_timeline.rb_node; struct rb_node *parent = NULL; struct sched_entity *entry; - s64 key = entity_key(cfs_rq, se); int leftmost = 1; /* @@ -385,7 +379,7 @@ static void __enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se) * We dont care about collisions. Nodes with * the same key stay together. */ - if (key < entity_key(cfs_rq, entry)) { + if (entity_before(se, entry)) { link = &parent->rb_left; } else { link = &parent->rb_right; -- 1.7.3.4 --------------080702030304070707090308 Content-Type: text/plain; name="0001-sched-check-WAKEUP_PREEMPT-feature-before-preemting-.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename*0="0001-sched-check-WAKEUP_PREEMPT-feature-before-preemting-.pa"; filename*1="tch" >>From ccd1e7d300c1f939da745e1c0d50d13fc3ccec7b Mon Sep 17 00:00:00 2001 From: Stephan Baerwolf Date: Wed, 20 Jul 2011 14:37:56 +0200 Subject: [PATCH 1/3] sched: check WAKEUP_PREEMPT feature before preemting anything The function "check_preempt_wakeup" (kernel/sched_fair.c:1885) will preempt idle-task (for non-idle task), even if WAKEUP_PREEMPT is not featured (because of a too late checking the feature). This patches moves the checking of WAKEUP_PREEMT in front of idle-preemtion. Signed-off-by: Stephan Baerwolf --- kernel/sched_fair.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c index 433491c..e092e72 100644 --- a/kernel/sched_fair.c +++ b/kernel/sched_fair.c @@ -1905,6 +1905,9 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_ if (test_tsk_need_resched(curr)) return; + if (!sched_feat(WAKEUP_PREEMPT)) + return; + /* Idle tasks are by definition preempted by non-idle tasks. */ if (unlikely(curr->policy == SCHED_IDLE) && likely(p->policy != SCHED_IDLE)) @@ -1918,9 +1921,6 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_ return; - if (!sched_feat(WAKEUP_PREEMPT)) - return; - update_curr(cfs_rq); find_matching_se(&se, &pse); BUG_ON(!pse); -- 1.7.3.4 --------------080702030304070707090308--