Pamięć nie jest płaska! Wręcz przeciwnie – dostęp do pamięci operacyjnej jest nierównomierny, a tworzenie wydajnego oprogramowania polega na umiejętnym wykorzystaniu podsystemu pamięci wraz z całą jego wielopoziomową hierarchią.
Z prezentacji dowiesz się:
Jaki wpływ na wydajność programów ma pamięć operacyjna?
Jak przyspieszyć działanie programów?
Kiedy korzystać z pamięci RAM lub Cache?
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?
Złam zasady i stwórz wydajny stos IP przy użyciu DPDKSemihalf
W prezentacji znajdziesz opis zagadnienia przetwarzania pakietów w wysokowydajnych sieciach światłowodowych. Koncepcja przetwarzania ruchu sieciowego w przestrzeni użytkownika oparta jest na zastosowaniu frameworku DPDK na platformie Linux/x86.
Czym są heterogeniczne systemy mikroprocesorowe?Semihalf
Wyjaśnimy Ci co to jest system heterogoniczny, jak wygląda Linuxowy sterownik do "misc. character device" oraz w jaki sposób Linux może dogadać się z FreeRTOSem.
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?
Złam zasady i stwórz wydajny stos IP przy użyciu DPDKSemihalf
W prezentacji znajdziesz opis zagadnienia przetwarzania pakietów w wysokowydajnych sieciach światłowodowych. Koncepcja przetwarzania ruchu sieciowego w przestrzeni użytkownika oparta jest na zastosowaniu frameworku DPDK na platformie Linux/x86.
Czym są heterogeniczne systemy mikroprocesorowe?Semihalf
Wyjaśnimy Ci co to jest system heterogoniczny, jak wygląda Linuxowy sterownik do "misc. character device" oraz w jaki sposób Linux może dogadać się z FreeRTOSem.
Prezentacja dotycząca wydajnego przetwarzania ruchu IP na PC wygłoszona podczas IT Conference na WAT (http://itacademicday.azurewebsites.net/), listopad 2015.
(Polish only) Talk regarding effective IP traffic processing on x86 platforms, given at IT Academic Day / Military University of Technology in Warsaw, November 2015.
Ochrona przed atakami DDoS na platformie x86. Czy można mieć jednocześnie wyd...Redge Technologies
(Polish only)
Gaming/DDoS mitigation/x86 performance and elasticity.
Talk given at Net::IP meetup in Wrocław, Poland (2017.05): https://www.meetup.com/Wroclaw-Net-IP-Meetup/events/238738376/
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03Semihalf
Przedstawiamy firmware UEFI, dzięki któremu możliwe jest coraz śmielsze wkraczanie architektury ARM64 do świata urządzeń serwerowych, czyli królestwa władanego przez Intel. Standardy, ich założenia i realizacja zostałą przybliżona na przykładzie dodawania wsparcia dla n
PLNOG19 - Jakub Słociński - Wieloprocesorowa platforma x86 a wydajny routing ...PROIDEA
W trakcie wykładu poruszony zostanie temat użycia platform serwerowych na potrzeby wydajnego routingu pakietów. Mocne i słabe strony zastosowania architektury jedno- czy wieloprocesorowej pod kątem konfiguracji sieciowej, jej wypływ na wydajność oraz skalowalność rozwiązania.
Droga, którą procesor przebywa od włączenia do uruchomienia systemu operacyjnego, jest długa, kręta i pełna pułapek. Prezentacja nakreśla jej przebieg, ze szczególnym uwzględnieniem niełatwych początków uruchamiania systemu. Aplikacja Hello World była pisana na wiele sposobów, a tutaj pojawi się kolejny: Bare Metal.
Pewnego dnia przychodzi do Ciebie szef i mówi, że od dzisiaj przestajesz testować aplikacje webowe i będziesz testował oprogramowanie wbudowane. Oczywiście nie byłoby w tym nic dramatycznego gdyby nie okazało się, że to oprogramowanie wbudowane w nanosatelity. Z pewnością w głowie testera pojawiają się pytania jak bardzo zapewnianie jakości w takim środowisku może się różnić od aplikacji czy systemów „naziemnych”.
Wprowadzę Cię w domenę kosmiczną na przykładzie oprogramowania pisanego na satelity, a konkretnie na czujnik słońca, który poleci na jednej z nich.
Zagadnienia, które się pojawią:
– wprowadzenie w działanie nanosatelitów
– podstawy systemów wbudowanych działających w przestrzeni kosmicznej
– środowisko kosmiczne i jego wpływ na oprogramowanie
– różnice w testowaniu satelity od testowania standardowych aplikacji oraz od testowania przemysłowego oprogramowania wbudowanego
– jak testować, co testować, narzędzia, typy testów, standardy
– jak wygląda piramida testów automatycznych
– ograniczenia w testowaniu
– kompetencje testera satelitów/systemów wbudowanych
– wyniki pracy oraz osobista retrospektywa
ARM CoreSight - sprawdź, co tak naprawdę robi Twój SoC.Semihalf
Prezentacja barcampu firmy Semihalf.
Opowiadamy jak działa system ARM CoreSight. Przedstawiamy jego komponenty oraz zasady współdziałania i konfigurowania. Pokazujemy sposób integracji systemu CoreSight z Linuxowym narzędziem Perf oraz przykłady jego użycia podczas profilowania kodu.
CPU GHOST BUSTING. Semihalf Barcamp Special. Semihalf
Z prezentacji dowiesz się jak działają nowoczesne procesory, jakich technik używają (Speculative Execution, Branch Prediction) aby zwiększyć wydajność i jak to się stało, że niektóre z tych usprawnień mogą być sprytnie wykorzystane do pozyskania poufnych danych. Omawiamy przykład złośliwego kodu wykorzystującego te luki i skutki jego działania. Pokazujemy mechanizmy obrony i wyjaśniamy jakie mogą przynosić ograniczenia.
Prezentacja dotycząca wydajnego przetwarzania ruchu IP na PC wygłoszona podczas IT Conference na WAT (http://itacademicday.azurewebsites.net/), listopad 2015.
(Polish only) Talk regarding effective IP traffic processing on x86 platforms, given at IT Academic Day / Military University of Technology in Warsaw, November 2015.
Ochrona przed atakami DDoS na platformie x86. Czy można mieć jednocześnie wyd...Redge Technologies
(Polish only)
Gaming/DDoS mitigation/x86 performance and elasticity.
Talk given at Net::IP meetup in Wrocław, Poland (2017.05): https://www.meetup.com/Wroclaw-Net-IP-Meetup/events/238738376/
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03Semihalf
Przedstawiamy firmware UEFI, dzięki któremu możliwe jest coraz śmielsze wkraczanie architektury ARM64 do świata urządzeń serwerowych, czyli królestwa władanego przez Intel. Standardy, ich założenia i realizacja zostałą przybliżona na przykładzie dodawania wsparcia dla n
PLNOG19 - Jakub Słociński - Wieloprocesorowa platforma x86 a wydajny routing ...PROIDEA
W trakcie wykładu poruszony zostanie temat użycia platform serwerowych na potrzeby wydajnego routingu pakietów. Mocne i słabe strony zastosowania architektury jedno- czy wieloprocesorowej pod kątem konfiguracji sieciowej, jej wypływ na wydajność oraz skalowalność rozwiązania.
Droga, którą procesor przebywa od włączenia do uruchomienia systemu operacyjnego, jest długa, kręta i pełna pułapek. Prezentacja nakreśla jej przebieg, ze szczególnym uwzględnieniem niełatwych początków uruchamiania systemu. Aplikacja Hello World była pisana na wiele sposobów, a tutaj pojawi się kolejny: Bare Metal.
Pewnego dnia przychodzi do Ciebie szef i mówi, że od dzisiaj przestajesz testować aplikacje webowe i będziesz testował oprogramowanie wbudowane. Oczywiście nie byłoby w tym nic dramatycznego gdyby nie okazało się, że to oprogramowanie wbudowane w nanosatelity. Z pewnością w głowie testera pojawiają się pytania jak bardzo zapewnianie jakości w takim środowisku może się różnić od aplikacji czy systemów „naziemnych”.
Wprowadzę Cię w domenę kosmiczną na przykładzie oprogramowania pisanego na satelity, a konkretnie na czujnik słońca, który poleci na jednej z nich.
Zagadnienia, które się pojawią:
– wprowadzenie w działanie nanosatelitów
– podstawy systemów wbudowanych działających w przestrzeni kosmicznej
– środowisko kosmiczne i jego wpływ na oprogramowanie
– różnice w testowaniu satelity od testowania standardowych aplikacji oraz od testowania przemysłowego oprogramowania wbudowanego
– jak testować, co testować, narzędzia, typy testów, standardy
– jak wygląda piramida testów automatycznych
– ograniczenia w testowaniu
– kompetencje testera satelitów/systemów wbudowanych
– wyniki pracy oraz osobista retrospektywa
ARM CoreSight - sprawdź, co tak naprawdę robi Twój SoC.Semihalf
Prezentacja barcampu firmy Semihalf.
Opowiadamy jak działa system ARM CoreSight. Przedstawiamy jego komponenty oraz zasady współdziałania i konfigurowania. Pokazujemy sposób integracji systemu CoreSight z Linuxowym narzędziem Perf oraz przykłady jego użycia podczas profilowania kodu.
CPU GHOST BUSTING. Semihalf Barcamp Special. Semihalf
Z prezentacji dowiesz się jak działają nowoczesne procesory, jakich technik używają (Speculative Execution, Branch Prediction) aby zwiększyć wydajność i jak to się stało, że niektóre z tych usprawnień mogą być sprytnie wykorzystane do pozyskania poufnych danych. Omawiamy przykład złośliwego kodu wykorzystującego te luki i skutki jego działania. Pokazujemy mechanizmy obrony i wyjaśniamy jakie mogą przynosić ograniczenia.
[#2] architektura - IBM Integrated Analytics SystemArtur Wronski
Presentation #2 from IBM conference "Analityka Nowej Generacji", 8th of March 2018, Warsaw
Title: IBM Integrated Analytics System architecture
Presenter: Marcin Marczewski
[language: polish]
PLNOG 17 - Sławomir Janukowicz - NFV – using Juniper vMX, vSRX and NFXPROIDEA
Zaprezentowany zostanie obecny status rozwiązań NFV. Ich historyczne znaczenie w przeszłości, zmiany na rynku, które doprowadziły do ponownego odkrycia tej technologii. Pokazane zostana możliwe scieżki rozwoju rozwiązań NFV i co w chwili obecnej stanowi blokadę do szerszego wdrożenia tych technologii. Zaprezentowane zostaną przykłady implementacji technolgoii NFV z wykorzystaniem rozwiązań Juniper vSRX vMX oraz produktów z rodziny NFX
Embedded Debugging, czyli co kryje się w jądrze?Semihalf
Prezentacja barcampu firmy Semihalf z 27.11.2018 r.
Jak zaglądnąć tam gdzie pozornie jest to niewykonalne? Kernel panic? Crash dump? Za pomocą narzędzi software'owych i sprzętowych można rozwiązać i takie problemy.
Zagadnienia:
Wsparcie sprzętowe procesorów do debugowania (stepping, pmu, etc.)
Wsparcie systemu operacyjnego (trap, crash dump)
Narzędzia: LLDB, KDB
Case study: (Linux, FreeBSD, macOS, Windows)
Wiele portów w jednym kontrolerze Gigabit Ethernet - jak to oprogramować w Linuksie? Powiązanie działania sprzętu ze stosem sieciowym systemu operacyjnego na przykładzie nowego sterownika dodanego do Linuksa v3.17.
Magistrale rozszerzen- referat na nie wiem kiedy ale niech już sobie będzie. Nudne i bardzo nieciekawe. UWAGA! Możliwość skutków ubocznych takich jak: uczucie nudy, senność, brak apetytu, bóle i zawroty głowy, stany depresyjne, stany lękowe, drętwienia, bóle stawów i mięśni, neutropenia, agranulocytoza, trombocytopenia.
W przypadku wystąpienia innych, niewymienionych objawów niepożądanych, również należy poinformować o nich osobę prowadzącą referat.
Meetup #1 - Świat Komputera Przed Systemem Operacyjnym Semihalf
Prezentacja z Meetupu grupy Software Meets Hardware in Wrocław.
Na spotkaniu opisywaliśmy co dzieje się w komputerze zanim wystartuje system operacyjny, czyli tuż po włączeniu komputera lub wciśnięciu przycisku reset oraz co to jest firmware i jakie są jego rodzaje.
Uwaga na buga! GDB w służbie programisty. Barcamp Semihalf S09:E01Semihalf
Prezentacja z barcampu firmy Semihalf (S09:E01). Zapis wideo dostępny jest na naszym kanale YouTube: https://youtu.be/jAp-bi-3ZiE
Omawiamy najpopularniejsze polecenia GDB, zwracając uwagę na często pomijane niuanse pozwalające ułatwić i przyspieszyć proces debugowania. Wyjaśniamy jak automatyzować i przyspieszać pracę w programie. Prezentujemy niektóre rozszerzenia. Opowiadamy o wstecznym wykonywaniu kodu oraz o możliwościach GDB, które bywają zapominane, a w konkretnych sytuacjach są niezastąpione.
Oczyszczacz powietrza i stos sieciowy? Czas na test! Semihalf Barcamp 13/06/2018Semihalf
Podczas wykładu pomijamy jakość filtracji powietrza natomiast skupiamy się na metodach testowania protokołów sieciowych przy wykorzystaniu języka TTCN-3. Sprawdzamy jakie dane nasze domowe urządzenia wysyłają w świat oraz jak można przejąć nad nimi kontrolę.
Prezentacja z barcampu firmy Semihalf. Przyglądamy się potencjałowi jaki leży w z pozoru starych urządzeniach domowych. Wystarczy pomysł, lutownica, odrobina determinacji i otwarty umysł by użyć stary router jako bazę do stworzenia własnego urządzenia komputerowego.
Prezentacja z barcampu firmy semihalf. Spotkanie miało formę interaktywnego quizu. Zaprezentowaliśmy kilkanaście nietypowych bugów, z którymi mieliśmy do czynienia. Uczestnicy wskazywali właściwe rozwiązania.
Skazani na firmware. ARM Trusted Firmware. S07E02Semihalf
Czy zastanawiałeś się kiedyś, jakie funkcjonalności realizuje nowoczesne oprogramowanie układowe?
Zapraszamy na prezentację poświęconą technologii ARM Trusted Firmware, na którym opowiemy w jaki sposób nowoczesne systemy radzą sobie z kwestiami bezpieczeństwa na przykładzie ARM Trusted Firmware. Zaprezentujemy także różnice między światem zaufanym a światem normalnym, czy i jak te dwa światy są w stanie istnieć w jednym systemie oraz co je łączy.
Skazani na firmware. Świat komputera przed systemem operacyjnym.Semihalf
Czy zastanawiałeś się kiedyś co dzieje się po włączeniu komputera lub wciśnięciu przycisku RESET?
Zanim uruchomi się Twój system operacyjny mija kilka sekund - przyjrzymy się im z bliska. Odpowiemy na pytania co to jest firmware i jakie są jego rodzaje.
Software Defined Networks (SDN) na przykładzie rozwiązania OpenContrail.Semihalf
Z prezentacji dowiesz się:
Co to są sieci programowalne i wirtualizowane (SDN / NFV)?
Jaką nową jakość wprowadzają one dla operatorów chmur obliczeniowych i centrów danych?
W jaki sposób technologia OpenContrail realizuje sieci nowej generacji?
Jak wygląda mikrokontroler od środka? W jaki sposób do niego mówić? Jak tłumaczy się kod C na wykonanie w sprzęcie? Skąd bierze się instrukcja? Gdzie szukać wyników operacji?
Dowiecie się, co to jest język opisu sprzętu i jak się go używa oraz jak zaprojektować własną architekturę mikrokontrolera z użyciem jednego z nich – języka Verilog.
Jak realizowana jest wielozadaniowość na pojedynczym CPU oraz jakie są jej konsekwencje? Czy “mutex to taki binarny semafor”? Dlaczego Windows nie jest używany do sterowania rakietami oraz jaki popularny błąd omal nie spowodował utraty jednej z misji NASA?
Linux KVM - wsparcie dla wirtualizacji w kontekście serwerów ARM.Semihalf
Dowiesz się na czym polega tajemnica kilku równoległych systemów operacyjnych. Wprowadzimy Cię w świat wirtualnych systemów operacyjnych, poznasz metody umożliwiające ich incepcję oraz zoptymalizujesz wydajność swojej maszyny wirtualnej.
SmartNIC - wprowadzenie do inteligentnych interfejsów sieciowych.Semihalf
Dzięki prezentacji poznasz wyzwania jakie stawia rynek infrastrukturze sieciowej, dowiesz się jakie są główne potrzeby w tym obszarze, zapoznasz się z ewolucją kart sieciowych.
Wirtualizacja sieci na przykładzie OpenContrail vRouter.Semihalf
W prezentacji wyjaśniamy:
- Czym są programowalne sieci komputerowe (SDN - Software Defined Networks)?
- Jakie korzyści daje nam wirtualizacja funkcji sieciowych (NFV - Network Functions Virtualization)?
- Jak zrobić szybki routing pomiędzy maszynami wirtualnymi?
DTrace, czyli jak zobaczyć to czego nie widać.Semihalf
"Szanowny Panie, Pana program działa, ale niestety wolno. Czy da się go przyspieszyć?" Który programista nie spotkał się z takim stwierdzeniem niech pierwszy rzuci kamień. W prezentacji poruszamy tematykę analizy wydajności programów za pomocą narzędzia DTrace.
Wiele już powiedziano i napisano o bezpiecznym kodowaniu.
My skupiamy się w prezentacji na bezpiecznym kodowaniu w języku C na podstawie realnych podatności znalezionych w znanych programach i bibliotekach oraz kernelu Linuxa.
FreeBSD on Cavium ThunderX System on a ChipSemihalf
The lecture given during BSDCan 2016 by Wojtek Macek that describes the FreeBSD operating system port for the Cavium ThunderX CN88XX System on a Chip. ThunderX is a newly introduced, ARM64 (ARMv8) SoC designed for the high performance and server markets. It is currently the only one in the ARM world to incorporate up to 96 CPU cores in the system along with the whole technology to make it possible.
2. Kto mówi?
● Inżynier systemów wbudowanych
● Linux, ARMv7, ARMv8
● ...które mają 16GB RAM
3. Kto mówi?
● Inżynier systemów wbudowanych
● Linux, ARMv7, ARMv8
● ...które mają 16GB RAM
● ...40 Gb/s przepustowość sieci
4. Kto mówi?
● Inżynier systemów wbudowanych
● Linux, ARMv7, ARMv8
● ...które mają 16GB RAM
● ...40 Gb/s przepustowość sieci
● ...i są wbudowane w rack
5. Quiz
#define N (1024 * 1024)
long a[N];
void quiz(unsigned step) {
unsigned i;
for (i = 0; i < N; i += step)
a[i] *= 3;
}
6. Relatywny koszt quiz(1), quiz(2)...?
#define N (1024 * 1024)
long a[N];
void quiz(unsigned step) {
unsigned i;
for (i = 0; i < N; i += step)
a[i] *= 3;
}
Przemnóż co n-ty
element tablicy.
19. Czas dostępu do pamięci - ARM
* 4x Cortex A15 1.60 GHz
L1
16KB
L2
4MB
20. Wnioski
● 1ns - średnio 2 cykle CPU (2GHz)
● 1 cykl ~ 1 operacja dodawania (mnożenia)
● Większy cache - dłuższy dostęp
● Dostęp do DDR prawie nie zależy od CPU
● Zasada lokalności
33. Kod pomiarowy
void benchmark(long id)
{
struct list *l = list;
unsigned iters = iterations;
while (iters--)
{
l->pad[id] += 1; // synchronizacja cache
l = l->next;
}
}
34. Hyper-threading
● Dwa (więcej) “logiczne” wątki dzielą jeden
rdzeń
● Wspólny cache L1
● Tania synchronizacja (przez L1, nie L3)
● Większe zużycie cache (nawet 50% na
wątek)
● SPARC T5 (2012) - 8 wątków, 16 rdzeni
35. Plan
1. Cache i RAM
2. Dostęp nie taki znowu swobodny
3. Dostęp lepiej niż sekwencyjny
4. Współbieżność a pamięć
5. Optymalizacja kodu
36. Techniki poprawy lokalności danych
● Tablice jako główny “kontener” danych
● Rozkładanie pól w strukturach / klasach
● Podział danych na lokalne i wspólne
● Alternatywne metody alokacji pamięci
○ Pule pamięci
○ inne implementacje malloc()
○ HugeTLB
39. Lokalna optymalizacja struktur / klas
struct Bad {
int flags;
long a[7];
int counter;
};
$ pahole -C Bad test_prog
struct Bad {
int flags; /* 0 4 */
/* XXX 4 bytes hole, try to pack */
long int a[7]; /* 8 56 */
/* --- cacheline 1 boundary (64 bytes) --- */
int counter; /* 64 4 */
/* size: 72, cachelines: 2, members: 3 */
/* sum members: 64, holes: 1, sum holes: 4 */
/* padding: 4 */
/* last cacheline: 8 bytes */
};
40. Pakiet dwarves - program “pahole”
● Rozmieszczenie pól w pamięci
● “przerwy” w strukturach
● wypełnienie na końcu struktury
● sugeruje reorganizację (opcja -R)
● diagnozuje problemy z niezgodnością
struktur (łatwo porównać wydruki)
41. Lokalna optymalizacja struktur c.d
struct Good {
int flags;
int counter;
long a[7];
};
$ pahole -C Good test_prog
struct Good {
int flags; /* 0 4 */
int counter; /* 4 4 */
long int array[7]; /* 8 56 */
/* --- cacheline 1 boundary (64 bytes) --- */
/* size: 64, cachelines: 1, members: 3 */
};
42. Poprawiamy struktury c.d.
struct Pretty {
int flags; /* 0 4 */
int counter; /* 4 4 */
long int array[7]; /* 8 56 */
/* -- cacheline 1 boundary (64 bytes) -- */
long int not_used; /* 64 8 */
/* size: 72, cachelines: 2, members: 4 */
/* last cacheline: 8 bytes */
};
struct Ugly {
long int not_used; /* 0 8 */
long int array[7]; /* 8 56 */
/* -- cacheline 1 boundary (64 bytes) -- */
int flags; /* 64 4 */
int counter; /* 68 4 */
/* size: 72, cachelines: 2, members: 4 */
/* last cacheline: 8 bytes */
};
44. Unikanie false sharing - inne CC
● Wyrównanie = rozmiar zmiennej
struct Shared {
struct producer prod;
/* -- nowa linijka cache -- */
struct {
...
char pad[64 - SIZE];
} cons; /* cons ma rozmiar 64B i wyrównanie 64B */
};
45. Alternatywy dla malloc() - pula
● Stały rozmiar obiektów
● Minimalny czas alokacji/zwalniania
● Bezpieczne dla wielu wątków
● Oparte na tablicach! (cyklicznych)
◌
wolne
zajęte
46. Alternatywy dla malloc() c.d.
● jemalloc()
○ Firefox od wersji 3
● libhugetlb
○ Przyspiesza użycie pamięci wirtualnej
○ 2MB strony zamiast 4KB
○ Dobre dla dużych zbiorów danych
49. Podsumowanie
● Jeśli nie wiadomo o co chodzi….
○ to chodzi o cache
● Pomiar, pomiar, pomiar…
○ perf top -e cache-misses
● Drobne zmiany mają znaczenie
○ Rozkład pól w strukturze
■ 2X mniej pamięci!
● Może zmieścimy się w cache L1?
50. Do poduchy
● Urlich Depper: “What every programmer
should know about memory”
● “Learn more about CUDA” http://www.nvidia.
com/object/cudau_ucdavis