Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / c# class для замера продолжительность события в наносекундах / 25 сообщений из 106, страница 1 из 5
22.08.2011, 10:28
    #37405648
Testor1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# class для замера продолжительность события в наносекундах
Всем привет!

Пожалуйста, поделитесь ссылкой или готовым c# class-ом для замера продолжительности события в наносекундах.
...
Рейтинг: 0 / 0
22.08.2011, 10:56
    #37405714
Testor1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# class для замера продолжительность события в наносекундах
Testor1Всем привет!

Пожалуйста, поделитесь ссылкой или готовым c# class-ом для замера продолжительности события в наносекундах.


Нужно написать подобие ping-а
...
Рейтинг: 0 / 0
22.08.2011, 21:43
    #37406785
Александр2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# class для замера продолжительность события в наносекундах
нафига вам для ping наносекунды, причем на C#?

но это не значит, что настоящие извращенцы этого не могут :)

итак:
берете расширение дебаггера SOS для .net
ставите в нем точку останова на вызове !DumpHeap, !DumpObject, !DumpMT, !DumpMD
Ваша первая задача точно стырить внутренние структуры для описания типов под конкретную версию точки нет. Т.е. вам нужно найти структуру описания Типа (куда ссылается OBJREF), далее оттуда вам нужно перейти к MethodDef (эта та структура на которую указывает TypeRef у каждого объекта), там есть перечисление MethodDef. У MethodDef есть поле указывающее на либо на скопилированный код либо на IL (ну и флаг, говорячий куда смотрит указатель, типа IsJitted).
так вот - далее дело за малым - вставить в уже в откомпилированный код вызовы rdtsc (это asm) и куда-нть записать

общая задача безусловно сложна, а вот для одной единственной функции написать затыку которая реально считает время в тактах - впринципе я думаю не очень сложно, хотя и повозиться придется (можно сделать unsafe вставку (вначале функции и в конце), которая оставляет несколько байт для того, чтобы сказать rdtsc а потом результат из eax перегнать в память)
...
Рейтинг: 0 / 0
22.08.2011, 21:51
    #37406792
Александр2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# class для замера продолжительность события в наносекундах
аписко,
в TypeRef ссылается на MethodTable, а в MethodTable есть указатели на MethodDesc, а уже в нем - указатель на скомпилированный код либо на IL
...
Рейтинг: 0 / 0
22.08.2011, 22:19
    #37406835
DENIS_CHEL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# class для замера продолжительность события в наносекундах
Testor1Всем привет!

Пожалуйста, поделитесь ссылкой или готовым c# class-ом для замера продолжительности события в наносекундах.

http://msdn.microsoft.com/ru-ru/library/bb397808%28v=vs.90%29.aspx

Не устроит?
...
Рейтинг: 0 / 0
22.08.2011, 22:29
    #37406863
Александр2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# class для замера продолжительность события в наносекундах
DENIS_CHELTestor1Всем привет!

Пожалуйста, поделитесь ссылкой или готовым c# class-ом для замера продолжительности события в наносекундах.

http://msdn.microsoft.com/ru-ru/library/bb397808%28v=vs.90%29.aspx

Не устроит?
товарисч хочет НАНОсекунды :)
...
Рейтинг: 0 / 0
22.08.2011, 22:37
    #37406872
Testor1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# class для замера продолжительность события в наносекундах
Александр2DENIS_CHELпропущено...


http://msdn.microsoft.com/ru-ru/library/bb397808%28v=vs.90%29.aspx

Не устроит?
товарисч хочет НАНОсекунды :)

Цель супер извращенная, но нужно измерить удаленность сетевого (ip) узла с точностью чем меньше тем лучше.
не спрашивайте зачем - просто очень нужно, если это возможно.
Есть понимание что каждое звено в сети вносит свои задержки/погрешность в этой не простой затее + еще и загруженность канала.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.InteropServices;
using System.Net.Sockets;
using System.Diagnostics;
using System.Threading;
using System.Net;

namespace ConsoleApplication1
{
    class Program
    {
        //C#
        [DllImport("KERNEL32")]
        public static extern int QueryPerformanceFrequency
        (
            ref Int64 lpFrequency
        );

        [DllImport("KERNEL32")]
        public static extern int QueryPerformanceCounter
        (
            ref Int64 lpPerformanceCount
        );

        static void Main(string[] args)
        {
            DateTime startTime, endTime;
            Int64 minDiff=1000000;
            Int64 freq = 0;
            Double time_ms = 0;
            Double mintime_ms = 1000000;
            Int64 mindistance = 0;
            Int64 count1 = 0;
            Int64 count2 = 0;
            Int64 distantse = 0;
            Int64 ls = 299792458;
            Int64 counts = 0;
            Int64 Overhead = 0;

            System.Net.IPAddress ipAddress = new System.Net.IPAddress(System.Net.IPAddress.Parse("127.0.0.1").GetAddressBytes());


            for (int i = 0; i < 1000; i++)
            {
                try
                {

                    if (QueryPerformanceFrequency(ref freq) != 0)
                    {

                        TcpClient tcpClient = new TcpClient();

                        count1 = 0;
                        count2 = 0;

                        QueryPerformanceCounter(ref count1);
                        tcpClient.Connect(ipAddress, 80);
                        QueryPerformanceCounter(ref count2);

                        if (count1 != 0 && count2 != 0)
                        {
                            time_ms = ((double)(count2 - count1)) / (3*freq);
                            distantse = (299792458 * (count2 - count1)) / (3*freq);
                            if (time_ms < mintime_ms)
                            {
                                mintime_ms = time_ms;
                                mindistance = distantse;
                            }

                            Console.WriteLine("Seconds:" + time_ms.ToString() + " Distantse:" + distantse.ToString());
                        }
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.ToString());
                }

            }

            Console.WriteLine("Minimal time:" + mintime_ms.ToString()+" Minimal distance:"+mindistance.ToString());

            Console.ReadKey();

        }

    }
}



...
Рейтинг: 0 / 0
22.08.2011, 22:46
    #37406880
Александр2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# class для замера продолжительность события в наносекундах
это адские попытки HFTить на C#? ))))
...
Рейтинг: 0 / 0
22.08.2011, 22:47
    #37406884
DENIS_CHEL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# class для замера продолжительность события в наносекундах
А за что
Код: plaintext
void Main
?
...
Рейтинг: 0 / 0
22.08.2011, 23:09
    #37406907
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# class для замера продолжительность события в наносекундах
Александр2товарисч хочет НАНОсекунды :)

Ну да, на стареньком семпроне разрешение этого таймера 1 / 3 579 545, т.е. примерно 1/4 микросекунды. При двух подряд вызовах QueryPerformanceCounter тикает на 8 тиков, т.е. "пустой" замер занял 0.000002235 сек.

На более новых платформах может и побольше разрешение.

Но, блин, из вышеприведенных чисел автор-то должен уяснить, что 1/1000 от 1/1000 сек (1 микросекунда) ему с головой хватит не зависимо от того, что он меряет ибо даже просто померять "ничего" занимает 2 микросекунды (на слабом CPU конечно). Т.е. мерять еще в 1000 раз точнее обломается.
...
Рейтинг: 0 / 0
22.08.2011, 23:12
    #37406910
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# class для замера продолжительность события в наносекундах
Testor1Есть понимание что каждое звено в сети вносит свои задержки/погрешность в этой не простой затее + еще и загруженность канала.
Но нет понимания, что уровень НАНОсекунд в данном случае - это уже теория, а не практика. На практике каждый пук твоего приложения обходится в сотни раз длиннее.

А еще удивляет выбранный тобой инструмент. Почему не C++? И почему многозадачная винда, которая твое приложение много раз в секунду может откладывать в сторону. Если понадобится, то даже на миллисекунды, а не на микросекунды.
...
Рейтинг: 0 / 0
22.08.2011, 23:19
    #37406921
Testor1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# class для замера продолжительность события в наносекундах
Edd.DragonTestor1Есть понимание что каждое звено в сети вносит свои задержки/погрешность в этой не простой затее + еще и загруженность канала.
Но нет понимания, что уровень НАНОсекунд в данном случае - это уже теория, а не практика. На практике каждый пук твоего приложения обходится в сотни раз длиннее.

А еще удивляет выбранный тобой инструмент. Почему не C++? И почему многозадачная винда, которая твое приложение много раз в секунду может откладывать в сторону. Если понадобится, то даже на миллисекунды, а не на микросекунды.

В идее, это должен быть ansembler :)
нужно грузится чуть ли не на уровне биоса и так делать.

Но это нереально трудоемко. Задача разовая и результат очень нужен.
Можно зайти в safemode + network и там запустить

С++ вспоминать надо. c# знаю
...
Рейтинг: 0 / 0
22.08.2011, 23:20
    #37406923
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# class для замера продолжительность события в наносекундах
Edd.Dragon,

авторПочему не C++?
Или вообще asm с полным контролем происходящего.
И внедриться на уровень ядра конечно же.

Да и еще хотелось бы узнать, каков разброс замеров,если один и тот же узел пропинговать сотню раз? Я так понимаю, что задача применима только к локалке. И то, после испытаний может оказаться, что она ничего не показывает. Т.е. например время прохода пакета через свич и сетевухи занимает 99% времени и лишь 1% времени приходится на передвижение по кабелям. В итоге разница пинга между 50-метровым сегментом и 10-метровым составит допустим 0.5% по времени. И что дальше? Разброс измерений допустим 2-3%. Как ты собираешься увидеть разницу в 0.5% в таком разбросе? Она теряется ))

А если мерять внешний мир, то извини - бред, а не задача )))
Узел на расстоянии 100 км, проходя через тормозной сервер, пингуется 300 мс, а узел на другом конце планеты - 50 мс. Какие выводы?
...
Рейтинг: 0 / 0
22.08.2011, 23:23
    #37406927
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# class для замера продолжительность события в наносекундах
Edd.Dragon,

авторВ итоге разница пинга между 50-метровым сегментом и 10-метровым составит допустим 0.5% по времени.
На самом деле ее вообще не будет. Т.е. в наносекундах может и будет, только обычный комп для этого не подходящий измеритель. Проще купить спец. прибор.

Ну а если не для локалки, то выше уже написал по этому поводу ))

P.S.: Хочешь вычислить недоброжелателя в домашней локалке что ли?
Так тогда лучше применить социально-психологические методы.
...
Рейтинг: 0 / 0
22.08.2011, 23:38
    #37406946
Testor1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# class для замера продолжительность события в наносекундах
Edd.DragonEdd.Dragon,

авторПочему не C++?
Или вообще asm с полным контролем происходящего.
И внедриться на уровень ядра конечно же.

Да и еще хотелось бы узнать, каков разброс замеров,если один и тот же узел пропинговать сотню раз? Я так понимаю, что задача применима только к локалке. И то, после испытаний может оказаться, что она ничего не показывает. Т.е. например время прохода пакета через свич и сетевухи занимает 99% времени и лишь 1% времени приходится на передвижение по кабелям. В итоге разница пинга между 50-метровым сегментом и 10-метровым составит допустим 0.5% по времени. И что дальше? Разброс измерений допустим 2-3%. Как ты собираешься увидеть разницу в 0.5% в таком разбросе? Она теряется ))

А если мерять внешний мир, то извини - бред, а не задача )))
Узел на расстоянии 100 км, проходя через тормозной сервер, пингуется 300 мс, а узел на другом конце планеты - 50 мс. Какие выводы?

Конечный IP - ADSL модем. Он бывает не загруженным.
Пункт в 9 хопах.

Если вычислить минимальное время прохождение пакета в ночное время (выбираем минимальное из тестов) до ADLS устройства и отдельно до ADSL модема, то можно вычислить расстояние между ними - вычитаем = (время до модема - время до роутера) * скорость света

возникла смешная проблема
если на модеме есть открытые порты, то на роутере их нет.
то есть нет возможности зацепиться за открытие TCP порта.
как можно по другому сделать на C# ?
...
Рейтинг: 0 / 0
22.08.2011, 23:50
    #37406952
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# class для замера продолжительность события в наносекундах
Testor1,

авторЕсли вычислить минимальное время прохождение пакета в ночное время (выбираем минимальное из тестов) до ADLS устройства и отдельно до ADSL модема, то можно вычислить расстояние между ними - вычитаем = (время до модема - время до роутера) * скорость света

Ты читаешь внимательно?

узел1: 2
узел2: 12
узел3: 78
узел4: 215

вычисли расстояние.
...
Рейтинг: 0 / 0
22.08.2011, 23:52
    #37406954
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# class для замера продолжительность события в наносекундах
Или ты знаешь способ как пропинговать узел3 с обоих его сторон, чтобы вычислить время задержки сигнала на узле3? :o

P.S.: А почему скорость света? Известно, что все сегменты сети оптические?
...
Рейтинг: 0 / 0
23.08.2011, 00:05
    #37406963
Александр2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# class для замера продолжительность события в наносекундах
Testor1Edd.Dragonпропущено...

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

А еще удивляет выбранный тобой инструмент. Почему не C++? И почему многозадачная винда, которая твое приложение много раз в секунду может откладывать в сторону. Если понадобится, то даже на миллисекунды, а не на микросекунды.

В идее, это должен быть ansembler :)
нужно грузится чуть ли не на уровне биоса и так делать.


Но это нереально трудоемко. Задача разовая и результат очень нужен.
Можно зайти в safemode + network и там запустить

С++ вспоминать надо. c# знаю
извините, но мне кажется вы гоните, причем по жесткому :)
человека, для которого С++ вспоминать надо, наносекунды слушаться не будут :)
...
Рейтинг: 0 / 0
23.08.2011, 00:09
    #37406966
Testor1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# class для замера продолжительность события в наносекундах
Александр2Testor1пропущено...


В идее, это должен быть ansembler :)
нужно грузится чуть ли не на уровне биоса и так делать.


Но это нереально трудоемко. Задача разовая и результат очень нужен.
Можно зайти в safemode + network и там запустить

С++ вспоминать надо. c# знаю
извините, но мне кажется вы гоните, причем по жесткому :)
человека, для которого С++ вспоминать надо, наносекунды слушаться не будут :)

ну я на c++ писал взломщик RSA, но это было давно ...
уже не молод. не так легко переключаться между языками

сейчас больше на sql пишу.

а сейчас нужно решать конкретную задачу. использую то чем владею и что подходит.
...
Рейтинг: 0 / 0
23.08.2011, 00:15
    #37406972
Александр2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# class для замера продолжительность события в наносекундах
Testor1Александр2пропущено...

извините, но мне кажется вы гоните, причем по жесткому :)
человека, для которого С++ вспоминать надо, наносекунды слушаться не будут :)

ну я на c++ писал взломщик RSA, но это было давно ...
уже не молод. не так легко переключаться между языками

сейчас больше на sql пишу.

а сейчас нужно решать конкретную задачу. использую то чем владею и что подходит.
отдайте на оутсорс и все дела, нет смысла самому корячиться, если не получается
...
Рейтинг: 0 / 0
23.08.2011, 00:16
    #37406973
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# class для замера продолжительность события в наносекундах
Testor1,

Так что на счет выяснения времени прохождения промежуточных узлов - как?
...
Рейтинг: 0 / 0
23.08.2011, 00:17
    #37406978
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# class для замера продолжительность события в наносекундах
Александр2отдайте на оутсорс и все дела, нет смысла самому корячиться, если не получается
Ну, человека, который без тени улыбки напишет микроскоп-орехокол найти будет трудно )))
...
Рейтинг: 0 / 0
23.08.2011, 00:18
    #37406979
Testor1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# class для замера продолжительность события в наносекундах
Edd.DragonTestor1,

Так что на счет выяснения времени прохождения промежуточных узлов - как?

Контекст вопроса ?
...
Рейтинг: 0 / 0
23.08.2011, 00:40
    #37406994
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# class для замера продолжительность события в наносекундах
Testor1,

Да выше же. Два подряд сообщения моих с вопросами.
...
Рейтинг: 0 / 0
23.08.2011, 00:41
    #37406996
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# class для замера продолжительность события в наносекундах
Edd.DragonTestor1,

Да выше же. Два подряд сообщения моих с вопросами.

И там первым вопросом: " Ты читаешь внимательно? "
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / c# class для замера продолжительность события в наносекундах / 25 сообщений из 106, страница 1 из 5
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]