История изменений
Исправление firkax, (текущая версия) :
Ну, исходники я не анализировал.
Дело в том, что zram, сам по себе, про свап ничего не знает. Это просто блочное устройство, хранящееся в сжатой памяти. Можно сделать mkswap /dev/zram0 и swapon /dev/zram0, тогда это блочное устройство, на совершенно общих основаниях, будет использоваться для свапа. То есть вот есть какое-нить /dev/sda2 и есть /dev/zram0 - для свап-движка разницы между ними нет (но есть разница для гибернации - оно как-то их отличает и zram использовать не пытается). Если бы сжатая zram-память могла сама попадать в свап, то она бы и сама в себя могла попадать по второму кругу, что явно приводит к какой-то чуши и такое бы делать не стали.
Что касается трёх уровней, то у zram есть backing_dev - некое ещё одно блочное устройство, которое уже в драйвере zram назначено ещё одним уровнем. Как именно оно работает, я не разбирался, было лень, но вроде там что-то на тему «туда можно положить данные которые плохо сжимаются». Возможно, просто прописать устройство недостаточно и надо ещё что-то настраивать.
Вопрос. Что определяет, откачивается ли страница в zram или disk swap?
Точно так же, как если сделать два свапа на дисках (sda2 + sdb2) - по приоритету. Сначала заполняется тот у кого максимальный приоритет, а когда в нём кончается место - следующий за ним. Приоритет можно задавать ключом -p у swapon или смотреть в /proc/swaps.
после попадания в zswap
zswap - это не zram, это другой драйвер. Я не изучал как он работает.
Исходная версия firkax, :
Ну, исходники я не анализировал.
Дело в том, что zram, сам по себе, про свап ничего не знает. Это просто блочное устройство, хранящееся в сжатой памяти. Можно сделать mkswap /dev/zram0 и swapon /dev/zram0, тогда это блочное устройство, на совершенно общих основаниях, будет использоваться для свапа. То есть вот есть какое-нить /dev/sda2 и есть /dev/zram0 - для свап-движка разницы между ними нет. Если бы сжатая zram-память могла сама попадать в свап, то она бы и сама в себя могла попадать по второму кругу, что явно приводит к какой-то чуши и такое бы делать не стали.
Что касается трёх уровней, то у zram есть backing_dev - некое ещё одно блочное устройство, которое уже в драйвере zram назначено ещё одним уровнем. Как именно оно работает, я не разбирался, было лень, но вроде там что-то на тему «туда можно положить данные которые плохо сжимаются». Возможно, просто прописать устройство недостаточно и надо ещё что-то настраивать.
Вопрос. Что определяет, откачивается ли страница в zram или disk swap?
Точно так же, как если сделать два свапа на дисках (sda2 + sdb2) - по приоритету. Сначала заполняется тот у кого максимальный приоритет, а когда в нём кончается место - следующий за ним. Приоритет можно задавать ключом -p у swapon или смотреть в /proc/swaps.
после попадания в zswap
zswap - это не zram, это другой драйвер. Я не изучал как он работает.