PCIe hotplug aslında pratikte çalışıyor mu?


20

Https://security.stackexchange.com/questions/109199/is-physical-security-less-important-now-for-securing-a-server?noredirect=1#comment194327_109199 yorumlarında bir tartışma yaptım

Soru basit. PCIe kartını başarıyla takma deneyimi olan var mı? Özel anakartlar ve kartlar gerektiriyor mu veya tüm tüketici donanımlarında çalışması gerekiyor mu?


1
Cevap iki kat olmalıdır. Hem donanım hem de yazılım (sürücüleri) çalışırken takmayı desteklemelidir.
jippie

Bu yardımcı olup olmadığını bilmiyorum, ama sadece ilk gpu (ekran sadece bir saniye titreşti) etkilemeden kvm windows makineden ikinci geçişli GPU başarıyla kaldırdım.
feedc0de

Yanıtlar:


43

Donanım ve yazılımda tam hot-plug desteği gerektiren PCI-Express donanımı tasarlıyordum ve kesinlikle mümkün, ancak oldukça dahil ve kapsamlı yazılım desteği gerektiriyor - donanım aslında oldukça basit. Donanımı tasarlamak, ardından fiber ve bakır üzerine isteğe bağlı PCIe aygıtlarını çalışırken takmak için BIOS (UEFI) ve çekirdek (Linux) desteğini uygulamak zorunda kaldım.

Yazılım açısından bakıldığında PCIe'nin veri yolu, cihaz, işlev adresleme kavramları dahil PCI yazılım modeliyle devam ettiğini unutmamak gerekir. PCI veriyolu numaralandırıldığında, önce bir genişlik araması olarak yapılır: Tldp.org sitesinden PCI Veri Yolu topolojisi

PCIe numaralandırması genellikle iki kez yapılır. İlk olarak, BIOS'unuz (UEFI veya başka bir şekilde) kimin mevcut olduğunu ve ne kadar belleğe ihtiyaç duyduklarını bulmak için bunu yapacaktır. Bu veriler daha sonra olduğu gibi ana bilgisayar işletim sistemine aktarılabilir, ancak Linux ve Windows da genellikle kendi numaralandırma prosedürlerini uygular. Linux'ta, bu, veri yolunu arayan, gerekirse aygıt kimliğine bağlı olarak herhangi bir tuhaflık uygulayan ve daha sonra prob işlevinde eşleşen bir kimliği olan bir sürücüyü yükleyen çekirdek PCI alt sistemi aracılığıyla yapılır. Bir PCI aygıtı, Satıcı Kimliği'nin (16 bit, örneğin Intel 0x8086) ve Aygıt Kimliği'nin (başka bir 16 bit) birleşimi ile tanımlanır - en yaygın internet kaynağı burada: http://pcidatabase.com / .

Özel yazılım bölümü bu numaralandırma işlemi sırasında gelir ve bu, gelecekte PCI Veri Yolu numaralarını ve gelecekteki potansiyel cihazlar için bellek segmentlerini ayırmanız gerekir - buna bazen ' veri yolu dolgusu ' denir . Bu, gelecekte sistemi kesintiye uğratmadan yapılamayacak otobüsün yeniden numaralandırılması ihtiyacını ortadan kaldırır. Bir PCI cihazında BAR'lar ( temel adres kayıtları)) ne kadar ve hangi tip (bellek veya G / Ç alanı) belleğe ihtiyaç duyduğunu ana bilgisayara talep eder - bu yüzden artık ISA gibi jumper'lara ihtiyacınız yok :) Aynı şekilde, Linux çekirdeği PCiehp üzerinden PCIe hotplug uygular sürücüsü. Windows, sürüme göre farklı şeyler yapıyor - eski sürümler (sanırım XP) BIOS'un söylediği her şeyi yok sayar ve kendi problama işlemini yapar. Daha yeni sürümlerin, ana bilgisayar yazılımı (BIOS / EFI) tarafından sağlanan ACPI DSDT'ye daha saygılı olduğunu ve bu bilgileri içereceğini düşünüyorum.

Bu oldukça ilgili görünebilir ve öyle! Ancak, ExpressCard yuvalı (PCIe'yi sadece USB ExpressCard'lara sahip olarak uygulayan) herhangi bir dizüstü bilgisayarın / cihazın bunu yapması gerektiğini unutmayın, ancak genellikle dolgu oldukça basittir - sadece bir otobüs. Eski donanımımın arkasında başka 8 cihaz bulunan bir PCIe anahtarı vardı, bu yüzden dolgu biraz daha karmaşıklaştı.

Donanım açısından bakıldığında, çok daha kolay. Önce kartın GND pinleri temas eder ve bağlantı yapıldıktan sonra kartı sıralamak için LTC veya benzeri bir çalışırken değiştirilebilir kontrolör IC'si yerleştiririz. Bu noktada, yerleşik ASIC veya FPGA güç verme sırasına başlar ve PCI Express bağlantısını bağlamaya çalışmayı dener. Ana bilgisayarın çalışırken takmayı ve PCI Express SLTCAP / SLTCTRL'yi desteklediği varsayılarakkayıt (spec: PCI Express Yuvası Yeteneği Kayıt, PCI Express Yuvası Kontrol Kayıt. Bunun için 1 ve 2 de var - iki reg arasında bölünmek için yeterli bit). bu bağlantı noktası, bağlantı noktasının çalışırken takılabilir olduğunu gösterecek şekilde yapılandırılmışsa, yazılım yeni aygıtı numaralandırmaya başlayabilir. Yuva durumu (SLTSTA, PCI Express Yuvası Durum Kaydı) kaydı, hedef cihazın güç hatalarını, mekanik serbest bırakma mandalını ve elbette varlığını algılama + varlığını değiştirmeyi ayarlayabileceği bitler içerir.

Yukarıda belirtilen kayıtlar, her potansiyel bdf'ye (bus: device: function) tahsis edilen bellek haritasının (PCIe için 4K) küçük bir bölgesi olan 'PCI (Express) Yapılandırma Alanı' içinde bulunur. Gerçek kayıtlar genellikle çevresel aygıtta bulunur.

Ana bilgisayar tarafında, PRSNT1 # / PRSNT2 #, bir güç anahtarı IC'nin etkinliğini besleyen basit bir DC sinyali olarak kullanabiliriz veya bir IRQ'ya neden olmak ve bir SW 'hey tetiklemek için yonga seti / PCH'de GPIO'ya çalışabiliriz. , bul ve yapılandır! ' rutin.

Bu, sorunuza doğrudan cevap vermeyen (hızlı özet için aşağıya bakın) birçok bilgi, ancak umarım süreci anlamada size daha iyi bir arka plan sağlar. Sürecin belirli bölümleri hakkında herhangi bir sorunuz varsa, bir yorumda bana bildirin veya bana bir e-posta gönderin ve daha fazla tartışabilirim + bu cevabı bu bilgilerle güncelleyebilirim.

Özetlemek gerekirse - çevresel aygıt donanım POV'sinden çalışırken takılabilir destekle tasarlanmış olmalıdır. Düzgün tasarlanmış bir ana makine / yuva da çalışırken takılabilir ve üst düzey bir anakartta güvenli olmasını beklerim. Bununla birlikte, bunun için yazılım desteği tamamen başka bir soru ve maalesef OEM'inizin size sağladığı BIOS'a bakıyorsunuz.

Pratikte, bir PCIe ExpressCard'ı bir bilgisayardan her çıkardığınızda / taktığınızda bu teknolojiyi kullanırsınız. Ek olarak, yüksek performanslı blade sistemleri (telekom veya başka türlü) bu teknolojiyi düzenli olarak da kullanır.

Son yorum - Base Spec'e bağlı olan PDF'yi kaydedin, PCI-SIG genellikle bunun için dolar alır :)


2
Ve güvenlik tartışmasını, PCIe cihazı gibi davranan nispeten ucuz bir FPGA (Cyclone IV GX gibi) ile tamamlamak için, ana makineniz yapılır - FPGA istediği her DMA eylemini gerçekleştirebilir.
Krunal Desai

Harika bir açıklama. Çalışırken Takılabilir özellikli bir PCIe kartı değiştirildiğinde ne olur? Bir yandan, OS gerekir yeni bir cihaz takılı olduğunu görerek, tekrar PCIe topoloji numaralandırmak (o barlar boyutunu tahmin edemez / yeni eklenen cihaz tarafından talep edilebilir Otobüsler miktarı) ama diğer taraftan, - topolojideki mevcut cihazlara zaten atanmış olan kaynakları etkilemeden sistemin yeniden numaralandırılması mümkün olmayabilir ...
so.very.tir

2
Evet, biraz zorlaşıyor. Örnek olarak ExpressCard (EC) kullanarak, bunu yapmanın bir yolu, daha fazla cihaza dallanabilecek bir cihaz eklemeyi desteklemek için otobüs sayısını 'doldurmak' idi; basit bir EC yuvasına sahip çoğu BIOS sadece bir veri yolu numarasına sahiptir (bu yuvayı birçok PCIe cihazına genişletmek için kullandık). Benzer şekilde, IRQ'larda olduğu gibi bitişik adres aralığına sahip çeşitli cihazları desteklemek için oraya atama için mümkün olan bellek aralığını 'doldurabilirsiniz'. OS (ACPI ile / ACPI olmadan) daha sonra istediği şeyi yapabilir. Aslında "basit", ancak modern bir makinedeki SW katmanlarının karmaşıklığı onu zorlaştırıyor.
Krunal Desai

PCIe numaralandırma aslında derinlemesine bir arama değil mi? Temel ve limit kayıtları, bir sonraki porta geçmeden önce belirli bir portun altındaki tüm cihazların numaralandırılması gerektiği şekilde ayarlanır.
alex.forencich

8

Güç durumu izleme bağlantılarının yukarı akış anahtarı tarafından konektöre maruz kalması ve takılabilir ünitenin bu pimleri göstermesi ve bunları doğru şekilde kullanması ve (Jippie notları gibi) yazılım hotplug olayını algılayıp düzgün yanıt verebilmesi koşuluyla, cevap evet.

Genel olarak, bu özellik birincil olarak sunucu çiftliklerinde ve veri merkezlerinde PCIe disklerini diğer şeylerin yanı sıra çalışırken takmak için kullanılır; Tüketici ekipmanının tamamen hotplug özellikli olacağından emin değilim (spesifikasyonda isteğe bağlı olarak anlıyorum).

Hotplug'u desteklemek için gerekli donanımı sağlamanın paraya mal olduğunu unutmayın (çoğunluk PCIe uç noktası dahilinde olmasına rağmen, genellikle bir eeprom aracılığıyla kurulmalıdır), genellikle fiyata duyarlı bir pazarda sunulmayacaktır.

PCI adres eşlemesinin dinamik olarak güncellenmesinin PCI (e) sürücüsüne önemli bir karmaşıklık getirdiğini unutmayın; yeni bir aygıt takılırsa, ilgili yeni adres çevirileriyle üzerinde yaşadığı herhangi bir veriyoluna eşlenmelidir, ancak bir aygıt kaldırılır ve daha sonra farklı bir şeyle değiştirilirse , PCI alan adreslerini izlemeyi oldukça karmaşık hale getirir .

Bu karmaşıklık olmadan, PCI alt sistemi bir kez taranır (sistem sıfırlandığında) ve statik kalır; daha fazla çaba gerektirmez.

Hot Plug desteğiyle ilgili PCIe v3.0 Base Spec , sayfa 514, bölüm 6.7. Etkin fişi destekleyen bir PCIe kartı örneği burada iocrest'in izniyle görülebilir . Daha kısa konektör izinin yönlendirildiği açıkça görülebilir: 2 bağlantı noktalı SATA III (6G) PCI-e Denetleyici Kartı, Marvell 88SE9120 Yonga Seti

Ancak bu Axxon kartında, daha kısa iz açık bir şekilde bitişik olana yönlendirilmiş olarak görülebilir. Yalnızca fiziksel düzeyde, bu kart hot-plug'ı destekleyemez: PCI Express (PCIe) için MAP / 950 1 RS232 Seri Bağlantı Noktası G / Ç Kartı


2

Tüm PCIe uyumlu donanımlarda çalışması gerekiyor, tüm tüketici donanımlarının gerçekten uyumlu olup olmadığı iyi bir soru, çünkü test gereksinimleri hakkında bilmek için PCIe spesifikasyonunun derinliklerinde değilim ve o zaman bile, tüm perakendeciler iddianın geçerliliğini kontrol ediyor mu? Bence neredeyse hiç yok.

Bütün güvenlik standartları gibi. Sahip olduğunuz EE etiketlerinin yarısı (<-hiperbol?) Hotplug şeyler hayatı tehdit etmediğinden insanların bu konuda daha katı olduklarını hayal edemiyorum.

Birincisi, hiç denemedim ve Clevo Dizüstü Bilgisayarımın masaüstünü tamamen evimden çıkardığını görüyorum, denemek üzereyim, çünkü dizüstü bilgisayarımdaki GPU modülü hotplug özelliği olmadığını ve çok pahalı olmadığını Dave Jones ve patlayan bir GPU vid için $$$ almak.


1

Evet çalışıyor. Bir yönlendirici kasa bağlantısını (10+ PCIe aygıtı içeren) çalışırken takmayı başardım. Kasada 16 adet fişe takılabilir kart bulunur. Kartlardan herhangi biri, diğer kartlardaki trafik işlemlerini etkilemeden çalışma zamanında rastgele takılabilir veya çıkarılabilir.

Çalıştırmanın karmaşıklığı CPU ortamına bağlıdır. Gömülü bir CPU'da, çalışma sadece statik kaynak haritasını ayarlamak ve PCI aygıtlarını takarak ve çıkararak bağlantı değişikliği olaylarını işlemek. X86'da, hata işleme ve BIOS / OS etkileşimlerindeki karmaşıklık nedeniyle çok daha fazla rol oynuyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.