Linux DC++ и многопоточность

    Всем доброго времени суток. В данном хабра топике хочу рассказать о работе в сетях DC под ос Linux. Сам я пишу из под Linux Mint 7, но на Ubuntu 9.04 всё идентично!
    Итак, я обладатель доволь но медленного канала в Интернет. Всего, как заявлено в тарифе, 250 кбит(31.25кбайт). На деле обычно 26-28. И если мне что-то требуется то, ищу это сначала в сети DC. Благо у меня есть пиринг по городу Красноярску, так что проблем с поиском не бывает.

    Когда я был в винде, меня всё устраивало пользовался StrongDC++ 2.21. Всё замечательно… И вот, теперь я в линуксе. История моего пути это отдельная статья…
    Ну и естественно, первое что было мною сделано это поиск альтернативных программ и способов запуска под вайном. Нашлась программка valknut. Ну попробовал. Ну работает. Не понравилась. ИМХО.

    Wine и Flylink


    Опыт пользования Linux DC++ был еще на 8.04, что как-то не очень хотелось изза багов. Полез на winehq.org. И узнал, что наш, Flylink-r370 работает идеально. Ну всё, думаю. Щас всё будет путем… А нет-то… Скачал я эту ревизию. Установил, запустил, под вайном 1.1.25. И да, действительно сие чудо работает. Начал тестировать функциональность. Сделал шару. Подключился к хабам. Решил скачать файл большого размера, больше 5 гигов, и чтобы он был у достаточно большого количества юзеров. Всё, отлично, нашел. И первое что мне не понравилось, так это иконки файлов которые всё путали. Если это файл, то выглядит как норальная папка в XP, а если это папка, то иконка представляет из себя белую папку. Ну думаю. Ладно, ради работающего DC клиента можно и смериться. Когда я выделил строку, у меня пропало поле с информацией, у скольки человек имеется данный файл. Ну это было уже не серьезно. Но еще терпимо, ибо при выборе файла большого размера я руководствуюсь еще и этим параметром. Поставил на закачу. Сразу порадовала скорость, 8 мбайт/с. Но оченьь растроила загрузка процессора. Так как в основном у меня качается всё на ntfs раздел, что не есть тру, mount.ntfs-3g жрет довольно много процессорного времени, почти 100%. Основная масса была скачана на довольно приличной скорости, почти 8 мегабайт в секунду. НО(!!!) Когда осталось уже меньше 10% скорость упала до 50 кбайт/с. Я подумал что одновременно у всех кончились слоты, или еще чтонибудь. Решил, что через пару минут всё будет лучше. Оказалась, я не правильно думал ))). Открыв список, с кого я качаю. Я увидел, что закачка происходит всего лиш с двух компов. и со скоростью около ~30кбайт. Хотя до этого он отлично качал с более чем 200 юзеров ). Закрыв соединение, он тут же подхватил кого-то со скоростью 2 мегабайта в секунду. Я конечно думал, что в конце блоки качаются на маленькой скорости, но не до такой же степени, в Strong DC++ такого не было вообще. Это была последняя капля…

    Linux DC++


    И я решился попробовать Linux DC++ более свежий. Прошло довольно много времени, примерно год. Может они и исправили этот баг, что при запуске он у меня просто вылетал.
    Итак, sudo aptitude install linuxdcpp. И мы стартуем… На удивление он запустился! Это знак! Я быстренько добавил в шару фильмов на 5 гигов, чтобы потестить. Хочу предупердить, что добавлять в шару стоит по маленьку, ибо если вы сразу дадите задание на 100 ГБ, у вас и комп и Linux DC++ уйдет в даун. Нужно добавлять по одной, максимум две папки. Чтобы можно было дождаться того момента когда он закончить хеширование, выключить клиент, и запустить его снова, иначе при экстренном выходе вам придется проходить процедуру хеширования заново!!! Ну вот, и мы вошли на хабы. В этот раз я стал умней, и в настрйоках устновил место скачивания на ext3 раздел. выбрал файл, багов замечано не было, единственно, после нажатия на кнопку поиск окно зависает(темнеет), и я жду когда он закончит поиск. Выбрал тестовый файл на закачку. И жду. Как оказалось, данная версия построена на стабильном ядре, которое не поддерживает многопоточность. Но есть 0.707 которое поддерживает многопоточность, то что нам и нужно. Вот мануал по которому я узнал где взять исходники версии с многопоточностью, и краткое руководство к действию. Собрав все остатки печенья со стола, я приготовился компилить.) Благо опыт не малый… Но не хотелось мне собирать пакет, потом его ставить. Я решил сделать по другому, не засаряя систему. Сейчас вам всё расскажу. итак,

    Берем исходники


    sudo aptitude install bzr scons
    cd ~/
    mkdir linuxdcpp
    cd linuxdcpp
    bzr branch http://bazaar.launchpad.net/~razzloss/linuxdcpp/0705-core

    Замечательно, теперь у нас есть исходники свежего linuxdcpp. Что же мы с ними можем сделать? Скомпилить!

    Подготовка системы к сборке свежего Linux DC++


    Как написано в мануале, дальше удовлетворяем все зависимости. Вот строчка из моего Readme.txt, у вас может незначительно отличаться изза новой версии:
    Dependencies:
    -------------
    scons >= 0.96
    pkg-config
    g++ >= 3.4
    gtk+-2.0 >= 2.6
    gthread-2.0 >= 2.4
    libglade-2.0 >= 2.4
    pthread
    zlib
    libbz2
    libssl

    Итак, если у вас ubuntu 9.04 то проблем со старыми пакетами у вас быть не должно. У вас просто может не быть некоторых необходимых вещей. У меня указаласась отсутствующей плюсовая библя boost. Ну не вопрос.
    Вот что я выоплнил:
    sudo aptitude install binutils scons pkg-config g++ libboost1.35-dev libglade2-0 libglade2-dev libpthread-stubs0 libpthread-stubs0-dev libbz2 libbz2-dev libssl libssl-dev

    Данная команда установила то что у меня отсутствовало в списке, и то что старое, обновила(мне не удалось найти 2 пакета g++ >= 3.4, gtk+-2.0 >= 2.6, ткните пальцем, я добавлю).
    Теперь всё готово к сборке. Из того же ридми я вычитал как нужно правильно собирать этого заеря.

    Компиляция!!!



    Compiling:
    ----------
    $ cd /path/to/linuxdcpp
    $ scons PREFIX=/path/to/install


    Теперь самое интерестное. Так как я не хочу возится, мы поступим довольно умно, оставим старую версию,.

    sudo mkdir /opt/linuxdcpp
    sudo chown -R вашюзер:вашагруппа /opt/linuxdcpp


    Ниже узнаете зачем. :)

    Теперь собираем.

    cd /path/to/linuxdcpp
    scons PREFIX=/opt/linuxdcpp

    Можно сходить выпить чайку. Только не долго, ибо самое интерестное еще впереди…
    Если всё удачно собралось, Поздравляю. Если нет, удовлетворяйте зависимоти и читайте что говорит error log.

    Установка


    Осталось установить. Устновка еще проще чем компиляция:
    scons install

    А теперь настает момент, для чего собственно мы делали отдельную папку, я не удалял старый Linux DC++ потому что я очень ленив, что бы собрать пакет и установливать его. Вот и выбрал легкий путь, ибо всё это уже предусмотрено спосбом сборки linuxdcpp. Заходим в настройки главного меню гнома(если у вас кеды, настравивайте сами) и ищем та DC++, и в параметрах запуска меняем только путь из «linuxdcpp» в "/opt/linuxdcpp/bin/linuxdcpp"(юез кавычек).
    Пора запускать наш только что скомпиленный клиент с поддержкой многопоточности.
    Конечно, как в любой программе и здесь есть свои нюансы, которые были замечены мною. При выборе файла для закачки, клиент стартует закачку сначала с одного пользователя, но потом, если успеет конечно), подключается к другим пользователям, что дает нам существенный выйгруш в скорости. Есть еще один вариант, но я не понял его логики. На выбранном файле жмем «Search by TTH», и из этого списка, как я понял, можно добавлять пользователей с которых будет идти скачка(если не прав поправьте), при нажатии на «Match Queue».
    Вот и всё. Надеюсь вам понравилась данная статья, и помогла избежать использования вайна, Когда есть такой классный клиент.
    ЗЫ. Не стал пробовать StrongDC под вайном потому что меня полностью устроил Linux DC++.

    Комментарии 40

      +4
      Причина того, что под конец флайлинк качает медленно, заключается в том, что клиент мультипоточен, т.е. цепляет все доступные источники. У части источников скорость очень маленькая и получается, что один блок может качаться очень долго. Таким образом, в конце остаются медленные источники, т.к. с быстрые источники отдают все блоки и остаются только блоки, которые заняты медленными. Лечится эта проблема в настройках — что-то вроде «разрывать соединение, если скорость меньше...».
      Меня во флайлинке под вайном не устраивает одно — я так и не смог настроить перехват магнет ссылок оперой. Т.е. я жму по ссылке «magnet?...» в браузере и ссылка должна направляться в дц-клиент. Если кто-то подскажет, как это настроить, буду благодарен.
        0
        по идее должно быть так:
        В опере ctrl+F12 -> advanced -> programs -> add
        и там уже на «magnet*» добавляете программу. Вопрос в том, будет ли работать через вайн. Но теоретически должно
          +1
          эх… мой бук с настройками в ремонте. По памяти делается наподобие варианта с огнелисом, описанного здесь: dyuss.habrahabr.ru/blog/29215/
          Только вместо пунктов с настройками фф делаем следующее. Инструменты-настройки-дополнительно-программы-добавить. Добавляем магнет протокол и открываем через написанный шелскрипт. Единственное, чего я не помню, так это, что было в пункте про параметр. Поэксперементируйте-там не сложно =)
            0
            Сейчас тогда попробую сделать магнет ссылки в опере, на linuxdcpp и напишу.
              0
              У меня проблема была в том, что я именно параметр к вайну не мог задать. В терминале запускал, а вот в опере та же самая строка работать отказыалась.
              Сейчас я нашёл время разобраться в проблеме, запустил оперу в консоли и начал изучать лог. Как оказалось, проблема банальна. Я, по причине того, что работаю с вайном, а не с полноценной виндой, не стал заморачиваться с созданием структуры каталогов и устанавливал софт в Program Files.
              Опера в поле «Параметр» не позволяет задать пробел. Кавычки она режет, слеши тоже, поэтому ни "...\Program Files\...", ни '..\Program Files\...', ни ...\\Program\ Files\\… не работает.
              Вылечилась проблема, как это уже очевидно, изменением пути до дц клиента. Нет пробелов — нет проблем :)
              p.s. если кому интересно, могу написать небольшую статью по настройке перехвата магнетов во флайлинке под вайном и, заодно, опишу как настроить клиент на обрыв медленных соединений.
                +1
                Я немного связан с разрботчиками FlyLink (сам им являюсь), и данный опыт мне крайне интересен.
                  0
                    0
                    Спасибо. Добавил в избранное. Потом попробую сварганить это в виде мануала.
            0
            Раньше, когда интернет был слишком медленным, использовал Valknut
              0
              Мне тоже нравится valknut, да и многопоточность там тоже вроде есть
                +2
                Какойто уж силишком у него убогий интерфейс. Ну не знаю, на данный момент качество Linux DC++ тоже не плохое. Рекомендую попробовать
                  +1
                  forum.ubuntu.ru/index.php?topic=45482.0
                  Valknut для убунты стоит брать из первого сообщения этой темы, там более-менее актуальные сборки из кода с svn.

                  Пользуюсь уже давно — нареканий нет.

                    0
                    А я когда-то в valknut сам добавил поддержку magnet-ссылок из браузера и теперь так просто обновляться не получается.
                    Я без магнетов жить не могу, а у разработчиков этого функционала, похоже, даже в планах нет (
                      0
                      Ну так пошлите свой патч разработчикам
                        0
                        Да я бы рад, но в плюсах не силён — решение получилось не слишком красивое и не кросплатформенное.
                        На случай, если кому-то будет интересно: valknut.ru/Download4
                    0
                    Кстати, в том же разделе есть тема со сборками и LinuxDC++, чтобы по-людски ставить, а не компилить. :)
                      0
                      Плюс своей сборки в том, что ты скачиваешь актуальную версию исходников, и сам ее собираешь. И проблем нет при сборке.
                        0
                        wxdcgui.sourceforge.net/changelog-svn.html
                        Судя по этому — смысла собирать из исходников нету, да и автор топика на убунту.ру довольно быстро реагирует на изменения.
                          0
                          Проблемы будут когда захочешь удалить скомпилированный продукт. Деб-пакет удаляется одной командой.
                          Тоже пользую Valknut по ссылке Dreammaker'а
                        +1
                        Не убогий, а нестандартный я бы сказал :). Тоже в свое время перепробовал кучу клиентов и остановился на valknut. LinuxDC++ тогда еще не поддерживал мультипоточность
                      0
                      а я использую jucy, пойду гляну как там с многопоточностью :)
                        +1
                        При попытке набора bzr branch bazaar.launchpad.net/~razzloss/linuxdcpp/0705-core у меня появляется ошибка:
                        bzr: ERROR: Not a branch: "/home/user/linuxdcpp/bazaar.launchpad.net/~razzloss/linuxdcpp/0705-core/".
                        У кого такая же ошибка, перед УРЛом добавьте http:// и все заработает.
                          0
                          Года полтора назад использовал Linux DC++ — всё было нормально :)
                          • НЛО прилетело и опубликовало эту надпись здесь
                              0
                              Спасибо, попробуем :) а может он и правдо лучше Linux DC++ )))
                            • НЛО прилетело и опубликовало эту надпись здесь
                                0
                                Нет, главное чтобы в ней не было большого количества файлов, лучше добавлять последние подпапки.
                                0
                                > если вы сразу дадите задание на 100 ГБ, у вас и комп и Linux DC++ уйдет в даун

                                А можно было почитать маны или просто методом детского любопытства найти, где задается ограничение скорости хэширования.
                                  0
                                  Да пробовал я ограничить, эффекта ноль. Всё также тормозит, ну а если выставить очень маленькую скорость, скорость хеширования будет ооочень долгой…
                                  0
                                  vokulov.ru/2008/12/20/linuxdc-102-0707-core-based/ — тут есть deb пакет, правда для debian-а, но я думаю что в ubuntu тоже работать будет
                                  linux.vsevteme.ru/posts/show?id=5383 — тут написано почему лучше ставить программы из репозиториев (ну на крайняк ставить отдельный deb пакет), а не компилировать их из исходных кодов
                                    0
                                    Разве где-то не рекомендуется компилировать программы из исходиков??? Обычно не рекомендуется выполнять make install, так как при следущем обнолении из оффициальных репозитариев скомпиленный вручную бинарик будет затерт. В данном случае, я не делаю из своей системы помойку программ при помощи make install, которая ставить во все системные директории, а scons install устанавливает в предварительно заданную до этого директорию, то есть /opt, что исключает полностью «засирание системы».

                                    > Единственный случай, в котором нужно компилировать программу самому — это если в репозиториях слишком старый пакет
                                    Вот именно этот случай и есть, так как в репозитариях убунты linuxdcpp без многопоточности, со старым ядром.
                                    Еще раз повторюсь, при выполнени по моей «инструкции» у вас не будет засрана система, и не будет проблем после обновления.
                                      0
                                      > Разве где-то не рекомендуется компилировать программы из исходиков???
                                      зачем собирать программу из сырков, если в Ubuntu Linux есть менеджер пакетов?
                                      > в предварительно заданную до этого директорию, то есть /opt
                                      придется прописывать доп пути в $PATH или еще хуже, запускать программу как-то так: /opt/bla-bla-bla…

                                      вот ведь правильно говорили, если трудностей нет, то мы их сами себе придумаем, есть ведь специально разработанный для этого способ, называется менеджер пакетов, нет, мы будем куда-то в /opt все устанавливать, и ладно бы это был какой-то проприетарный софт, типа quake 4 или doom 3, который предоставляется в файле *.run, нет, мы будем ставить открытый софт из сырков… В общем, я крайне возмущен.

                                      P.s. если прям очень хочется покомпилировать что-то, так скомпилируйте и сделайте deb-пакет, и вот его уже и установите, и себе польза (саморазвитие) и людям — можно будет использовать свежую версию собранного пакета, думаю благодарных будет очень много!
                                        0
                                        Хорошо, уговорили :)) Соберу deb пакет, и выложу суда ссылку, чтобы проблем меньше было…
                                      +1
                                      forum.ubuntu.ru/index.php?topic=4747

                                      Тут на предпоследних сттраницах можно найти более свежие (как я понял) сборки.
                                    • НЛО прилетело и опубликовало эту надпись здесь
                                        0
                                        FlylinkDC++ на эту тему (скорости закачки) вроде уже неоднократно фиксили -попробуйте последний на сегодня релиз — может будет получше. На NTFS разделы у меня тоже пишет плоховато, иконки он берёт из системы, а в случае с wine откуда там кучи красочных иконок? логично, не правда ли?
                                        Ещё одна вещь которая больше всего нравится во FlylinkDC++ — способность сокращать магнитки — т.е. вместо magnet:?xt=urn:tree:tiger:N6YE7DXOAECXJKZFIMTOFXDLHE4N2RWPPZK4L3Y&xl=10183639&dn=firefox-3.5.1.tar.bz2 в общем чатике видно firefox-3.5.1.tar.bz2 (9,71 МB) и всё это как ссылка отображается +несколько фич типа скриптов и автобана…
                                        Расскажите, можно ли такое к linuxdcpp прикрутить и если да, то как?
                                          0
                                          Вот Сейчас занимаюсь поиском на эту тему информации, пока не удалось найти. Раньше были патчи для исходников. Сейчас проектов патчев ) закрыт и разработчик открыл проект создания нового дц клиента основанного на linuxdcpp, freedcpp.narod.ru/
                                          +2
                                          По-моему, все содержание Вашего поста можно вполне выразить одной строчкой: «Ура, экспериментальная версия LinuxDC++ поддерживает многопоточное скачивание, а также работает. Собираем и радуемся!»
                                            +2
                                            Автор уныл. Я уже год как спокойно использую 707-ое ядро, а нынче версия ядра 709(как давно — не помню).
                                              +1
                                              пруфпик

                                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                              Самое читаемое