Как ядро ​​Linux находит грязную страницу для сброса? - PullRequest
2 голосов
/ 10 февраля 2012

Поскольку страницы хранятся в address_space внутри каждого inode, как поток очистки кэша фоновой страницы узнает все грязные страницы?

Ответы [ 2 ]

2 голосов
/ 10 февраля 2012

Они все в одном месте :

struct bdi_writeback {
        struct backing_dev_info *bdi;   /* our parent bdi */
        unsigned int nr;

        unsigned long last_old_flush;   /* last old data flush */
        unsigned long last_active;      /* last time bdi thread was active */

        struct task_struct *task;       /* writeback thread */
        struct timer_list wakeup_timer; /* used for delayed bdi thread wakeup */
        struct list_head b_dirty;       /* dirty inodes */
        struct list_head b_io;          /* parked for writeback */
        struct list_head b_more_io;     /* parked for more writeback */
        spinlock_t list_lock;           /* protects the b_* lists */
};

b_dirty - это список, который вы ищете.

Для получения дополнительной информации о том, какпромывка происходит, посмотрите здесь .Код довольно сложный, хотя.Подводя итог (много), учтите, что данные конфигурации по умолчанию, записанные на диск, будут храниться в памяти до тех пор, пока либо а) им не исполнится более 30 секунд, либо б) грязные страницы не израсходуют более 10% активной, работающейобъем памяти.

1 голос
/ 10 февраля 2012

На платформе x86 ОС должна проверить свой page table entries на наличие грязных страниц.В них есть специальный бит dirty, который устанавливается ЦП автоматически при записи в память.Должен быть какой-то код, который сканирует PTEs для dirty = 1.

...