Piękny byłby świat komputerów, gdyby sprzęt zachowywał się tak samo jak oprogramowanie. Pomyślmy o nowej karcie graficznej, którą instalujemy w komputerze, zaznaczamy myszką, klikamy kopiuj, wklej, i bach, mamy już dwie! Albo nawet i trzy. A gdy już się nam znudzi, przesuwamy ją do kosza i cieszymy się z podstawowej konfiguracji. Sceptycy krzykną: niemożliwe! Ale czy na pewno?
2. Semihalf Confidential
l
Plan
l
Jak to drzewiej bywało
l
PCI w szczegółach
l
Rodzaje elementów PCI
l
Połączenie elektryczne i adresacja
l
Dostęp pamięciowy
l
Enumeracja
l
Lepsze jest wrogiem dobrego – PCIe
l
Co nowego?
l
A co zostaje po staremu?
l
Przykład z życia wzięty, karta IXGBE
l
Co w karcie piszczy?
l
Przykład sterownika
l
Wirtualizacja SR-IOV
l
W dużej chmurze
l
Wirtualizacja
l
SR-IOV
4. Semihalf Confidential
l
Plan
l
Jak to drzewiej bywało
l
PCI w szczegółach
l
Rodzaje elementów PCI
l
Połączenie elektryczne i adresacja
l
Dostęp pamięciowy
l
Enumeracja
l
Lepsze jest wrogiem dobrego – PCIe
l
Co nowego?
l
A co zostaje po staremu?
l
Przykład z życia wzięty, karta IXGBE
l
Co w karcie piszczy?
l
Przykład sterownika
l
Wirtualizacja SR-IOV
l
W dużej chmurze
l
Wirtualizacja
l
SR-IOV
11. Semihalf Confidential
l
Plan
l
Jak to drzewiej bywało
l
PCI w szczegółach
l
Rodzaje elementów PCI
l
Połączenie elektryczne i adresacja
l
Dostęp pamięciowy
l
Enumeracja
l
Lepsze jest wrogiem dobrego – PCIe
l
Co nowego?
l
A co zostaje po staremu?
l
Przykład z życia wzięty, karta IXGBE
l
Co w karcie piszczy?
l
Przykład sterownika
l
Wirtualizacja SR-IOV
l
W dużej chmurze
l
Wirtualizacja
l
SR-IOV
14. Semihalf Confidential
l
Plan
l
Jak to drzewiej bywało
l
PCI w szczegółach
l
Rodzaje elementów PCI
l
Połączenie elektryczne i adresacja
l
Dostęp pamięciowy
l
Enumeracja
l
Lepsze jest wrogiem dobrego – PCIe
l
Co nowego?
l
A co zostaje po staremu?
l
Przykład z życia wzięty, karta IXGBE
l
Co w karcie piszczy?
l
Przykład sterownika
l
Wirtualizacja SR-IOV
l
W dużej chmurze
l
Wirtualizacja
l
SR-IOV
15. Semihalf Confidential
l
Rodzaje elementów PCI
l
Kontroler (Host Bridge, Root Complex)
l
„Gospodarz domu” dla magistrali PCI
l
Zapewnia dostęp procesorowi do urządzeń
l
Zapewnia dostęp urządzeniom do pamięci (localbus)
l
Przyjmuje przerwania od urządzeń i wysyła do CPU
l
Urządzenie (Device, End Point)
l
Np. karta sieciowa, SCSI, graficzna
l
Ma własne obszary przestrzeni, do których może odwoływać się
system (np. rejestry)
l
Oferuje od 1 do 8 funkcji
16. Semihalf Confidential
l
Plan
l
Jak to drzewiej bywało
l
PCI w szczegółach
l
Rodzaje elementów PCI
l
Połączenie elektryczne i adresacja
l
Dostęp pamięciowy
l
Enumeracja
l
Lepsze jest wrogiem dobrego – PCIe
l
Co nowego?
l
A co zostaje po staremu?
l
Przykład z życia wzięty, karta IXGBE
l
Co w karcie piszczy?
l
Przykład sterownika
l
Wirtualizacja SR-IOV
l
W dużej chmurze
l
Wirtualizacja
l
SR-IOV
17. Semihalf Confidential
l
Połączenia elektryczne i adresacja
l
Adresacja PCI ma strukturę drzewa
l
Każde złącze PCI posiada odrębny adres
w formacie
<bus>:<device>
l
Urządzenia dziedziczą adres po
macierzystym złączu, rozszerzając go o
funkcję
<bus>:<device>:<function>
l
W systemie może istnieć 256 magistral
(bus)
l
Każda magistrala może mieć 32
urządzenia (device)
l
Każde urządzenie może oferować 8
funkcji (function)
18. Semihalf Confidential
l
Połączenia elektryczne i adresacja
l
Każde urządzenie udostępnia
specjalny obszar zwany
„przestrzenią konfiguracyjną”
l
Dostęp do niej również jest specjalny
i odbywa się z użyciem adresów
<bus>:<device>:<func>
l
W Linuksie:
l
pci_read_config(bus, dev, func,
reg)
l
pci_write_config(bus, dev, func,
reg, val)
19. Semihalf Confidential
l
Plan
l
Jak to drzewiej bywało
l
PCI w szczegółach
l
Rodzaje elementów PCI
l
Połączenie elektryczne i adresacja
l
Dostęp pamięciowy
l
Enumeracja
l
Lepsze jest wrogiem dobrego – PCIe
l
Co nowego?
l
A co zostaje po staremu?
l
Przykład z życia wzięty, karta IXGBE
l
Co w karcie piszczy?
l
Przykład sterownika
l
Wirtualizacja SR-IOV
l
W dużej chmurze
l
Wirtualizacja
l
SR-IOV
20. Semihalf Confidential
l
Dostęp pamięciowy
l
Każde urządzenie udostępnia co najmniej jeden obszar „pamięciowy”, do
którego CPU może pisać i czytać. Znajdują się tam zwykle rejestry.
l
Rozmiar tych „okienek” można odczytać z... <piwo>
l
Po skonfigurowaniu, procesor może korzystać z nich jak z normalnej
pamięci, np.:
uint32_t *addr = dma_map(WIN0_PHYS_ADDR, WIN0_SIZE);
*addr = 0xdeadbeef;
21. Semihalf Confidential
l
Dostęp pamięciowy
l
Każde urządzenie udostępnia co najmniej jeden obszar „pamięciowy”, do
którego CPU może pisać i czytać. Znajdują się tam zwykle rejestry.
l
Rozmiar tych „okienek” można odczytać z rejestrów BAR przestrzeni
konfiguracyjnej urządzenia.
l
Po skonfigurowaniu, procesor może korzystać z nich jak z normalnej
pamięci, np.:
uint32_t *addr = dma_map(WIN0_PHYS_ADDR, WIN0_SIZE);
*addr = 0xdeadbeef;
23. Semihalf Confidential
l
Plan
l
Jak to drzewiej bywało
l
PCI w szczegółach
l
Rodzaje elementów PCI
l
Połączenie elektryczne i adresacja
l
Dostęp pamięciowy
l
Enumeracja
l
Lepsze jest wrogiem dobrego – PCIe
l
Co nowego?
l
A co zostaje po staremu?
l
Przykład z życia wzięty, karta IXGBE
l
Co w karcie piszczy?
l
Przykład sterownika
l
Wirtualizacja SR-IOV
l
W dużej chmurze
l
Wirtualizacja
l
SR-IOV
24. Semihalf Confidential
l
Enumeracja
l
System komputerowy ma pewien obszar
przestrzeni fizycznej przeznaczony na okienka
urządzeń PCI.
l
System operacyjny przeprowadza
„enumerację” według poniższego algorytmu:
1. Ustaw początkowy numer magistralu bus=0
2. Odczytaj DEV_ID i VEND_ID każdego urządzenia
i funkcji (bus:0:0 – bus:31:7).
3. Jeśli urządzenie jest podłączone, określ jego typ.
1. Jeśli jest to urządzenie EndPoint, sprawdź jakie
okna udostępnia.
1. Ulokuj dane okno w nieprzydzielonej części
„obszar PCI”.
2. Zapisz odpowiedni adres fizyczny do rejestru
BAR[X] urządzenia
2. Jeśli jest to urządzenie Bridge, zwiększ numer
„bus” o 1 i wykonaj enumerację na nowej
magistrali.
25. Semihalf Confidential
l
Enumeracja
l
Po enumeracji, w przestrzeni PCI pojawiają się
wmapowane okna BAR urządzeń.
l
Każdy rejestr BAR urządzenia zawiera odpowiedni
adres fizyczny, by wiedziało ono jakie transakcje są
adresowane do niego.
l
Od tego momentu, system operacyjny może używać
urządzeń.
26. Semihalf Confidential
l
Plan
l
Jak to drzewiej bywało
l
PCI w szczegółach
l
Rodzaje elementów PCI
l
Połączenie elektryczne i adresacja
l
Dostęp pamięciowy
l
Enumeracja
l
Lepsze jest wrogiem dobrego – PCIe
l
Co nowego?
l
A co zostaje po staremu?
l
Przykład z życia wzięty, karta IXGBE
l
Co w karcie piszczy?
l
Przykład sterownika
l
Wirtualizacja SR-IOV
l
W dużej chmurze
l
Wirtualizacja
l
SR-IOV
27. Semihalf Confidential
l
Lepsze jest wrogiem dobrego
l
Standard PCI miał wady:
l
Stał się zbyt wolny w stosunku do wymagań (max. 266MB/s)
l
Zwiększenie szybkości okazało się niemożliwe z powodu
integralności sygnałów cyfrowych
l
Miał tylko 32-bitową linię adresową
28. Semihalf Confidential
l
Plan
l
Jak to drzewiej bywało
l
PCI w szczegółach
l
Rodzaje elementów PCI
l
Połączenie elektryczne i adresacja
l
Dostęp pamięciowy
l
Enumeracja
l
Lepsze jest wrogiem dobrego – PCIe
l
Co nowego?
l
A co zostaje po staremu?
l
Przykład z życia wzięty, karta IXGBE
l
Co w karcie piszczy?
l
Przykład sterownika
l
Wirtualizacja SR-IOV
l
W dużej chmurze
l
Wirtualizacja
l
SR-IOV
31. Semihalf Confidential
l
Co nowego? - połączenia point-to-point
Adres (odpowiednik MAC), złożony z bus:device:function
Przykładowy pakiet zapisu uint32_t pod 32-bitowy adres
32. Semihalf Confidential
l
Co nowego? - prędkość
l
PCIe 1.0 x1 oferowało taką samą prędkość jak dotychczasowy interfejs PCI
l
Możliwość agregacji sprawiła, że efektywnie był on 16 razy szybszy
33. Semihalf Confidential
l
Plan
l
Jak to drzewiej bywało
l
PCI w szczegółach
l
Rodzaje elementów PCI
l
Połączenie elektryczne i adresacja
l
Dostęp pamięciowy
l
Enumeracja
l
Lepsze jest wrogiem dobrego – PCIe
l
Co nowego?
l
A co zostaje po staremu?
l
Przykład z życia wzięty, karta IXGBE
l
Co w karcie piszczy?
l
Przykład sterownika
l
Wirtualizacja SR-IOV
l
W dużej chmurze
l
Wirtualizacja
l
SR-IOV
34. Semihalf Confidential
l
Co zostaje po staremu?
l
Warstwa logiczna jest w pełni kompatybilna z PCI
l
Dotychczasowy kod sterowników może działać bez modyfikacji
Wszystko inne!
35. Semihalf Confidential
l
Plan
l
Jak to drzewiej bywało
l
PCI w szczegółach
l
Rodzaje elementów PCI
l
Połączenie elektryczne i adresacja
l
Dostęp pamięciowy
l
Enumeracja
l
Lepsze jest wrogiem dobrego – PCIe
l
Co nowego?
l
A co zostaje po staremu?
l
Przykład z życia wzięty, karta IXGBE
l
Co w karcie piszczy?
l
Przykład sterownika
l
Wirtualizacja SR-IOV
l
W dużej chmurze
l
Wirtualizacja
l
SR-IOV
39. Semihalf Confidential
l
Plan
l
Jak to drzewiej bywało
l
PCI w szczegółach
l
Rodzaje elementów PCI
l
Połączenie elektryczne i adresacja
l
Dostęp pamięciowy
l
Enumeracja
l
Lepsze jest wrogiem dobrego – PCIe
l
Co nowego?
l
A co zostaje po staremu?
l
Przykład z życia wzięty, karta IXGBE
l
Co w karcie piszczy?
l
Przykład sterownika
l
Wirtualizacja SR-IOV
l
W dużej chmurze
l
Wirtualizacja
l
SR-IOV
42. Semihalf Confidential
l
Plan
l
Jak to drzewiej bywało
l
PCI w szczegółach
l
Rodzaje elementów PCI
l
Połączenie elektryczne i adresacja
l
Dostęp pamięciowy
l
Enumeracja
l
Lepsze jest wrogiem dobrego – PCIe
l
Co nowego?
l
A co zostaje po staremu?
l
Przykład z życia wzięty, karta IXGBE
l
Co w karcie piszczy?
l
Przykład sterownika
l
Wirtualizacja SR-IOV
l
W dużej chmurze
l
Wirtualizacja
l
SR-IOV
43. Semihalf Confidential
l
W dużej chmurze
Problemy:
● Emulowany interfejs jest
wolny
● Dzięki PCI-passthrough jest
szybki, ale tylko jeden
44. Semihalf Confidential
l
Plan
l
Jak to drzewiej bywało
l
PCI w szczegółach
l
Rodzaje elementów PCI
l
Połączenie elektryczne i adresacja
l
Dostęp pamięciowy
l
Enumeracja
l
Lepsze jest wrogiem dobrego – PCIe
l
Co nowego?
l
A co zostaje po staremu?
l
Przykład z życia wzięty, karta IXGBE
l
Co w karcie piszczy?
l
Przykład sterownika
l
Wirtualizacja SR-IOV
l
W dużej chmurze
l
Wirtualizacja
l
SR-IOV
46. Semihalf Confidential
l
Plan
l
Jak to drzewiej bywało
l
PCI w szczegółach
l
Rodzaje elementów PCI
l
Połączenie elektryczne i adresacja
l
Dostęp pamięciowy
l
Enumeracja
l
Lepsze jest wrogiem dobrego – PCIe
l
Co nowego?
l
A co zostaje po staremu?
l
Przykład z życia wzięty, karta IXGBE
l
Co w karcie piszczy?
l
Przykład sterownika
l
Wirtualizacja SR-IOV
l
W dużej chmurze
l
Wirtualizacja
l
SR-IOV
47. Semihalf Confidential
l
Funkcje wirtualne
● Funkcja wirtualna jest „lekką” funkcją, duplikującą funkcjonalność funkcji
fizycznej z jaką jest skojarzona
● Każde urządzenie może oferować 4095 funkcji wirtualnych
● Można je dynamicznie włączać i wyłączać
● Z punktu widzenia użytkownika są to pełnoprawne urządzenia PCIe
● Z punktu widzenia sterowników, funkcje wirtualne nie mająnie mają
configuration spaceconfiguration space
SR-IOV – Single Root I/O Virtualization