All Products
Search
Document Center

:Apa yang harus saya lakukan jika pengecualian Oops terjadi saat saya mencabut perangkat virtio dari Instance ECS yang menjalankan versi kernel terbaru?

Last Updated:Jul 02, 2025

Topik ini menjelaskan cara menyelesaikan masalah pengecualian Oops yang terjadi saat Anda mencabut perangkat virtio dari Instance Elastic Compute Service (ECS) yang menjalankan versi kernel terbaru tertentu.

Deskripsi Masalah

Saat Anda mencabut perangkat virtio, seperti disk atau kartu antarmuka jaringan (NIC), dari Instance ECS yang menjalankan versi kernel terbaru tertentu, pengecualian Oops berikut terjadi:

  • Jika parameter kernel.panic_on_oops diatur ke 1, terjadi kernel panic pada Instance ECS.

  • Jika parameter kernel.panic_on_oops diatur ke 0, kernel pada Instance ECS menjadi tidak responsif.

Catatan

kernel.panic_on_oops adalah parameter kernel yang mengontrol perilaku kernel ketika menghadapi pengecualian Oops.

  • Kernel panic: Sistem menghentikan tugas yang sedang berlangsung, menyimpan informasi debugging, lalu memulai ulang atau mematikan untuk menyelesaikan masalah dan mengurangi dampak potensial.

  • Kernel tidak responsif: Kernel mungkin mencoba melanjutkan operasi. Untuk mencegah korupsi data atau masalah serius lainnya, jangan izinkan kernel untuk melanjutkan operasi dalam lingkungan produksi dalam kasus ini.

Penyebab

Komunitas upstream Linux menambahkan dukungan untuk admin virtqueue perangkat virtio. Untuk informasi lebih lanjut, lihat Commit.

Dalam commit tersebut:

  • Pointer fungsi is_avq ditambahkan ke definisi virtio_pci_device untuk menentukan apakah admin virtqueue ada.

  • Nilai-nilai untuk pointer fungsi is_avq ditambahkan dalam fungsi virtio_pci_modern_probe yang digunakan untuk menginisialisasi perangkat virtio modern.image.png

  • Saat Anda mencabut perangkat virtio, kode memeriksa apakah antrian saat ini adalah admin virtqueue.

    image.png

Jika perangkat virtio adalah perangkat virtio warisan dan tidak ada nilai yang diberikan kepada pointer fungsi is_avq, pointer fungsi is_avq dalam struktur virtio_pci_device dari perangkat virtio warisan adalah pointer null. Saat Anda mencabut perangkat virtio dan kode memanggil if (vp_dev->is_avq(vdev, vq->index)), pengecualian pointer null dilemparkan. Akibatnya, program mogok atau kesalahan sistem terjadi.

Ruang Lingkup Dampak

  • Komunitas upstream Linux

    Komunitas upstream Linux sudah menyelesaikan masalah ini. Untuk informasi lebih lanjut, lihat Commit. Dalam commit tersebut, patch disediakan untuk memeriksa apakah pointer fungsi is_avq adalah null.

  • Sistem Operasi

  • Perangkat Virtio

    Perangkat virtio warisan yang digunakan pada Instance ECS dan dicabut secara panas.

Solusi

  • Solusi 1: Untuk menghilangkan masalah ini, kami sarankan Anda mengubah keluarga instance ECS ke keluarga instance generasi ke-8 atau lebih baru tempat perangkat virtio modern berada. Untuk informasi lebih lanjut, lihat Ubah jenis instance. Untuk informasi tentang keluarga instance, lihat Ikhtisar keluarga instance.

  • Solusi 2:

    1. Tingkatkan ke paket perangkat lunak kernel terbaru dan verifikasi bahwa patch virtio-pci: Periksa apakah is_avq adalah NULL termasuk dalam paket perangkat lunak kernel terbaru untuk memeriksa apakah pointer fungsi is_avq adalah null.

    2. (Kondisional diperlukan) Jika patch sebelumnya tidak termasuk dalam paket perangkat lunak kernel terbaru, instal patch tersebut.

Lampiran: Istilah

Tabel berikut menjelaskan istilah yang digunakan dalam topik ini.

Istilah

Deskripsi

perangkat virtio

Virtio adalah kerangka kerja standar yang memungkinkan mesin virtual berkomunikasi secara efisien dengan perangkat keras virtual di host. Perangkat virtio adalah perangkat keras, seperti disk dan NIC, yang diemulasikan dalam lingkungan virtual. Perangkat virtio dikategorikan menjadi perangkat virtio warisan dan perangkat virtio modern. Perangkat virtio warisan dan modern menggunakan antarmuka konfigurasi yang berbeda.

admin virtqueue.

Antrian virtio khusus yang digunakan untuk mengelola dan mengoperasikan perangkat, seperti mendapatkan status perangkat dan mengonfigurasi perangkat. Admin virtqueue tidak didukung oleh semua perangkat virtio.

virtio_pci_device

Struktur data yang digunakan dalam kernel untuk menunjukkan perangkat Peripheral Component Interconnect (PCI) virtio. Struktur data ini berisi pointer ke berbagai fungsi, seperti pointer fungsi is_avq, yang ditambahkan untuk menentukan apakah antrian virtio tertentu adalah admin virtqueue.

is_avq

Fungsi yang digunakan untuk menentukan apakah antrian virtio tertentu adalah admin virtqueue.

virtio_pci_modern_probe

Fungsi yang digunakan untuk mendeteksi dan menginisialisasi perangkat PCI virtio. Setelah perangkat terdeteksi, fungsi ini dipanggil untuk mengonfigurasi perangkat, termasuk membaca ruang konfigurasi, memeriksa fitur perangkat, dan mengalokasikan sumber daya yang diperlukan.

RIP

Register di CPU x86 yang menyimpan alamat instruksi berikutnya yang akan dieksekusi. Jika suatu program menghadapi pengecualian, seperti ketika program mencoba mengeksekusi instruksi di alamat yang ditunjuk oleh pointer null, RIP menunjuk ke alamat instruksi yang menyebabkan pengecualian.