PCIe hotplug ทำงานจริงหรือไม่?


20

ฉันได้เข้าสู่การสนทนาในความคิดเห็นของ/security/109199/is-physical-security-less-important-now-for-securing-a-server?noredirect=1#comment194327_109199

คำถามง่าย ๆ มีใครเคยประสบความสำเร็จในการเสียบการ์ด PCIe สำเร็จหรือไม่ มันจำเป็นต้องใช้มาเธอร์บอร์ดและการ์ดพิเศษหรือควรใช้กับฮาร์ดแวร์สำหรับผู้บริโภคทั้งหมดหรือไม่?


1
คำตอบควรเป็นสองเท่า ทั้งฮาร์ดแวร์และซอฟต์แวร์ (ไดรเวอร์ของมัน) ควรรองรับการเสียบแบบร้อน
jippie

ฉันไม่รู้ว่าจะช่วยได้หรือไม่ แต่ฉันเพิ่งลบ GPU ผ่านที่สองออกจากเครื่อง kvm windows โดยไม่ส่งผลกระทบต่อ GPU ตัวแรก (หน้าจอเพิ่งสะบัดไปหนึ่งวินาที)
feedc0de

คำตอบ:


43

ฉันเคยออกแบบฮาร์ดแวร์ PCI-Express ที่ต้องการการสนับสนุน hot-plug แบบเต็มในฮาร์ดแวร์และซอฟต์แวร์และเป็นไปได้อย่างแน่นอน แต่มันค่อนข้างเกี่ยวข้องและต้องการการสนับสนุนซอฟต์แวร์ที่กว้างขวาง - ฮาร์ดแวร์นั้นค่อนข้างง่าย ฉันต้องออกแบบฮาร์ดแวร์จากนั้นใช้การสนับสนุน BIOS (UEFI) และเคอร์เนล (Linux) สำหรับอุปกรณ์ PCIe โดยพลการร้อนๆผ่านไฟเบอร์และทองแดง

จากมุมมองของซอฟแวร์เราต้องจำไว้ว่า PCIe ยังคงดำเนินต่อไปกับรุ่นซอฟต์แวร์ PCI รวมถึงแนวคิดของบัสอุปกรณ์การกำหนดหน้าที่การทำงาน เมื่อระบุ PCI บัสแล้วจะทำการค้นหาแบบกว้างก่อน: โทโพโลยีบัส PCI จาก tldp.org

โดยทั่วไปการแจงนับ PCIe จะกระทำสองครั้ง ก่อนอื่น BIOS ของคุณ (UEFI หรืออื่น ๆ ) จะทำเพื่อหาว่ามีใครอยู่และต้องการหน่วยความจำเท่าใด ข้อมูลนี้สามารถส่งผ่านไปยังโฮสต์ระบบปฏิบัติการที่สามารถใช้ตามที่เป็นอยู่ แต่ Linux และ Windows มักจะดำเนินการตามขั้นตอนการแจงนับของตัวเองเช่นกัน บน Linux สิ่งนี้ทำผ่านระบบย่อยหลัก PCI ซึ่งค้นหาบัสใช้สิ่งที่จำเป็นถ้าอิงตาม ID ของอุปกรณ์จากนั้นโหลดไดรเวอร์ที่มี ID ตรงกันในฟังก์ชันโพรบ อุปกรณ์ PCI คือ ID'd ผ่านการรวมกันของ ID ผู้ขาย (16- บิตเช่น Intel คือ 0x8086) และ ID อุปกรณ์ (อีก 16 บิต) - แหล่งอินเทอร์เน็ตที่พบมากที่สุดอยู่ที่นี่: http://pcidatabase.com / .

ส่วนซอฟต์แวร์ที่กำหนดเองเข้ามาในระหว่างกระบวนการแจงนับและนั่นคือคุณต้องจองล่วงหน้าหมายเลข PCI Bus และเซ็กเมนต์หน่วยความจำสำหรับอุปกรณ์ที่มีศักยภาพในอนาคต - ซึ่งบางครั้งเรียกว่า 'การเติมเต็มบัส ' นี่เป็นการหลีกเลี่ยงความจำเป็นในการระบุบัสอีกครั้งในอนาคตซึ่งมักจะไม่สามารถทำได้โดยไม่ทำให้ระบบหยุดชะงัก อุปกรณ์ PCI มี BARs (การลงทะเบียนที่อยู่พื้นฐาน) ซึ่งคำขอไปยังโฮสต์เท่าใดและหน่วยความจำประเภทอุปกรณ์ (หน่วยความจำหรือพื้นที่ I / O) ที่อุปกรณ์ต้องการ - นี่คือเหตุผลที่คุณไม่ต้องการจัมเปอร์เช่น ISA อีกต่อไป :) เช่นเดียวกันเคอร์เนล Linux ใช้ PCIe hotplug ผ่าน pciehp คนขับรถ Windows ทำสิ่งต่าง ๆ ตามรุ่น - รุ่นเก่า (ฉันคิดว่า XP) เพิกเฉยต่อสิ่งที่ BIOS บอกและทำด้วยตัวเอง รุ่นที่ใหม่กว่าฉันเชื่อว่ามีความเคารพ ACPI DSDT มากขึ้นโดยโฮสต์เฟิร์มแวร์ (BIOS / EFI) และจะรวมข้อมูลนั้น

นี่อาจดูเหมือนเกี่ยวข้องและสวย! แต่จำไว้ว่าแล็ปท็อป / อุปกรณ์ใด ๆ ที่มีสล็อต ExpressCard (ซึ่งใช้ PCIe เนื่องจากคุณมี ExpressCards แบบ USB เท่านั้น) ต้องทำสิ่งนี้แม้ว่าโดยทั่วไปช่องว่างภายในจะค่อนข้างเรียบง่าย - มีเพียงบัสเดียว ฮาร์ดแวร์เก่าของฉันเคยเป็นสวิตช์ PCIe ที่มีอุปกรณ์อีก 8 ตัวอยู่ด้านหลังดังนั้นการขยายจึงค่อนข้างซับซ้อน

จากมุมมองของฮาร์ดแวร์มันง่ายกว่ามาก หมุดของ GND ของการ์ดนั้นต้องทำการติดต่อก่อนและเราจะวางตัวควบคุม hot-swap IC จาก LTC หรือที่คล้ายกันบนการ์ดเพื่อให้ได้พลังงานตามลำดับเมื่อทำการเชื่อมต่อแล้ว ณ จุดนี้ ASIC หรือ FPGA แบบออนบอร์ดเริ่มขึ้นตามลำดับการเพิ่มพลังและเริ่มพยายามเชื่อมโยงการเชื่อมโยง PCI Express ของมัน สมมติว่าโฮสต์รองรับการเสียบฮอตและ PCI Express SLTCAP / SLTCTRLลงทะเบียน (ในสเปค: ลงทะเบียนความสามารถของสล็อต PCI Express, ลงทะเบียนควบคุมสล็อต PCI Express มี 1 และ 2 สำหรับสิ่งนี้เช่นกัน - บิตเพียงพอที่จะแบ่งออกเป็นสอง regs) สำหรับพอร์ตนั้นได้รับการกำหนดค่าให้ระบุว่าพอร์ตนั้นสามารถใช้งานได้กับฮอตปลั๊กซอฟต์แวร์สามารถเริ่มระบุอุปกรณ์ใหม่ได้ การลงทะเบียนสถานะสล็อต (SLTSTA, การลงทะเบียนสถานะสล็อต PCI Express) ประกอบด้วยบิตที่อุปกรณ์เป้าหมายสามารถตั้งค่าเพื่อระบุความผิดปกติของกำลังไฟฟ้า, สลักปลดแบบเชิงกล

รีจิสเตอร์ดังกล่าวอยู่ใน 'PCI (Express) Configuration Space' ซึ่งเป็นพื้นที่เล็ก ๆ ของแผนที่หน่วยความจำ (4K สำหรับ PCIe) ที่จัดสรรให้กับแต่ละ bdf ที่เป็นไปได้ (บัส: อุปกรณ์: ฟังก์ชัน) การลงทะเบียนจริงมักจะอยู่ในอุปกรณ์ต่อพ่วง

ในด้านโฮสต์เราสามารถใช้ PRSNT1 # / PRSNT2 # เป็นสัญญาณ DC แบบง่ายที่ป้อนการเปิดใช้งานของสวิตช์ไฟ IC หรือเรียกใช้ GPIO บนชิปเซ็ต / PCH เพื่อทำให้เกิด IRQ และเรียก SW 'เฮ้มีบางอย่างแทรกอยู่ ไปหามันแล้วตั้งค่ามัน! ' กิจวัตรประจำวัน

นี่เป็นข้อมูลจำนวนมากที่ไม่ได้ตอบคำถามของคุณโดยตรง (ดูด้านล่างสำหรับข้อมูลสรุปโดยย่อ) แต่หวังว่ามันจะช่วยให้คุณมีพื้นฐานที่ดีขึ้นในการทำความเข้าใจกระบวนการ หากคุณมีคำถามเกี่ยวกับส่วนต่าง ๆ ของกระบวนการแจ้งให้เราทราบในความคิดเห็นที่นี่หรือส่งอีเมลถึงฉันและฉันสามารถพูดคุยเพิ่มเติม + อัปเดตคำตอบนี้ด้วยข้อมูลนั้น

เพื่อสรุป - อุปกรณ์ต่อพ่วงจะต้องได้รับการออกแบบโดยใช้การสนับสนุน hot-plug ในใจจาก POV ฮาร์ดแวร์ โฮสต์ / สล็อตที่ออกแบบมาอย่างเหมาะสมนั้นมีความสามารถในการเสียบปลั๊กเช่นกันและบนเมนบอร์ดระดับไฮเอนด์ฉันคาดหวังว่ามันจะปลอดภัย อย่างไรก็ตามการสนับสนุนซอฟต์แวร์สำหรับคำถามนี้เป็นคำถามอื่นทั้งหมดและคุณโชคไม่ดีที่ BIOS ของ OEM ที่คุณให้มา

ในทางปฏิบัติคุณใช้เทคโนโลยีนี้ทุกครั้งที่คุณถอด / ใส่ PCIe ExpressCard จากคอมพิวเตอร์ นอกจากนี้ระบบเบลดประสิทธิภาพสูง (เทเลคอมมิฉะนั้นจะใช้เทคโนโลยีนี้เป็นประจำเช่นกัน

ความคิดเห็นสุดท้าย - บันทึก PDF ที่เชื่อมโยงกับข้อมูลจำเพาะพื้นฐาน PCI-SIG มักจะเรียกเก็บเงินสำหรับสิ่งนั้น :)


2
และเพื่อปิดการพูดคุยด้านความปลอดภัยด้วย FPGA ที่ค่อนข้างถูก (เช่น Cyclone IV GX) ที่ทำหน้าที่เป็นอุปกรณ์ PCIe เครื่องโฮสต์ของคุณจะทำ - FPGA สามารถดำเนินการสิ่ง DMA ที่ต้องการ
Krunal Desai

คำอธิบายที่ดี จะเกิดอะไรขึ้นเมื่อการ์ด PCIe ที่สามารถใช้งาน Hot-Plug ได้รับการเปลี่ยน ในอีกด้านหนึ่งระบบปฏิบัติการต้องระบุโทโพโลยี PCIe อีกครั้งเนื่องจากเห็นว่ามีการใส่อุปกรณ์ใหม่ (ไม่สามารถคาดการณ์ขนาดบาร์ / จำนวนบัสที่อาจได้รับการร้องขอจากอุปกรณ์ที่ใส่ใหม่) แต่ในทางกลับกัน - การแจกแจงระบบอีกครั้งอาจเป็นไปไม่ได้หากไม่มีผลกระทบต่อทรัพยากรที่กำหนดให้กับอุปกรณ์ที่มีอยู่แล้วในทอพอโลยี ...
so.very.tired

2
ใช่มันจะยุ่งยาก ดังนั้นการใช้ ExpressCard (EC) เป็นตัวอย่างวิธีหนึ่งที่ฉันทำได้คือ 'บีบ' จำนวนบัสเพื่อรองรับการเพิ่มอุปกรณ์ที่อาจแยกไปยังอุปกรณ์อื่น ๆ ไบออสส่วนใหญ่ที่มีสล็อต EC แบบง่าย ๆ เพียงแค่กดมันด้วยหมายเลขบัสหนึ่งบัส (เราใช้สล็อตนั้นเพื่อขยายไปยังอุปกรณ์ PCIe จำนวนมาก) ในทำนองเดียวกันคุณสามารถ 'รอง' ช่วงหน่วยความจำที่เป็นไปได้สำหรับการกำหนดที่นั่นเพื่อรองรับอุปกรณ์หลากหลายที่มีช่วงที่อยู่ต่อเนื่องเหมือนกับ IRQ ระบบปฏิบัติการ (ที่มี / ไม่มี ACPI) สามารถทำสิ่งที่ต้องการได้ จริงๆแล้วมัน "ง่าย" แต่ความซับซ้อนของชั้น SW ในเครื่องจักรที่ทันสมัยทำให้มันยากขึ้น
Krunal Desai

การแจงนับ PCIe ไม่ใช่การค้นหาครั้งแรกหรือไม่ การลงทะเบียนฐานและการ จำกัด ถูกตั้งค่าเพื่อให้อุปกรณ์ทั้งหมดด้านล่างพอร์ตที่กำหนดต้องระบุก่อนที่จะย้ายไปยังพอร์ตถัดไป
alex.forencich

8

ให้การเชื่อมต่อการตรวจสอบสถานะพลังงานได้รับการสัมผัสกับตัวเชื่อมต่อโดยสวิตช์ upstream และหน่วยเสียบได้สัมผัสหมุดเหล่านี้และมีการกำหนดค่าให้ใช้งานได้อย่างถูกต้องและ (ตามบันทึก Jippie) ซอฟต์แวร์สามารถตรวจสอบเหตุการณ์ hotplug และตอบสนองอย่างเหมาะสม คำตอบคือใช่

โดยทั่วไปความสามารถนี้จะใช้เป็นหลักในเซิร์ฟเวอร์ฟาร์มและศูนย์ข้อมูลสำหรับดิสก์ PCIe แบบ hotplugging ฉันไม่แน่ใจว่าอุปกรณ์ผู้บริโภคจะสามารถเสียบปลั๊กได้เต็มที่ (ฉันเข้าใจตัวเลือกในสเปค)

โปรดทราบว่าการจัดหาฮาร์ดแวร์ที่จำเป็นเพื่อรองรับค่าใช้จ่าย hotplug (แม้ว่าส่วนใหญ่จะอยู่ในจุดปลาย PCIe แต่ก็ยังต้องมีการตั้งค่าโดยทั่วไปผ่านทาง eeprom) โดยปกติจะไม่ได้รับการเสนอในตลาดที่มีความอ่อนไหวด้านราคา

โปรดทราบว่าการอัพเดตแผนที่ที่อยู่ PCI แบบไดนามิกจะเพิ่มความซับซ้อนที่สำคัญให้กับไดรเวอร์ PCI (e) ถ้าอุปกรณ์ใหม่จะถูกแทรกแล้วมันจะต้องมีการแมปเป็นสิ่งที่รถบัสมันมีชีวิตอยู่ด้วยการเชื่อมโยงการแปลที่อยู่ใหม่ แต่ถ้าอุปกรณ์ที่จะถูกลบและ replaed ด้วยแล้วบางสิ่งบางอย่างที่แตกต่างกันก็จะทำให้การติดตามที่อยู่พื้นที่ PCI ที่ค่อนข้างซับซ้อน .

หากไม่มีความซับซ้อนนี้ระบบย่อย PCI จะถูกสแกนหนึ่งครั้ง (เมื่อรีเซ็ตระบบ) และยังคงอยู่ ไม่ต้องใช้ความพยายามเพิ่มเติม

นี่คือข้อมูลจำเพาะฐาน PCIe v3.0 , หน้า 514, ส่วนที่ 6.7 เกี่ยวกับการสนับสนุน Hot Plug ตัวอย่างของการ์ด PCIe ซึ่งไม่สนับสนุนปลั๊กอินร้อนสามารถมองเห็นได้ที่นี่มารยาทของiocrest จะเห็นได้ว่าเส้นทางตัวเชื่อมต่อที่สั้นกว่านั้นถูกกำหนดเส้นทาง: การ์ดคอนโทรลเลอร์ PCI-e PCI-e SATA 2 (6G), Marvell 88SE9120 ชิปเซ็ต

อย่างไรก็ตามในการ์ดAxxonนี้การติดตามที่สั้นกว่าสามารถมองเห็นได้ชัดเจนส่งไปยังการ์ดที่อยู่ติดกัน ในระดับกายภาพเพียงอย่างเดียวการ์ดนี้ไม่สามารถรองรับปลั๊กฮอต: MAP / 950 1 พอร์ตอนุกรม I / O การ์ด PCI Express (PCIe)


2

มันควรจะทำงานกับฮาร์ดแวร์ที่เข้ากันได้กับ PCIe ทั้งหมดไม่ว่าฮาร์ดแวร์ของผู้บริโภคจะเป็นไปตามมาตรฐานจริงหรือไม่นั้นเป็นคำถามที่ดีเพราะฉันไม่ได้ลึกเข้าไปใน PCIe spec เพื่อทราบเกี่ยวกับข้อกำหนดในการทดสอบ ฉันคิดว่าแทบจะไม่ทำอะไรเลย

เหมือนกับมาตรฐานความปลอดภัยทั้งหมด ครึ่งหนึ่ง (<-hyperbole?) ฉลาก EE ที่เรามีให้คุณสามารถใช้งานร่วมกันได้โดยไม่ต้องมีทุกสิ่งที่คุณทำการทดสอบ เนื่องจากสิ่งที่ฮ็อตปลั๊กไม่ใช่อันตรายถึงชีวิตฉันไม่สามารถจินตนาการได้ว่าผู้คนจะเข้มงวดกับมันมากขึ้น

ฉันหนึ่งไม่เคยลองและเห็นว่าเป็นแล็ปท็อป Clevo ของฉันขับรถออกไปจากบ้านของฉันฉันไม่เกี่ยวกับการลองเพราะโมดูล GPU ในแล็ปท็อปของฉันอ้างว่าไม่มีความสามารถปลั๊กไฟและแพงเกินไป Dave Jones และได้รับ $$$ สำหรับ vid ของ GPU ระเบิด


1

ใช่มันใช้งานได้ ฉันสามารถใช้งานได้กับ hotplug ตัวเราเตอร์ linecard (มีอุปกรณ์ PCIe มากกว่า 10+) แชสซีมีการ์ด hotplug 16 ตัว การ์ดใด ๆ สามารถเสียบเข้าหรือออกแบบสุ่มในขณะใช้งานโดยไม่ส่งผลกระทบต่อการจราจรในการ์ดอื่น ๆ

ความซับซ้อนในการทำให้มันขึ้นอยู่กับสภาพแวดล้อมของ CPU บน CPU แบบฝังตัวงานนั้นทำการตั้งค่าแผนที่ทรัพยากรแบบคงที่และจัดการเหตุการณ์การเปลี่ยนแปลงการเชื่อมต่อโดยการแนบและแยกอุปกรณ์ PCI บน x86 นั้นมีส่วนเกี่ยวข้องมากกว่านี้เนื่องจากความซับซ้อนในการจัดการข้อผิดพลาดและการโต้ตอบ BIOS / OS

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.