91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

樸素的UNIX之-Linux CFS一個注釋

發布時間:2020-05-29 08:33:29 來源:網絡 閱讀:672 作者:dog250 欄目:系統運維

本系列名為樸素的UNIX,但是也包括各個類UNIX系統的細節,本系列文章整理自本人幾年來的學習筆記,著重分析各個UNIX,類UNIX的實現思想以及感悟。
       本文比較短,只是分析一下Linux CFS調度器的一個細節。
       在進程尋找下一個將被運行的進程時,難道僅僅只是在紅黑樹上取下左下角的進程嗎?事實上最樸素的實現就是這樣,但是考慮到優化的話,就沒有這么簡單了。要 考慮CPU緩存的利用率,即如果一個進程A搶占了進程B,那么在A進程的上下文中,pick next是選擇進程B呢還是選擇紅黑樹的左下角進程呢?另外如果進程A剛被喚醒,企圖搶占進程B,但是沒有成功,那么下一個是選擇紅黑樹的左下角進程呢還 是選擇進程A呢?是的,這些都是問題。
       我們看一下pick next的實現:

static struct sched_entity *pick_next_entity(struct cfs_rq *cfs_rq)
{
    struct sched_entity *se = __pick_next_entity(cfs_rq);
    struct sched_entity *left = se;

    if (cfs_rq->next && wakeup_preempt_entity(cfs_rq->next, left) < 1)
        se = cfs_rq->next;

    /*
     * Prefer last buddy, try to return the CPU to a preempted task.
     */
    if (cfs_rq->last && wakeup_preempt_entity(cfs_rq->last, left) < 1)
        se = cfs_rq->last;

    clear_buddies(cfs_rq, se);

    return se;
}

很顯然,要把紅黑樹最左下角的進程和另外兩個進程,即next和last最比較,next是搶占失敗的進程,而last則是搶占成功后被搶占的進程,這三個進程到底哪一個是最優的next進程呢?Linux CFS實現的判決條件是:
1.盡可能滿足需要剛被喚醒的進程搶占其它進程的需求;
2.盡可能減少以上這種搶占帶來的緩存刷新的影響。
Linux CFS實現是怎么做到的呢?Linux保存了兩個變量,即搶占失敗的進程和搶占成功后被搶占的進程,在權衡的時候,優先選擇的順序是:
搶占成功后被搶占的進程>搶占失敗的進程>紅黑樹最左下角的進程

到底能不能選擇前兩個進程,則是wakeup_preempt_entity函數來決定的,代碼太多無益,看下面的圖解即可:


樸素的UNIX之-Linux CFS一個注釋


這個CFS的細節在Linux 2.6.23最初實現CFS時并沒有實現。因此從最樸素的時×××始,你才能逐漸理解細節的來龍去脈,看Changelog是有好處的。不得不說,讀史使人明智。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

浦城县| 安康市| 镇平县| 庆元县| 临朐县| 武强县| 广南县| 鸡西市| 剑河县| 阳西县| 阿鲁科尔沁旗| 普宁市| 多伦县| 偃师市| 连州市| 新巴尔虎右旗| 临泉县| 罗平县| 汽车| 奉贤区| 湘乡市| 阿图什市| 龙游县| 伊宁县| 阿拉善右旗| 湄潭县| 杂多县| 卢龙县| 微博| 那曲县| 独山县| 上蔡县| 崇义县| 玉屏| 通江县| 阿城市| 泸西县| 封开县| 无极县| 桓台县| 闻喜县|