[so] [Tema5][Lin] - Nelamurire
Constantin Neagu
constantin.neagu.office at gmail.com
Tue May 26 15:45:35 EEST 2015
Buna ziua,
Trimit un fragment din Readme-ul meu pentru aceasta tema.
Intrebarea este daca problema si solutia expusa este pertinenta.
[... Implementarea temei a mers bine pana cand ...]
Asta pana am ajuns pe serverul de test.
Unde nimic nu mai mergea.
Am testat pe 3 masini diferite (Intel si AMD) de la AMD E450 pana la
i7 Hasswell.
Una dintre masini a fost imaginea pusa la dispozitie de echipa SO.
Nimic, la mine merge, pe server nu.
Am decis sa fac Debug direct pe server-ul de test.
Pentru a realiza acest lucru, am adaugat in arhiva temei si o versiune
modificata a tester-ului pus la dispozitie.
Modificarea a constat in redirectarea output-ului aws din log-uri catre stdout.
Din make am compilat si testele mele, am rulat initializarea, si
testul de care am avut nevoie.
Am tot facut asta pana cand am blocat vmchecker pentru ca am uitat sa
fac cleanup.
Imi cer inca odata scuze.
Totusi am reusit sa descopar ce nu mergea:
- recv pe socket citeste numai 20 de bytes => nu citeam toata calea fisierului.
Am observat ca datele sunt totusi acolo, un al doilea recv imediat
dupa primul citeste si restul.
Problema rezolvata prin folosirea read in loc de recv.
Avand in vedere ca socket-ul este setat ca non-blocant, respect cerinta temei.
Am incercat sa imi dau seama de unde vine limitarea,
dar bufferele de recv si snd ale socket-ului sunt in regula, iar in
alta parte nu stiu unde sa ma uit.
- sendfile si send scriu pe buffer doar jumatate din dimensiunea specificata.
Pe asta nu am inteles-o si mi-am dat seama din intamplare, vazand un
hint din eclipse, cum ca sendfile
verifica dimensiunea si daca este mai mare de 32 o imparte cu 2.
Doar ca la runtime, pe sistemele mele, totul merge perfect si
trimiterea se face corect.
Din nou, nu am gasit nici o justificare pentru acest comportament.
Am setat buffer-ele socket-ului manual,
in speranta ca de acolo este problema. But to no avail :(.
Solutia a fost sa introduc AWS_WEIRD_MULTIPLIER prin care sa
specific la pre-compilare o valoare (1 sau 2)
pe care apoi sa o inmultesc cu dimensiunea transferului pentru
sendfile si send.
It worked brilliantly.
Multumesc anticipat pentru feedback,
Neagu Constantin 332CC
More information about the so
mailing list