Intereting Posts
Установка Piklab Окна сами восстанавливаются после загрузки Ubuntu Моему оборудованию нужен модуль для черных списков, чтобы работать, как я могу отправить это исправление? Python 2.7: документация не найдена при вводе справки ('print') Как настроить Conky на одном конкретном видовом экране / рабочем столе? Автоматическое монтирование диска в ubuntu 14.04 LTS (каталог закладок не найден) Каталог сохранения по умолчанию для gnome-screenshot? Как автоматически загружать исходный файл при запуске bash? Как мне что-то обновить в репозитории Ubuntu? SSH от моего Mac в Ubuntu: пересылка X не работает правильно? Текстовый редактор, который может обертывать текст в предопределенные теги HTML, такие как Notepad ++ Что я могу сделать для rsync больших файлов, убивающих подключение к Wi-Fi моего ноутбука Помощь в настройке панели уценки в gedit Системная BIOS не показывает Ubuntu как параметр загрузки после установки? bash: =: Нет такого файла или каталога .bashrc

Curl медленный multithreading dns

Программа создана на C ++ и индексирует веб-страницы, поэтому все домены являются случайными именами доменов из Интернета. Странная часть состоит в том, что dns fail / not found процент мал (> 5%).

вот трассировка pmp:

  3886 __GI___poll,send_dg,buf=0xADDRESS,__libc_res_nquery,__libc_res_nquerydomain,__libc_res_nsearch,_nss_dns_gethostbyname3_r,gaih_inet,__GI_getaddrinfo,Curl_getaddrinfo_ex 601 __GI___poll,Curl_socket_check,waitconnect,singleipconnect,Curl_connecthost,ConnectPlease,protocol_done=protocol_done@entry=0xADDRESS),Curl_connect,connect_host,at 534 __GI___poll,Curl_socket_check,Transfer,at,getweb,athread,start_thread,clone,?? 498 nanosleep,__sleep,athread,start_thread,clone,?? 50 __GI___poll,Curl_socket_check,Transfer,at,getweb,getweb,athread,start_thread,clone,?? 15 __GI___poll,Curl_socket_check,Transfer,at,getweb,getweb,getweb,athread,start_thread,clone 7 nanosleep,usleep,main 

Почему в _nss_dns_gethostbyname3_r так много streamов? Что я могу сделать, чтобы ускорить это.

Может быть, потому, что я использую синхронный DNS- CURLOPT_NOSIGNAL по умолчанию curl с CURLOPT_NOSIGNAL ?

Программа работает на Intel I7 (8 ядер HT), 16 ГБ оперативной памяти, Ububtu 12.10.

Полоса пропускания варьируется от 6 Мбит / с (предел ISP) -> 2 Мбайт / с при нерегулярном интервале, а иногда даже падает до нескольких 100 КБ / с.

Потоки, которые вы видите, вероятно, ждут ответа DNS. Одним из способов ускорения этого было бы сделать предварительный поиск, поэтому они будут кэшироваться на вашем рекурсивном DNS-сервере соседа. Также убедитесь, что никто не просит авторитарных ответов, это всегда медленно.

Я обнаружил, что решение состоит в том, чтобы изменить переменную rotl dns resolver на c-ares и специально спросить ipv4 поскольку ipv6 еще не поддерживается моей сетью.

Переход на c-ares также позволил мне добавить дополнительные серверы dns и окружить их, чтобы улучшить количество запросов DNS.

Исход:

 //set to ipv4 only curl_easy_setopt(curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); //cicle dns Servers dns_index=DNS_SERVER_I; pthread_mutex_lock(&running_mutex); if(DNS_SERVER_I>DNS_SERVERS.size()) { DNS_SERVER_I=1; }else { DNS_SERVER_I++; } pthread_mutex_unlock(&running_mutex); string dns_servers_string=DNS_SERVERS.at(dns_index%DNS_SERVERS.size())+","+DNS_SERVERS.at((dns_index+1)%DNS_SERVERS.size())+","+DNS_SERVERS.at((dns_index+2)%DNS_SERVERS.size()); // set curl DNS (option available only when curl is built with c-ares) curl_easy_setopt(curl, CURLOPT_DNS_SERVERS, &dns_servers_string[0]);