This shows you the differences between two versions of the page.
so2:cursuri:curs10:test [2013/02/10 02:10] 127.0.0.1 external edit |
so2:cursuri:curs10:test [2013/02/17 09:53] (current) razvan.deaconescu |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Test Cursul 10 ====== | ====== Test Cursul 10 ====== | ||
- | 1. **De ce procesul de rutare are loc în bottom-half și nu în handler?** | + | * TODO |
- | + | ||
- | Pentru că handlerul unei rutine de întrerupere trebuie să fie rapid iar căutarea în tabela de rutare ține destul de mult. | + | |
- | + | ||
- | 2. **Ce funcție trebuie folosită pentru a adăuga unui skb informații despre nivelul 2 de rețea: skb_push, skb_pull, skb_trim, skb_put, skb_reserve?** | + | |
- | + | ||
- | Cadrul Ethernet conține un antet de 14 octeți și un CRC de 4 octeți __la finalul__ cadrului. Prin urmare, trebuiesc folosite: **skb_reserve**, **skb_push** și **skb_put**. | + | |
- | + | ||
- | http://vger.kernel.org/~davem/skb_data.html | + | |
- | + | ||
- | 3. **Dacă folosim TSO și putem transmite pachete de maxim 1500 octeți (MTU = 1500) și putem procesa 50K pachete pe secundă care este viteza maximă de transmisie a unei aplicații din user-space (octeți/s)?** | + | |
- | + | ||
- | NU este corect răspunsul cu produsul între cele 2 valori. Aplicația setează o singură dată antetele TCP și IP și trimite cât poate. Presupunând lungimea {{{l}}} a antetelor, la fiecare pachet trimis din cei 1500 de octeți pierdem {{{l}}} pentru că placa de rețea va realiza copierea antetului la care adăugăm _o singură dată_ antetul. Prin urmare, numărul total de octeți trimiși este {{{50K * (1500 - l) + l}}}. Pentru TCP și IPv4 avem un total de {{{l = 20}}} (ignorând toate opțiunile) deci avem maxim {{{~74M}}} octeți pe secundă. | + |