The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Увеличение скорости ввода/вывода на 6% в Linux, благодаря кэшированию запросов времени, opennews (??), 16-Янв-24, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


34. "Увеличение скорости ввода/вывода на 6% в Linux, благодаря кэ..."  –4 +/
Сообщение от Аноньимъ (ok), 17-Янв-24, 01:27 
> 2) Смотрение на часы никогда не было какой-то особо простой и дешевой операцией...

Почему?

Ответить | Правка | Наверх | Cообщить модератору

39. "Увеличение скорости ввода/вывода на 6% в Linux, благодаря кэ..."  +5 +/
Сообщение от Аноним (39), 17-Янв-24, 01:47 
Потому что:
а) часы - это устройство ввода-вывода, а значит работа с ними - уже недешевое по меркам процессора удовольствие (впрочем, tsc этот момент изрядно оптимизировал по сравнению с HPET и PIC)
б) если говорить про юзерспейс, то обращение к часам происходит через отдельный вызов сисколла (а значит привет, переключение контекста). Этот момент, впрочем, тоже в современных системах сильно оптимизирован за счёт vdso.

В общем, уже по тому, насколько работу с часами обмазали разными оптимизациями, уже можно понять, насколько это больное место в плане производительности.

Ответить | Правка | Наверх | Cообщить модератору

100. "Увеличение скорости ввода/вывода на 6% в Linux, благодаря кэ..."  +/
Сообщение от uis (??), 17-Янв-24, 12:06 
TSC раком ставит процессор. А если виртуализация включена - то вообще бяда - происходит вызов в гипервизор.
Ответить | Правка | Наверх | Cообщить модератору

128. "Увеличение скорости ввода/вывода на 6% в Linux, благодаря кэ..."  +/
Сообщение от n00by (ok), 17-Янв-24, 15:38 
> TSC раком ставит процессор.

The RDTSC instruction is not serializing or ordered with other instructions. It does not necessarily wait until all
previous instructions have been executed before reading the counter. Similarly, subsequent instructions may begin
execution before the RDTSC instruction operation is performed.

Осталось понять, кто тут процессор.

Ответить | Правка | Наверх | Cообщить модератору

135. "Увеличение скорости ввода/вывода на 6% в Linux, благодаря кэ..."  +1 +/
Сообщение от Аноним (135), 17-Янв-24, 17:32 
> если говорить про юзерспейс, то обращение к часам происходит через отдельный вызов сисколла

Нет, если говорить про юзерспейс то обращение к часам происходит через чтение инта из зашаренной страницы памяти.

Ответить | Правка | К родителю #39 | Наверх | Cообщить модератору

43. "Увеличение скорости ввода/вывода на 6% в Linux, благодаря кэ..."  +2 +/
Сообщение от Аноним (43), 17-Янв-24, 02:24 
>> 2) Смотрение на часы никогда не было какой-то особо простой и дешевой операцией...
> Почему?

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

И вот у гражданина - 20% времени интересного ему сегмента кода - вот - смотрение на часы оказалось. Это ему и не понравилось.

Для юзермода все еще суровее, кернел аж хакает (!!!) юзермод процессы в самом прямом смысле слова - вгружая самым первым в адресное пространство "виртуальный" .so (vDSO) с оверрайдом ряда функций системной либы, в том числе и - вот - смотрение на часы. С более резвой реализацией. В юзермоде это еще более дорогая операция для соответствия поведения "часиков" ожиданиям програмеров и стандартам. Кернел может, вот, заоверлоадить локальной местечковой реализацией, если полагает что умеет это лучше либсы. От хорошей жизни это ессно не делают.

Ответить | Правка | К родителю #34 | Наверх | Cообщить модератору

137. "Увеличение скорости ввода/вывода на 6% в Linux, благодаря кэ..."  +/
Сообщение от Аноньимъ (ok), 17-Янв-24, 18:33 
Нет, то что следить за временем это не просто совсем с кучей камней - это мне понятно.
То есть как ядро свои часы считает это одно, но, смотреть на часы ядра, которые по идее просто инт в памяти - это другое.
Ответить | Правка | Наверх | Cообщить модератору

168. "Увеличение скорости ввода/вывода на 6% в Linux, благодаря кэ..."  –1 +/
Сообщение от Аноним (-), 22-Янв-24, 00:21 
> Нет, то что следить за временем это не просто совсем с кучей
> камней - это мне понятно.
> То есть как ядро свои часы считает это одно, но, смотреть на
> часы ядра, которые по идее просто инт в памяти - это другое.

Так может сказать только тот кто никогда не пробовал это или что-то отдаленно напоминающее заимплементить сам.

Например - это в общем случае не "просто читает int". Если записывает кто-то другой, начинает волновать кеширование и атомарность чтения. Иначе "просто читая int в памяти" однаждо можно читануть нечто странное. При том - это именно фигня из разряда "раз в год и палка стреляет", так что удачи в дебаге.

А если вон то учесть - даже одно только это само по себе - уже несколько более дорогая и сложная операция чем "просто чтение int из памяти".

Ответить | Правка | Наверх | Cообщить модератору

170. "Увеличение скорости ввода/вывода на 6% в Linux, благодаря кэ..."  +/
Сообщение от Аноньимъ (ok), 22-Янв-24, 10:44 
Нельзя. Запись и чтение атомарные.

И вон в тех цп время вообще в отдельном регистре, как и должно быть.

Ответить | Правка | Наверх | Cообщить модератору

171. "Увеличение скорости ввода/вывода на 6% в Linux, благодаря кэ..."  –1 +/
Сообщение от n00by (ok), 22-Янв-24, 14:22 
> Нельзя. Запись и чтение атомарные.

Пора бы уже начать хоть что-то понимать в теме, прежде чем писать.


#ifndef _M_AMD64
/*
* @implemented
*/
VOID
NTAPI
KeQuerySystemTime(OUT PLARGE_INTEGER CurrentTime)
{
    /* Loop until we get a perfect match */
    for (;;)
    {
        /* Read the time value */
        CurrentTime->HighPart = SharedUserData->SystemTime.High1Time;
        CurrentTime->LowPart = SharedUserData->SystemTime.LowPart;
        if (CurrentTime->HighPart ==
            SharedUserData->SystemTime.High2Time) break;
        YieldProcessor();
    }
}

Ответить | Правка | Наверх | Cообщить модератору

172. "Увеличение скорости ввода/вывода на 6% в Linux, благодаря кэ..."  +/
Сообщение от Аноньимъ (ok), 22-Янв-24, 14:42 
> Пора бы уже начать хоть что-то понимать в теме, прежде чем писать.

Хоть что-то понимаю.

> code

Ну и что это за муть без единого комментария? Вы бы лучше процетировали документацию в которой описано почему они делают так, а не иначе.

Ответить | Правка | Наверх | Cообщить модератору

174. "Увеличение скорости ввода/вывода на 6% в Linux, благодаря кэ..."  +/
Сообщение от n00by (ok), 22-Янв-24, 14:55 
> Ну и что это за муть без единого комментария?

Это понятный каждому системному программисту код с комментарием по существу.

> Вы бы лучше
> процетировали документацию в которой описано почему они делают так, а не
> иначе.

Зачем?

Ответить | Правка | Наверх | Cообщить модератору

175. "Увеличение скорости ввода/вывода на 6% в Linux, благодаря кэ..."  +/
Сообщение от Аноньимъ (ok), 22-Янв-24, 15:16 
А зачем вы мне что-то вообще пишите?

> Это понятный каждому системному программисту код с комментарием по существу.

В глаза смотреть, чтение и запись инта атомарные или не атомарные операции?

Ответить | Правка | Наверх | Cообщить модератору

176. "Увеличение скорости ввода/вывода на 6% в Linux, благодаря кэ..."  +/
Сообщение от n00by (ok), 23-Янв-24, 08:28 
> А зачем вы мне что-то вообще пишите?

Увидел чушь про атомарность чтения. Показал код, решающий проблему.

>> Это понятный каждому системному программисту код с комментарием по существу.
> В глаза смотреть, чтение и запись инта атомарные или не атомарные операции?

Вопросы здесь задаю я. Но смысла спрашивать "при чём тут инт?" не вижу - ответы у меня и так есть.

Ответить | Правка | Наверх | Cообщить модератору

173. "Увеличение скорости ввода/вывода на 6% в Linux, благодаря кэ..."  +/
Сообщение от Аноньимъ (ok), 22-Янв-24, 14:45 
> Если записывает кто-то другой

Никто кроме ядра время устанавливать не должен.

И происходить это не каждую минуту и не каждый час должно.

Ответить | Правка | К родителю #168 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру