LXCFS adalah sistem file sekering kecil yang ditulis dengan maksud membuat wadah Linux terasa lebih seperti mesin virtual. Ini dimulai sebagai proyek samping LXC tetapi dapat digunakan dengan runtime apa pun.
LXCFS akan berhati -hati bahwa informasi yang disediakan oleh file -file penting dalam procfs seperti:
/proc/cpuinfo
/proc/diskstats
/proc/meminfo
/proc/stat
/proc/swaps
/proc/uptime
/proc/slabinfo
/sys/devices/system/cpu/online
Apakah wadah sadar sedemikian rupa sehingga nilai -nilai yang ditampilkan ( /proc/uptime .
Sebelum implementasi namespaces cgroup oleh Serge Hallyn LXCFS juga menyediakan pohon cgroupfs yang sadar wadah. Berhati -hatilah bahwa wadah hanya memiliki akses ke cgroup di bawah cgroup itu sendiri dan dengan demikian memberikan keamanan tambahan. Untuk sistem tanpa dukungan untuk cgroup namespaces LXCFS masih akan memberikan fitur ini tetapi sebagian besar dianggap sudah usang.
LXCFS tanpa restart LXCFS dibagi menjadi perpustakaan bersama (modul libtool, tepatnya) liblxcfs dan lxcfs biner sederhana. Saat meningkatkan ke versi LXCFS yang lebih baru, biner lxcfs tidak akan dimulai kembali. Sebaliknya itu akan mendeteksi bahwa versi baru dari perpustakaan bersama tersedia dan akan memuatnya kembali menggunakan dlclose(3) dan dlopen(3) . Desain ini dipilih sehingga loop utama sekering yang digunakan LXCFS tidak perlu dihidupkan ulang. Jika itu maka semua wadah yang menggunakan LXCFS perlu dimulai kembali karena mereka akan dibiarkan dengan dudukan sekering yang rusak.
Untuk memaksa memuat ulang perpustakaan bersama pada contoh berikutnya yang mungkin cukup kirim SIGUSR1 ke PID proses LXCFS yang sedang berjalan. Ini bisa sesederhana melakukan:
rm /usr/lib64/lxcfs/liblxcfs.so # MUST to delete the old library file first
cp liblxcfs.so /usr/lib64/lxcfs/liblxcfs.so # to place new library file
kill -s USR1 $(pidof lxcfs) # reload
Untuk mencapai peningkatan yang lancar melalui perpustakaan bersama LXCFS juga bergantung pada fakta bahwa ketika dlclose(3) menjatuhkan referensi terakhir ke destruktor perpustakaan bersama dijalankan dan ketika dlopen(3) disebut konstruktor dijalankan. Meskipun ini berlaku untuk glibc itu tidak berlaku untuk musl (lihat bagian pembongkaran pustaka.). Jadi pengguna LXCFS di musl disarankan untuk memulai kembali LXCFS sepenuhnya dan semua wadah memanfaatkannya.
Untuk membangun LXCFS menginstal sekering dan header pengembangan sekering sesuai dengan distro Anda. LXCFS lebih suka fuse3 tetapi bekerja dengan versi fuse2 yang cukup baru:
git clone git://github.com/lxc/lxcfs
cd lxcfs
meson setup -Dinit-script=systemd --prefix=/usr build/
meson compile -C build/
sudo meson install -C build/
Untuk membangun dengan pembersih, Anda harus menentukan -Db_sanitize=... opsi untuk meson setup . Misalnya, untuk mengaktifkan asan dan ubsan:
meson setup -Dinit-script=systemd --prefix=/usr build/ -Db_sanitize=address,undefined
meson compile -C build/
Perintah yang disarankan untuk menjalankan LXCFS adalah:
sudo mkdir -p /var/lib/lxcfs
sudo lxcfs /var/lib/lxcfs
Runtime kontainer yang ingin menggunakan LXCFS kemudian harus mengikat pemasangan file yang sesuai ke tempat yang benar pada startup kontainer.
Untuk menggunakan LXCFS dengan wadah berbasis SystemD, Anda dapat menggunakan LXC 1.1 dalam hal ini harus berfungsi secara otomatis, atau sebaliknya, menyalin file lxc.mount.hook dan lxc.reboot.hook /usr/share/lxcfs
lxc.mount.auto = cgroup:mixed
lxc.autodev = 1
lxc.kmsg = 0
lxc.include = /usr/share/lxc/config/common.conf.d/00-lxcfs.conf
docker run -it -m 256m --memory-swap 256m
-v /var/lib/lxcfs/proc/cpuinfo:/proc/cpuinfo:rw
-v /var/lib/lxcfs/proc/diskstats:/proc/diskstats:rw
-v /var/lib/lxcfs/proc/meminfo:/proc/meminfo:rw
-v /var/lib/lxcfs/proc/stat:/proc/stat:rw
-v /var/lib/lxcfs/proc/swaps:/proc/swaps:rw
-v /var/lib/lxcfs/proc/uptime:/proc/uptime:rw
-v /var/lib/lxcfs/proc/slabinfo:/proc/slabinfo:rw
-v /var/lib/lxcfs/sys/devices/system/cpu:/sys/devices/system/cpu:rw
ubuntu:18.04 /bin/bash
Dalam sistem dengan swap diaktifkan, parameter "-u" dapat digunakan untuk mengatur semua nilai dalam "meminfo" yang merujuk pada swap ke 0.
sudo lxcfs -u/var/lib/lxcfs
Jika Anda melihat LXCFS tidak menunjukkan pertukaran apa pun di wadah Anda meskipun memiliki swap di sistem Anda, silakan baca bagian ini dengan cermat dan cari instruksi tentang cara mengaktifkan akuntansi pertukaran untuk distribusi Anda.
Penanganan swap cgroup di Linux sangat membingungkan dan tidak ada cara yang sempurna bagi LXCF untuk menanganinya.
Terminologi yang digunakan di bawah ini:
memory.usage_in_bytes dan memory.limit_in_bytesmemory.memsw.usage_in_bytes dan memory.memsw.limit_in_bytesMasalah utamanya adalah:
Akuntansi swap sering opt-in dan, membutuhkan opsi waktu boot kernel khusus ( swapaccount=1 ) dan/atau opsi pembuatan kernel khusus ( CONFIG_MEMCG_SWAP ).
Batas RAM dan batas swap RAM+dapat diatur. Namun delta bukanlah ruang swap yang tersedia karena kernel masih bebas untuk bertukar sebanyak mungkin RAM. Ini membuat tidak mungkin untuk membuat ukuran perangkat swap karena menggunakan delta antara RAM dan RAM+SWAP untuk itu tidak akan memperhitungkan kernel yang bertukar lebih banyak halaman, yang mengarah ke penggunaan swap yang melebihi total swap.
Tidak mungkin menonaktifkan swap dalam wadah yang diberikan. Yang terdekat yang dapat dilakukan adalah menetapkan swappiness ke 0 yang sangat membatasi risiko bertukar halaman tetapi tidak menghilangkannya.
Akibatnya, LXCFS harus membuat beberapa kompromi yang mengikuti:
Ketika akuntansi swap tidak diaktifkan, tidak ada ruang swap yang dilaporkan sama sekali. Ini hanya karena tidak ada cara untuk mengetahui konsumsi swap. Wadah itu mungkin sangat banyak menggunakan swap, tidak ada cara untuk mengetahui berapa banyak dan menunjukkan perangkat swap akan membutuhkan semacam penggunaan swap untuk dilaporkan. Menunjukkan nilai host akan sepenuhnya salah, menunjukkan nilai 0 akan salah sama.
Karena penggunaan swap untuk wadah yang diberikan dapat melebihi delta antara RAM dan RAM+SWAP, ukuran swap selalu dilaporkan lebih kecil dari batas RAM+Swap atau perangkat host swap itu sendiri. Ini memastikan bahwa penggunaan swap tidak akan diizinkan untuk melebihi ukuran swap.
Jika swappiness diatur ke 0 dan tidak ada penggunaan swap, tidak ada swap yang dilaporkan. Namun jika ada penggunaan swap, maka perangkat swap dengan ukuran penggunaan (100% penuh) dilaporkan. Ini memberikan pelaporan yang memadai tentang konsumsi memori sambil mencegah aplikasi mengasumsikan lebih banyak swap tersedia.
Dalam hal crash LXCFS, bisa sangat berguna bagi kita untuk memiliki dump inti dari memori proses LXCFS.
/var/crash dan coredumpctl list untuk berjaga -jaga jika Anda sudah memiliki file dump inti LXCFSDi mesin tempat Anda menjalankan LXCFS, jalankan sebagai root:
# save an old core_pattern setting value:
cat /proc/sys/kernel/core_pattern > /root/core_pattern.old_value.bak
# set a new one to collect all core dumps:
echo '|/bin/sh -c $@ -- eval exec gzip --fast > /var/crash/core-%e.%p.gz' > /proc/sys/kernel/core_pattern
# wait for the next LXCFS crash and check
ls -lah /var/crash
# there should be a file with a name like "core-lxcfs.80581.gz". Please, upload it somewhere and share with us.
# restore the old "core_pattern" value:
cat /root/core_pattern.old_value.bak > /proc/sys/kernel/core_pattern