dc.contributorPiquer Gardner, José
dc.contributorFacultad de Ciencias Físicas y Matemáticas
dc.contributorDepartamento de Ciencias de la Computación
dc.contributorBergel, Alexandre
dc.contributorGuerrero Saldivia, César
dc.creatorRivera Villagra, Diego Arturo Guillermo Alejandro
dc.date.accessioned2013-11-07T18:27:30Z
dc.date.accessioned2019-04-25T23:00:28Z
dc.date.available2013-11-07T18:27:30Z
dc.date.available2019-04-25T23:00:28Z
dc.date.created2013-11-07T18:27:30Z
dc.date.issued2013
dc.identifierhttp://www.repositorio.uchile.cl/handle/2250/114690
dc.identifier.urihttp://repositorioslatinoamericanos.uchile.cl/handle/2250/2419165
dc.description.abstractLos servidores DNS son máquinas que resuelven consultas sobre nombres de dominio y se caracterizan por atender grandes cantidades de pequeñas peticiones que usualmente caben en una única unidad de comunicación en Internet llamada paquete . Para aumentar la cantidad de respuestas, el software encargado de esto explota las máquinas con múltiples procesadores, paralelizando las atenciones, lo cual ha mostrado no generar las ganancias esperadas. Para estudiar este problema se replicó la operación usando núcleos de Sistemas Operativos modernos e intentando leer concurrentemente desde un socket, identificando así los posibles puntos de falla: la implementación de read en la libc, el mecanismo de atención de las llamadas al sistema, o alguna porción de código ejecutado al recibir un paquete desde Internet. Los primeros dos posibles orígenes fueron descartados con pruebas directas mediante la comparación del rendimiento de read al leer desde distintas fuentes y determinando cómo se comporta la atención de las llamadas a sistema, mediante la creación de una de estas con fines de prueba. Así, el estudio se concentra en la tercera posible fuente del problema: el núcleo de Linux. Para estudiar el comportamiento de cómo es recibido un paquete, se investigó cómo fluye la información a través del stack de red desde que ésta arriba al dispositivo. Se descubrió que la información era encolada en estructuras de datos compartidas, requiriendo sincronización, e identificando, por lo tanto, un posible punto de falla. Para corroborarlo, se modificó un núcleo con el fin de determinar cómo la sincronización afectaba en la serialización de los accesos a un socket. Los resultados de las pruebas anteriores ejecutadas sobre el núcleo modificado arrojaron que el esquema de sincronización utilizado no permitía las lecturas concurrentes, por lo que se propuso cambiar el esquema de encolamiento de los paquetes en el socket, introduciendo estructuras que sí permitan la paralelización de read. Para simplificar la situación, el esquema de encolamiento de paquetes fue modelado en una implementación en C en espacio usuario, replicando estructuras y sincronización presentes en el núcleo. Sobre este modelo fue implementada una solución con múltiples colas de recepción de paquetes, creando colas por cada lector concurrente desde el lado de la aplicación. Finalmente, el modelo arrojó que esta solución permite efectivamente paralelizar los accesos, llegando a duplicar el throughput alcanzado actualmente por los sockets en determinadas configuraciones de threads.
dc.languagees
dc.publisherUniversidad de Chile
dc.rightshttp://creativecommons.org/licenses/by-nc-nd/3.0/cl/
dc.rightsAttribution-NonCommercial-NoDerivs 3.0 Chile
dc.subjectServidores Web
dc.subjectLinux (Sistema operativo para computador)
dc.subjectDNS
dc.subjectSockets
dc.titleOptimización del rendimiento de sockets UDP en aplicaciones multithreads
dc.typeTesis


Este ítem pertenece a la siguiente institución