Liệu cắm nóng PCIe thực sự hoạt động trong thực tế?


20

Tôi đã tham gia một cuộc thảo luận trong các bình luận của /security/109199/is-physical-security-less-important-now-for-securing-a-server?noredirect=1#comment194327_109199

Câu hỏi rất đơn giản. Có ai có kinh nghiệm cắm nóng thành công thẻ PCIe chưa? Nó có yêu cầu bo mạch chủ và thẻ đặc biệt, hoặc nó được cho là hoạt động trên tất cả các phần cứng của người tiêu dùng?


1
Câu trả lời nên có hai lần. Cả phần cứng và phần mềm (trình điều khiển của nó) đều hỗ trợ cắm nóng.
jippie

Tôi không biết điều này có giúp ích gì không, nhưng tôi đã loại bỏ thành công GPU thông qua thứ hai khỏi máy windows kvm mà không ảnh hưởng đến gpu đầu tiên (màn hình chỉ nhấp nháy trong một giây).
feedc0de

Câu trả lời:


43

Tôi đã từng thiết kế phần cứng PCI-Express cần hỗ trợ đầy đủ phích cắm nóng trong phần cứng và phần mềm, và chắc chắn là có thể, nhưng nó khá liên quan và cần hỗ trợ phần mềm rộng rãi - phần cứng thực sự khá đơn giản. Tôi đã phải thiết kế phần cứng, sau đó triển khai BIOS (UEFI) và hỗ trợ kernel (Linux) cho các thiết bị PCIe tùy ý cắm nóng trên sợi và đồng.

Từ quan điểm phần mềm, người ta phải nhớ rằng PCIe tiếp tục với mô hình phần mềm PCI, bao gồm các khái niệm về bus, thiết bị, địa chỉ chức năng. Khi bus PCI được liệt kê, nó được thực hiện như một tìm kiếm đầu tiên: Cấu trúc liên kết bus PCI từ tldp.org

Việc liệt kê PCIe thường được thực hiện hai lần. Đầu tiên, BIOS của bạn (UEFI hoặc cách khác) sẽ làm điều đó, để tìm ra ai có mặt và họ cần bao nhiêu bộ nhớ. Dữ liệu này sau đó có thể được chuyển đến HĐH máy chủ, những người có thể lấy nó, nhưng Linux và Windows cũng thường thực hiện quy trình liệt kê riêng của họ. Trên Linux, điều này được thực hiện thông qua hệ thống con PCI lõi, tìm kiếm xe buýt, áp dụng mọi yêu cầu nếu cần dựa trên ID của thiết bị và sau đó tải trình điều khiển có ID phù hợp trong chức năng thăm dò của nó. Thiết bị PCI được ID thông qua sự kết hợp của ID nhà cung cấp (16 bit, ví dụ Intel là 0x8086) và ID thiết bị (16 bit khác) - nguồn internet phổ biến nhất có tại đây: http://pcidatabase.com / .

Phần mềm tùy chỉnh xuất hiện trong quá trình liệt kê này và đó là bạn phải dự trữ trước các số PCI Bus và phân đoạn bộ nhớ cho các thiết bị tiềm năng trong tương lai - đôi khi còn được gọi là ' đệm xe buýt '. Điều này tránh sự cần thiết phải liệt kê lại xe buýt trong tương lai mà thường không thể thực hiện được mà không làm gián đoạn hệ thống. Một thiết bị PCI có BAR ( thanh ghi địa chỉ cơ sở) yêu cầu máy chủ lưu trữ bao nhiêu và loại (bộ nhớ hoặc không gian I / O) mà thiết bị cần - đây là lý do tại sao bạn không cần các trình nhảy như ISA nữa :) Tương tự, nhân Linux thực hiện cắm nóng PCIe thông qua pciehp người lái xe. Windows thực hiện những điều khác nhau dựa trên phiên bản - các phiên bản cũ hơn (tôi nghĩ XP) bỏ qua bất cứ điều gì BIOS nói và thực hiện việc thăm dò riêng. Các phiên bản mới hơn mà tôi tin là tôn trọng ACPI DSDT được cung cấp bởi phần sụn máy chủ (BIOS / EFI) và sẽ kết hợp thông tin đó.

Điều này có vẻ khá liên quan và nó là! Nhưng hãy nhớ rằng bất kỳ máy tính xách tay / thiết bị nào có khe cắm ExpressCard (thực hiện PCIe như bạn có thể có ExpressCards chỉ có USB) đều phải thực hiện việc này, mặc dù nhìn chung phần đệm khá đơn giản - chỉ cần một bus. Phần cứng cũ của tôi từng là một bộ chuyển đổi PCIe có 8 thiết bị khác phía sau nó, vì vậy phần đệm có phần phức tạp hơn.

Từ quan điểm phần cứng, nó dễ dàng hơn nhiều. Các chân GND của thẻ thực hiện liên lạc trước và chúng tôi sẽ đặt IC điều khiển trao đổi nóng từ LTC hoặc tương tự trên thẻ để cấp nguồn sau khi kết nối được thực hiện. Tại thời điểm này, ASIC hoặc FPGA trên bo mạch bắt đầu trình tự khởi động và bắt đầu thử liên kết đào tạo liên kết PCI Express của nó. Giả sử máy chủ hỗ trợ cắm nóng và PCI Express SLTCAP / SLTCTRLthanh ghi (trong thông số kỹ thuật: Thanh ghi khả năng khe cắm PCI Express, Thanh ghi điều khiển khe cắm PCI Express. Có 1 và 2 cho điều này cũng đủ để phân chia thành hai regs). Đối với cổng đó được định cấu hình để cho biết cổng có khả năng cắm nóng, phần mềm có thể bắt đầu liệt kê thiết bị mới. Thanh ghi trạng thái khe cắm (SLTSTA, Thanh ghi trạng thái khe cắm PCI Express) chứa các bit mà thiết bị đích có thể đặt chỉ báo lỗi nguồn, chốt giải phóng cơ học và tất nhiên phát hiện sự hiện diện + sự thay đổi hiện diện.

Các thanh ghi nói trên được đặt trong 'Không gian cấu hình PCI (Express)', là một vùng nhỏ của bản đồ bộ nhớ (4K cho PCIe) được phân bổ cho mỗi bdf tiềm năng (bus: device: function). Các thanh ghi thực tế thường nằm trên thiết bị ngoại vi.

Về phía máy chủ, chúng ta có thể sử dụng PRSNT1 # / PRSNT2 # như các tín hiệu DC đơn giản cung cấp khả năng kích hoạt IC chuyển đổi nguồn hoặc chạy đến GPIO trên chipset / PCH để tạo IRQ và kích hoạt SW 'hey, một cái gì đó đã được chèn , đi tìm nó và cấu hình nó! ' công Việt Hằng ngày.

Đây là rất nhiều thông tin không trả lời trực tiếp câu hỏi của bạn (xem bên dưới để biết tóm tắt nhanh), nhưng hy vọng nó sẽ cung cấp cho bạn một nền tảng tốt hơn để hiểu quy trình. Nếu bạn có bất kỳ câu hỏi nào về các phần cụ thể của quy trình, hãy cho tôi biết trong một nhận xét tại đây hoặc gửi email cho tôi và tôi có thể thảo luận thêm + cập nhật câu trả lời này với thông tin đó.

Tóm lại - thiết bị ngoại vi phải được thiết kế có hỗ trợ phích cắm nóng từ POV phần cứng. Một máy chủ / khe cắm được thiết kế phù hợp cũng có khả năng cắm nóng, và trên một bo mạch chủ cao cấp, tôi hy vọng nó sẽ an toàn. Tuy nhiên, phần mềm hỗ trợ cho vấn đề này hoàn toàn là một câu hỏi khác và bạn không may gặp phải BIOS mà OEM của bạn đã cung cấp cho bạn.

Trong thực tế, bạn sử dụng công nghệ này bất cứ khi nào bạn gỡ / lắp PCICard ExpressCard khỏi máy tính. Ngoài ra, các hệ thống lưỡi hiệu suất cao (viễn thông hoặc cách khác) cũng sử dụng công nghệ này thường xuyên.

Nhận xét cuối cùng - lưu tệp PDF được liên kết của Thông số cơ sở, PCI-SIG thường tính phí cho việc đó :)


2
Và để kết thúc cuộc thảo luận về bảo mật, với một GPU tương đối rẻ (như Cyclone IV GX) hoạt động như một thiết bị PCIe, máy chủ của bạn đã hoàn tất - FPGA có thể thực hiện bất kỳ hành động DMA nào mà nó muốn.
Krunal Desai

Giải thích tuyệt vời. Điều gì xảy ra khi thẻ PCIe có khả năng cắm nóng bị tráo đổi? Một mặt, HĐH phải liệt kê lại cấu trúc liên kết PCIe, khi thấy rằng một thiết bị mới đã được chèn (nó không thể dự đoán kích thước của BAR / lượng Bus có thể được yêu cầu bởi thiết bị mới được chèn), nhưng mặt khác - liệt kê lại hệ thống có thể không thể thực hiện được nếu không ảnh hưởng đến các tài nguyên đã được gán cho các thiết bị hiện có trong cấu trúc liên kết ...
vì vậy, rất nhiều

2
Đúng, nó trở nên khó khăn. Vì vậy, sử dụng ExpressCard (EC) làm ví dụ, một cách tôi đã làm là 'đệm' số lượng bus để hỗ trợ thêm một thiết bị có thể phân nhánh cho nhiều thiết bị hơn; hầu hết các BIOS có khe EC đơn giản chỉ cần đệm nó bằng một số bus (chúng tôi đã sử dụng khe đó để mở rộng sang nhiều thiết bị PCIe). Tương tự, bạn có thể 'đệm' phạm vi bộ nhớ có thể để gán ở đó để hỗ trợ nhiều loại thiết bị có dải địa chỉ liền kề, giống với IRQ. Hệ điều hành (có / không có ACPI) sau đó có thể làm những gì nó sẽ làm. Nó thực sự "đơn giản", nhưng sự phức tạp của các lớp SW trong một máy hiện đại làm cho nó khó hơn.
Krunal Desai

Không phải liệt kê PCIe thực sự là một tìm kiếm đầu tiên chuyên sâu? Các thanh ghi cơ sở và giới hạn được thiết lập sao cho tất cả các thiết bị bên dưới một cổng nhất định phải được liệt kê trước khi chuyển sang cổng tiếp theo.
alex.forencich

8

Với điều kiện các kết nối giám sát trạng thái nguồn đã được tiếp xúc với đầu nối bằng công tắc ngược dòng bộ phận cắm có thể tiếp xúc với các chân này và được cấu hình để sử dụng chúng đúng cách (như Jippie lưu ý), phần mềm có thể phát hiện sự kiện cắm nóng và phản hồi đúng cách, Câu trả lời là có.

Nói chung, khả năng này chủ yếu được sử dụng trong các trang trại máy chủ và trung tâm dữ liệu để cắm các đĩa PCIe trong số những thứ khác; Tôi không chắc chắn rằng thiết bị tiêu dùng sẽ có khả năng cắm nóng hoàn toàn (tôi hiểu là tùy chọn trong thông số kỹ thuật).

Hãy nhớ rằng việc cung cấp phần cứng cần thiết để hỗ trợ chi phí cắm nóng (mặc dù phần lớn nằm trong điểm cuối của PCIe, nó vẫn phải được thiết lập, thường là thông qua eeprom), nó thường sẽ không được cung cấp trong thị trường nhạy cảm về giá.

Lưu ý rằng việc cập nhật động bản đồ địa chỉ PCI sẽ tăng thêm độ phức tạp đáng kể cho trình điều khiển PCI (e); nếu một thiết bị mới được chèn, thì nó phải được ánh xạ vào bất kỳ xe buýt nào mà nó sống, với các bản dịch địa chỉ mới được liên kết, nhưng nếu một thiết bị bị xóa và sau đó bị từ chối với một cái gì đó khác , thì việc theo dõi các địa chỉ không gian PCI khá phức tạp .

Không có sự phức tạp này, hệ thống con PCI được quét một lần (khi thiết lập lại hệ thống) và duy trì trạng thái tĩnh; không cần nỗ lực thêm.

Dưới đây là Thông số cơ sở PCIe v3.0 , trang 514, mục 6.7 về hỗ trợ cắm nóng. Một ví dụ về thẻ PCIe hỗ trợ phích cắm nóng có thể được nhìn thấy ở đây, nhờ vào iocrest . Có thể thấy rõ rằng dấu vết kết nối ngắn hơn được định tuyến: Thẻ điều khiển PCI-e 2 cổng SATA III (6G), Chipset Marvell 88SE9120

Tuy nhiên, trên thẻ Axxon này , có thể thấy rõ dấu vết ngắn hơn được chuyển đến thẻ kế bên. Ở cấp độ vật lý, thẻ này không thể hỗ trợ phích cắm nóng: Thẻ I / O Cổng nối tiếp MAP / 950 1 cho PCI Express (PCIe)


2

Nó được cho là hoạt động trên tất cả các phần cứng tuân thủ PCIe, liệu tất cả các phần cứng của người tiêu dùng có thực sự tuân thủ hay không là một câu hỏi hay, vì tôi không đi sâu vào thông số kỹ thuật của PCIe để biết về các yêu cầu kiểm tra và thậm chí sau đó, tất cả các nhà bán lẻ có kiểm tra tính hợp lệ của khiếu nại không? Tôi nghĩ rằng hầu như không làm.

Giống như toàn bộ điều tiêu chuẩn an toàn. Một nửa (<-hyperbole?) Các nhãn EE mà chúng tôi có bạn có thể yêu cầu khả năng tương thích mà không cần phải kiểm tra mọi thứ bạn thực hiện. Vì công cụ cắm nóng không đe dọa đến tính mạng nên tôi không thể tưởng tượng mọi người nghiêm khắc hơn về điều đó.

Tôi, trước hết, chưa bao giờ dùng thử và thấy rằng Máy tính xách tay Clevo của tôi đã mang máy tính để bàn ra khỏi nhà, tôi sẽ không dùng thử, vì mô-đun GPU trong máy tính xách tay của tôi khẳng định không có khả năng cắm nóng và quá đắt mà không bị Dave Jones và nhận $$$ cho vid của GPU phát nổ.


1

Có nó hoạt động. Tôi đã có thể làm cho nó hoạt động để cắm nóng một linecard khung bộ định tuyến (chứa hơn 10 thiết bị PCIe). Khung xe có 16 thẻ có khả năng cắm nóng. Bất kỳ thẻ nào cũng có thể được cắm hoặc rút ngẫu nhiên trong thời gian chạy mà không ảnh hưởng đến hoạt động giao thông trên các thẻ khác.

Sự phức tạp để làm cho nó hoạt động phụ thuộc vào môi trường CPU. Trên CPU nhúng, công việc chỉ đơn giản là thiết lập bản đồ tài nguyên tĩnh và xử lý các sự kiện thay đổi kết nối bằng cách gắn và tách các thiết bị PCI. Trên x86, nó liên quan nhiều hơn vì sự phức tạp trong xử lý lỗi và tương tác BIOS / OS.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.