Особая линуксовая магия

Discussion in 'Болталка' started by NekoKoneko, 12 Jan 2015.

  1. NekoKoneko

    NekoKoneko Elder - Старейшина

    Joined:
    29 Oct 2010
    Messages:
    175
    Likes Received:
    141
    Reputations:
    20
    Пишу сейчас счетчик трафика к биллингу, столкнулся с какой-то особой линуксовой магией.
    Для получения информации читаю /proc/net/dev раз в секунду, текущее минус прошлое получаю загрузку канала. Коплю три последних значения, вывожу среднюю за три секунды. Дальше в мегабиты в секунду оно переводится вот так:
    Code:
    final float cdd = ((float)(new Date().getTime() - curDate)) / 1000f;             
    final float txd = ((avg3_tx_current * 8f) / (1024f * 1024f)) / cdd;            
    final float rxd = ((avg3_rx_current * 8f) / (1024f * 1024f)) / cdd;
    curDate = new Date().getTime();
    
    Запускаю спидтест, все показывает верно:

    [​IMG]

    Смотрю в этот момент в своей программе, входящая на интерфейсе показывает также, как спидтест, а вот исходящая уходит за несколько гигабит и показывает случайную хрень. Этого не может быть, интерфейс сам по себе гигабитный. Если загрузка канала небольшая и равномерная, показывает все нормально, при всплесках высокой нагрузки же жутко врет в большую сторону. Причем iptraf/iftop такого поведения не проявляют, показывают все как надо. Что это за магия такая?
     
  2. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,032
    Likes Received:
    1,320
    Reputations:
    327
    индусский код вероятно называется. бери отладчик и смотри что у тебя идет на вход до преобразований.
     
  3. [ Dumi ]

    [ Dumi ] Member

    Joined:
    27 May 2009
    Messages:
    21
    Likes Received:
    66
    Reputations:
    13
    тут без прокачанной хакерской догадки не обойтись