Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Wirtualizacja urządzeń PCI (SR-IOV).

386 views

Published on

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?

Published in: Software
  • Login to see the comments

  • Be the first to like this

Wirtualizacja urządzeń PCI (SR-IOV).

  1. 1. Semihalf Confidential Kilka słów o PCI, PCIe i wirtualizacji IO Wojciech Macek
  2. 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
  3. 3. Semihalf Confidential l Karta Intel-x520
  4. 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
  5. 5. Semihalf Confidential
  6. 6. Semihalf Confidential
  7. 7. Semihalf Confidential
  8. 8. Semihalf Confidential
  9. 9. Semihalf Confidential
  10. 10. Semihalf Confidential
  11. 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
  12. 12. Semihalf Confidential
  13. 13. Semihalf Confidential
  14. 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. 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. 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. 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. 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. 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. 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. 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;
  22. 22. Semihalf Confidential l Dostęp pamięciowy l System operacyjny, poprzez zapis do rejestrów BAR mówi urządzeniu, na jakie adresy fizyczne ma „reagować”.
  23. 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. 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. 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. 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. 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. 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
  29. 29. Semihalf Confidential l Co nowego? - transmisja szeregowa
  30. 30. Semihalf Confidential l Co nowego? - połączenia point-to-point
  31. 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. 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. 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. 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. 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
  36. 36. Semihalf Confidential l Karta Intel-x520
  37. 37. Semihalf Confidential l Karta Intel-x520 [root@localhost ~]# lspci -s 03:00.0 03:00.0 Ethernet controller: Intel Corporation 82599EB 10- Gigabit SFI/SFP+ Network Connection (rev 01) [root@localhost ~]# lspci -s 03:00.1 03:00.1 Ethernet controller: Intel Corporation 82599EB 10- Gigabit SFI/SFP+ Network Connection (rev 01)
  38. 38. Semihalf Confidential l Karta Intel-x520 – w środku
  39. 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
  40. 40. Semihalf Confidential l Przykład sterownika
  41. 41. Semihalf Confidential l Przykład sterownika
  42. 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. 43. Semihalf Confidential l W dużej chmurze Problemy: ● Emulowany interfejs jest wolny ● Dzięki PCI-passthrough jest szybki, ale tylko jeden
  44. 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
  45. 45. Semihalf Confidential l Co nowego? - połączenia point-to-point
  46. 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. 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
  48. 48. Semihalf Confidential l Funkcje wirtualne - włączanie
  49. 49. Semihalf Confidential l Funkcje wirtualne - włączanie Od strony użytkownika: modprobe ixgbe max_vfs=3 Od strony sterownika: err = pci_enable_sriov(adapter->pdev, adapter->num_vfs); root@node1:~# lspci 08:00.0 Ethernet controller: Intel Corporation 82599ES 10- Gigabit SFI/SFP+ Network Connection (rev 01) 08:10.0 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 08:10.2 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 08:10.4 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01)
  50. 50. Semihalf Confidential l Funkcje wirtualne – okna BAR
  51. 51. Semihalf Confidential l Funkcje wirtualne – okna BAR
  52. 52. Semihalf Confidential l Funkcje wirtualne – okna BAR
  53. 53. Semihalf Confidential l Karta Intel-x520 – w środku
  54. 54. Semihalf Confidential l Funkcje wirtualne – przykład sterownika static DEFINE_PCI_DEVICE_TABLE(ixgbevf_pci_tbl) = { {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82599_VF), board_82599_vf }, {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_X540_VF), board_X540_vf }, /* required last entry */ {0, } }; MODULE_DEVICE_TABLE(pci, ixgbevf_pci_tbl); static struct pci_driver ixgbevf_driver = { .name = ixgbevf_driver_name, .id_table = ixgbevf_pci_tbl, .probe = ixgbevf_probe, ... };
  55. 55. Semihalf Confidential l Q&A Pytania

×