Docker: QEMU vs virtualization.framework
На прошлой неделе только ленивый не написал о том, что Docker для Apple Silicon добрался до публичного релиза.
К сожалению, добрался он не в том виде, в котором мог. Докер использует QEMU для виртуализации. Но в Big Sur появилось нативное API для виртуализации virtualization.framework. После нескольких релизов virtualization.framework спрятали за экспериментальный флаг и вернули QEMU в качестве стандартного варианта. Связано это с тем, что при использовании нативного API проблем возникает больше, чем при использованни QEMU. Например, не работает VPN.
При этом virtualization.framework работает эффективней с ресурсами:
— нагрузка на процессор на ~7% ниже;
— есть поддержка Memory ballooning. Если очень просто, то это возможность шарить оперативную память между виртуальной машиной и хостом. Т.е. если виртуалке выделено 2гб, но процесс использует только 1гб, то оставшийся гигабайт хост может использовать под свои нужды. Это уже поддерживается в WSL 2. На маках это пока что не работает даже под экспериментальным флагом, но главное, что есть такая возможность.
Помимо этого, для запуска докера всё ещё требуется Rosetta 2, т.к. какие-то зависимости не оптимизированы под ARM, но это минорная проблема.
На прошлой неделе только ленивый не написал о том, что Docker для Apple Silicon добрался до публичного релиза.
К сожалению, добрался он не в том виде, в котором мог. Докер использует QEMU для виртуализации. Но в Big Sur появилось нативное API для виртуализации virtualization.framework. После нескольких релизов virtualization.framework спрятали за экспериментальный флаг и вернули QEMU в качестве стандартного варианта. Связано это с тем, что при использовании нативного API проблем возникает больше, чем при использованни QEMU. Например, не работает VPN.
При этом virtualization.framework работает эффективней с ресурсами:
— нагрузка на процессор на ~7% ниже;
— есть поддержка Memory ballooning. Если очень просто, то это возможность шарить оперативную память между виртуальной машиной и хостом. Т.е. если виртуалке выделено 2гб, но процесс использует только 1гб, то оставшийся гигабайт хост может использовать под свои нужды. Это уже поддерживается в WSL 2. На маках это пока что не работает даже под экспериментальным флагом, но главное, что есть такая возможность.
Помимо этого, для запуска докера всё ещё требуется Rosetta 2, т.к. какие-то зависимости не оптимизированы под ARM, но это минорная проблема.