Apakah hotplug PCIe benar-benar berfungsi dalam praktik?

20

Saya telah masuk ke sebuah diskusi di komentar /security/109199/is-physical-security-less-important-now-for-securing-a-server?noredirect=1#comment194327_109199

Pertanyaannya sederhana. Adakah yang punya pengalaman berhasil menancapkan kartu PCIe? Apakah itu memerlukan motherboard dan kartu khusus, atau itu seharusnya bekerja pada semua perangkat keras konsumen?

pjc50
sumber
1
Jawabannya harus dua kali lipat. Baik perangkat keras dan perangkat lunak (drivernya) harus mendukung hot-plugging.
jippie
Saya tidak tahu apakah ini membantu, tapi saya baru saja berhasil menghapus GPU pass-through kedua dari mesin windows kvm tanpa mempengaruhi GPU pertama (layar hanya berkedip-kedip sebentar).
feedc0de

Jawaban:

43

Saya biasa mendesain perangkat keras PCI-Express yang membutuhkan dukungan hot-plug penuh dalam perangkat keras dan perangkat lunak, dan tentu saja itu mungkin, tetapi itu cukup terlibat dan memerlukan dukungan perangkat lunak yang luas - perangkat keras sebenarnya cukup sederhana. Saya harus mendesain perangkat kerasnya, kemudian mengimplementasikan BIOS (UEFI) dan dukungan kernel (Linux) untuk hot-plugging perangkat PCIe yang sewenang-wenang di atas serat dan tembaga.

Dari sudut pandang perangkat lunak, orang harus ingat bahwa PCIe berlanjut dengan model perangkat lunak PCI, termasuk konsep bus, perangkat, pengalamatan fungsi. Ketika bus PCI disebutkan, itu dilakukan sebagai pencarian pertama kali: Topologi PCI Bus dari tldp.org

Pencacahan PCIe umumnya dilakukan dua kali. Pertama, BIOS Anda (UEFI atau lainnya) akan melakukannya, untuk mengetahui siapa yang hadir dan berapa banyak memori yang mereka butuhkan. Data ini kemudian dapat diteruskan ke OS host yang dapat menerima apa adanya, tetapi Linux dan Windows juga sering melakukan prosedur penghitungan sendiri. Di Linux, ini dilakukan melalui subsistem PCI inti, yang mencari bus, menerapkan kebiasaan apa pun jika perlu berdasarkan ID perangkat, dan kemudian memuat driver yang memiliki ID yang cocok dalam fungsi penyelidikannya. Perangkat PCI diidentifikasikan melalui kombinasi ID Vendornya (16-bit, misal Intel 0x8086) dan Device ID (16-bit lainnya) - sumber internet paling umum ada di sini: http://pcidatabase.com / .

Bagian perangkat lunak khusus masuk selama proses pencacahan ini dan itu adalah Anda harus memesan sebelumnya nomor PCI Bus, dan segmen memori untuk perangkat potensial di masa depan - ini kadang-kadang disebut ' bus padding '. Ini menghindari kebutuhan untuk menghitung ulang bus di masa depan yang seringkali tidak dapat dilakukan tanpa gangguan pada sistem. Perangkat PCI memiliki BAR ( register alamat dasar) yang meminta kepada tuan rumah berapa banyak dan apa jenis (memori atau I / O ruang) memori yang dibutuhkan perangkat - inilah mengapa Anda tidak perlu jumper seperti ISA lagi :) Demikian juga, kernel Linux mengimplementasikan hotplug PCIe melalui pciehp sopir. Windows melakukan hal-hal berbeda berdasarkan versi - versi yang lebih lama (saya pikir XP) mengabaikan apa pun yang dikatakan BIOS dan apakah itu menyelidikinya sendiri. Versi yang lebih baru saya percaya lebih menghormati ACPI DSDT yang disediakan oleh firmware host (BIOS / EFI) dan akan memasukkan informasi itu.

Ini mungkin terlihat sangat terlibat dan memang begitu! Tetapi ingat bahwa setiap laptop / perangkat dengan slot ExpressCard (yang mengimplementasikan PCIe seperti Anda dapat memiliki ExpressCard USB saja) harus melakukan ini, meskipun umumnya paddingnya cukup sederhana - hanya satu bus. Perangkat keras lama saya dulunya adalah saklar PCIe yang memiliki 8 perangkat lain di belakangnya, jadi bantalan menjadi lebih rumit.

Dari sudut pandang perangkat keras, jauh lebih mudah. Pin GND kartu melakukan kontak terlebih dahulu, dan kami akan menempatkan IC hot-swap controller dari LTC atau serupa pada kartu untuk mengurutkan daya setelah koneksi dibuat. Pada titik ini, ASIC on-board atau FPGA on-board memulai urutan penyalaannya, dan mulai mencoba melatih tautan ke pelatihan PCI Express-nya. Dengan asumsi host mendukung hot-plugging dan PCI Express SLTCAP / SLTCTRLregister (dalam spec: Daftar Kemampuan Slot PCI Express, Register Kontrol Slot PCI Express. Ada 1 dan 2 untuk bit ini juga cukup untuk dibagi menjadi dua regs). untuk port yang telah dikonfigurasikan untuk mengindikasikan port tersebut mampu melakukan hot-plug, perangkat lunak dapat mulai menghitung perangkat baru. Register status slot (SLTSTA, PCI Express Slot Status Register) berisi bit yang dapat diatur oleh perangkat target yang mengindikasikan adanya kesalahan daya, kait pelepas mekanis, dan tentu saja deteksi kehadiran + diubah.

Register tersebut terletak di 'Ruang Konfigurasi PCI (Express)', yang merupakan wilayah kecil dari peta memori (4K untuk PCIe) yang dialokasikan untuk setiap potensi bdf (bus: perangkat: fungsi). Register aktual biasanya berada pada perangkat periferal.

Di sisi host, kita dapat menggunakan PRSNT1 # / PRSNT2 # sebagai sinyal DC sederhana yang memberi makan mengaktifkan saklar daya IC, atau lari ke GPIO pada chipset / PCH untuk menyebabkan IRQ dan memicu SW 'hei, sesuatu dimasukkan , cari dan konfigurasikan! ' rutin.

Ini adalah banyak informasi yang tidak langsung menjawab pertanyaan Anda (lihat di bawah untuk ringkasan cepat), tetapi mudah-mudahan ini memberi Anda latar belakang yang lebih baik dalam memahami prosesnya. Jika Anda memiliki pertanyaan tentang bagian-bagian tertentu dari proses, beri tahu saya di komentar di sini atau tembak saya email dan saya bisa mendiskusikan lebih lanjut + memperbarui jawaban ini dengan info itu.

Untuk meringkas - perangkat periferal harus dirancang dengan dukungan hot-plug dalam pikiran dari POV perangkat keras. Sebuah host / slot yang dirancang dengan baik juga mampu plug-panas, dan pada motherboard high-end saya harapkan aman. Namun, dukungan perangkat lunak untuk ini adalah pertanyaan lain seluruhnya dan Anda sayangnya terikat pada BIOS yang diberikan OEM kepada Anda.

Dalam praktiknya, Anda menggunakan teknologi ini kapan saja Anda melepas / memasukkan PCIe ExpressCard dari komputer. Selain itu, sistem blade berkinerja tinggi (telekomunikasi atau lainnya) juga memanfaatkan teknologi ini.

Komentar akhir - simpan PDF yang ditautkan dari Base Spec, PCI-SIG biasanya dikenakan biaya untuk itu :)

Krunal Desai
sumber
2
Dan untuk mengakhiri diskusi keamanan, dengan FPGA yang relatif murah (seperti Cyclone IV GX) yang bertindak sebagai perangkat PCIe, mesin host Anda selesai - FPGA dapat melakukan tindakan DMA apa pun yang diinginkannya.
Krunal Desai
Penjelasan yang bagus. Apa yang terjadi ketika kartu PCIe Hot-Plug yang dapat ditukar? Di satu sisi, OS harus menghitung ulang topologi PCIe lagi, melihat bahwa perangkat baru dimasukkan (tidak dapat memprediksi ukuran BAR / jumlah Bus yang mungkin diminta oleh perangkat yang baru dimasukkan), tetapi di sisi lain - penghitungan ulang sistem mungkin tidak dapat dilakukan tanpa memengaruhi sumber daya yang telah ditetapkan untuk perangkat yang ada dalam topologi ...
so.very.tired
2
Yap, ini jadi rumit. Jadi, menggunakan ExpressCard (EC) sebagai contoh, salah satu cara saya melakukannya adalah 'menambah' jumlah bus untuk mendukung penambahan perangkat yang mungkin bercabang ke lebih banyak perangkat; kebanyakan BIOS dengan slot EC sederhana cukup dengan satu nomor bus (kami menggunakan slot itu untuk melebarkan ke banyak perangkat PCIe). Demikian juga, Anda dapat 'mengisi' rentang memori yang mungkin untuk penugasan di sana untuk mendukung berbagai perangkat dengan rentang alamat yang berdekatan, sama dengan IRQ. OS (dengan / tanpa ACPI) kemudian dapat melakukan apa yang diinginkan. Ini sebenarnya "sederhana", tetapi kompleksitas lapisan SW dalam mesin modern membuatnya lebih sulit.
Krunal Desai
Bukankah enumerasi PCIe sebenarnya adalah pencarian mendalam-pertama? Register base dan limit diatur sedemikian rupa sehingga semua perangkat di bawah port yang diberikan harus disebutkan sebelum pindah ke port berikutnya.
alex.forencich
8

Jika koneksi pemantauan status daya telah terpapar ke konektor oleh sakelar hulu, dan unit pluggable telah mengekspos pin ini dan dikonfigurasikan untuk menggunakannya dengan benar dan (seperti catatan Jippie) perangkat lunak dapat mendeteksi peristiwa hotplug dan merespons dengan benar, jawabannya adalah ya.

Secara umum, kemampuan ini terutama digunakan di server farm dan pusat data untuk hotplugging disk PCIe antara lain; Saya tidak yakin bahwa peralatan konsumen akan mampu sepenuhnya hotplug (itu, saya mengerti, opsional dalam spesifikasi).

Perlu diingat bahwa menyediakan perangkat keras yang diperlukan untuk mendukung biaya hotplug membutuhkan biaya (walaupun mayoritas berada dalam titik akhir PCIe, masih harus diatur, biasanya melalui eeprom), biasanya tidak akan ditawarkan di pasar yang sensitif terhadap harga.

Perhatikan bahwa memperbarui peta alamat PCI secara dinamis menambah kompleksitas yang signifikan pada driver PCI (e); jika perangkat baru dimasukkan, maka itu harus dipetakan ke dalam bus apa pun itu hidup, dengan terjemahan alamat baru yang terkait, tetapi jika perangkat dihapus dan kemudian diulang dengan sesuatu yang berbeda , itu membuat melacak alamat ruang PCI cukup rumit .

Tanpa kerumitan ini, subsistem PCI dipindai satu kali (saat reset sistem) dan tetap statis; tidak diperlukan upaya lebih lanjut.

Berikut adalah Spesifikasi Dasar PCIe v3.0 , halaman 514, bagian 6.7 pada dukungan Hot Plug. Contoh kartu PCIe yang mendukung hot-plug dapat dilihat di sini, milik iocrest . Dapat dilihat dengan jelas bahwa jejak konektor yang lebih pendek diarahkan: Kartu Pengontrol PCI-e SATA III (6G) 2-port, Chipset Marvell 88SE9120

Namun pada kartu Axxon ini , jejak yang lebih pendek jelas dapat dilihat dialihkan ke yang bersebelahan. Pada level fisik saja, kartu ini tidak dapat mendukung hot-plug: MAP / 950 1 RS232 Port Serial Port I / O Card untuk PCI Express (PCIe)

Peter Smith
sumber
2

Seharusnya berfungsi pada semua perangkat keras yang sesuai PCIe, apakah semua perangkat keras konsumen benar-benar sesuai adalah pertanyaan yang bagus, karena saya tidak jauh ke dalam spesifikasi PCIe untuk mengetahui tentang persyaratan pengujian dan bahkan kemudian, apakah semua pengecer memeriksa validitas klaim? Saya pikir hampir tidak ada yang bisa.

Sama seperti hal standar keselamatan keseluruhan. Setengah (<-hyperbole?) Label EE yang Anda miliki dapat Anda klaim kompatibilitas, tanpa harus melakukan semua yang Anda lakukan untuk diuji. Karena hotplug tidak mengancam jiwa, saya tidak bisa membayangkan orang menjadi lebih ketat tentang hal itu.

Saya, untuk satu, belum pernah mencobanya dan melihat sebagai Laptop Clevo saya mengusir desktop sepenuhnya dari rumah saya, saya tidak akan mencobanya, karena modul GPU di laptop saya mengklaim tidak ada kemampuan hotplug dan terlalu mahal tanpa menjadi Dave Jones dan dapatkan $$$ untuk rekaman GPU yang meledak.

Asmyldof
sumber
1

Ya itu berhasil. Saya bisa membuatnya berfungsi untuk hotplug sasis linecard router (berisi 10+ perangkat PCIe). Chassis memiliki 16 kartu yang dapat dihubungkan dengan kabel listrik. Setiap kartu dapat dicolokkan ke dalam atau keluar secara acak pada waktu berjalan tanpa mempengaruhi operasi lalu lintas pada kartu lainnya.

Kompleksitas untuk membuatnya bekerja tergantung pada lingkungan CPU. Pada CPU yang disematkan, pekerjaan ini hanya mengatur peta sumber daya statis dan menangani peristiwa perubahan koneksi dengan melampirkan dan melepaskan perangkat PCI. Pada x86, ia jauh lebih terlibat karena kompleksitas dalam penanganan kesalahan dan interaksi BIOS / OS.

xzhu70
sumber