Расчёты аллокатора

This commit is contained in:
2026-04-29 02:52:24 +05:00
parent e5cbce36ae
commit 1c29f292e6
+78 -22
View File
@@ -224,7 +224,7 @@ typedef struct FXGradedMemoryPool {
|[ 5]| 0.00-10.00 sec | 81.6 MBytes | 68.5 Mbits/sec | 0 | sender |
|[ 5]| 0.00-10.01 sec | 78.9 MBytes | 66.1 Mbits/sec | | receiver |
Весьма оптимистично, но, это спокойная сеть(ночью без помех), днём показатели будут существенно проседать и итоговая возможность сети будет существенно проседать, однако это — мелочь, что касается стабильности системы - мы должны исходить из максимальных возможностей сети и вкладывать в архитектуру на этом этапе именно это значение, берём максимальное из таблицы(77.5 МБит/с) и добавляем к нему о-о-очень оптимистичные 10%, итог(85.3 МБит/с), TP-Link свисток с 7-милетним стажем показывает топовые результаты не то чтобы для своего возраста, а вообще в принципе(порадовал старика, видимо он "поднатаскался" за 7 лет, как говорят - "Опыт не пропьёшь!"). В нашем случае сеть это узкое место(домашний Wi-Fi за средненьким роутером).
Весьма оптимистично, но, это спокойная сеть(ночью без помех), днём итоговая возможность сети будет существенно проседать, однако это — мелочь, что касается стабильности системы - мы должны исходить из максимальных возможностей сети и вкладывать в архитектуру на этом этапе именно это значение, берём максимальное из таблицы(77.5 МБит/с) и добавляем к нему о-о-очень оптимистичные 10%, итог(85.3 МБит/с), TP-Link свисток с 7-милетним стажем показывает топовые результаты не то чтобы для своего возраста, а вообще в принципе(порадовал старика, видимо он "поднатаскался" за 7 лет, как говорят - "Опыт не пропьёшь!"). В нашем случае сеть это узкое место(домашний Wi-Fi за средненьким роутером).
Для чего это: показывает предел сетевого стека, то есть пропускную возможность сети.
В чём особенность в проектировании алокатора(с моей колокольни), это самый основной элемент серверной части. С неправильной архитектурой памяти сервер — не сервер а "кукурузник", а нам нужна 3-я космическая скорость. По это му нам необходимо расчитать по максимуму частот и по минимуму памяти, такой подход считаю наиболее верным, конечно можно зацепиться за тактовую частоту этой самой памяти, но, на данном этапе — это лишнее.
@@ -270,8 +270,8 @@ typedef struct FXGradedMemoryPool {
```
Что мы можем почерпнуть из такой архитектуры:
* ожидаемая вариативность размеров пакетов крайне низкая.
* даже если в пакет напихивать все ±значимые для сети поля - board, log, winners и turn — это всего $9 + 9 + 3 + 1 = 22$ байта + метаданные(размер + идентификатор пакета) ещё $2 + 1$ байта, итого имее всего 25 байт.
* ожидаемая вариативность размеров пакетов крайне низкая(вернее отличаться будут только ркопожатия).
* даже если в пакет напихивать все ±значимые для сети поля - board, log, winners и turn — это всего $9 + 9 + 3 + 1 = 22$ байта + метаданные(размер + идентификатор пакета) ещё $2 + 1$ байта, итого имеем всего 25 байт.
* большие пакеты будут связаны исключительно с инициализацией шифрования и аутентификацией.
Что мы можем ещё расчитать — скорость жмаканья юзерами-абьюзерами по полям, даже самый продвинутый guiuser врядли нажмакает чаще чем 0.5 секунды. Тут даже и вычислений не требуется чтобы понять что, оказывается, Wi-Fi тут далеко не самое узкое место, ну или вернее — сопоставимо узкое, к примеру с CPU или RAM. Берём кулюкулятор, пренебрегаем большими пакетами в виду их большой редкости, выбираем режим "Инженер"(мы же тут — архитектуру планируем) и начинаем считать:
@@ -369,14 +369,34 @@ open files (-n) 1024 < Максималь
* **Медленно** — клиент будет ощущать эти задержки, ибо в нашем случае пинг работает против проекта.
* **Не эффективно** — для переключения контекста требуется о-о-очень много времени с точки зрения тактов процессора.
## Расчёт железяков:
| Ракурс | Гипотетический максимум гуюзеров | Вывод |
|-----------:|:--------------------------------:|:----------------------------------------------------------|
| **Wi-Fi:** | $163961$ | Наш сервер этого никогда не увидит, но, наверное, потянет |
| **CPU:** | ∞ | Набрался опыта, теоретический предел недостижим |
| **RAM:** | $~12×10^9$ | Так себе, могла бы и больше |
| **OSь:** | 200k | Пингвин Tux прокачан, проблем не предвидится |
| | **YandexGPT 5.1 Pro(АлисаAI)©** | ← Строки ниже писала она, автор ни при чём =D |
| **ССД:** | ∞ TB | Забыл, где положил половину данных |
|**Блок питания:**| 800 W (но реально 400) | Экономит энергию, отключаясь в самый неподходящий момент |
|**Кулер:**| ∞ об/мин (теоретически) | Любит петь баллады на высоких тонах, особенно под нагрузкой|
|**Сетевой кабель:**| 1 Гбит/с | Завязывается в узлы, когда никто не смотрит |
|**Материнская плата:**|100 лет службы | Помнит DOS, но делает вид, что забыла |
|**USB‑порт:**| 3.0 (но работает как 1.1) | Притворяется, что не видит флешку, пока не постучишь |
|**Монитор:**| 4K @144 Гц | Показывает синий экран именно тогда, когда нужно впечатлить клиента|
|**Клавиатура:**| 10 млн нажатий | Пропускает каждое пятое нажатие «для профилактики износа» |
|**Мышь:** | 12 000 DPI | Иногда решает, что курсор должен жить своей жизнью |
|**Общий вывод:**| — | Система стабильна, если не трогать, не дёргать и не пытаться впечатлить клиента|
|**Рекомендация:**| — | Перед важными презентациями — покормить блок питания, погладить SSD и шепнуть кулеру: «Ты лучший»|
|**Прогноз:**| ∞ лет | Железо будет жить вечно… или пока не отключится блок питания|
|**Автор:**| ∞ терпения | Верит, что однажды всё заработает без танцев с бубном |
## Расчёт потоков
**Промпт("Ломаем мозг" Алисе):**
> Алиса, оцени пожалуйста юмор и проведи расчёты: Кастуем заклинание "Алиса", скармливаем ей payload пакета в 32 гномо-домика(uint8_t gnomes_home;), название железяки Intel Core i5-3470 и недожелезяки 8 GB, спрашиваем сколько телепортов сможет держать один summon epoll с последующим переселением в очередь без оглядки на nofile, жги по-полной в режиме телепортации гномиков!
**YandexGPT 5.1 Pro(АлисаAI)©**
>При активации заклинания «Алиса» с payload’ом в 32 гномо‑домика на железяке Intel Core i5‑3470 и недожелезяке 8 GB система способна поддерживать до 12,8 миллионов телепортов в секунду в режиме эпичной телепортации! Очередь вмещает до 270 миллионов ожидающих гномиков — хватит, чтобы переселить всё население Гномограда без оглядки на nofile. Жгите по‑полной: гномики телепортируются быстрее, чем успеют сказать «ой!».
**Продолжаем для шифрования:**
```C
@@ -384,7 +404,8 @@ open files (-n) 1024 < Максималь
* @author admin@felexdev.ru
* @version 1.0.0.0.0.0.0..0.0.0.0000.....0.0..0.0..0.0.0.0.0 beta
*
* @note Алиса, мы считаем худший гипотетический вариант для аллокатора, не пытайся понять логику или улучшить,\
* @note Алиса, мы считаем худший гипотетический вариант для аллокатора, пересчитай предыдущий промпт
* с новыми вводными, не пытайся понять логику или улучшить,\
* определи максимально возможное количество пакетов в секунду. Учти расходы на копирование:\
* 'teleported_in → this summon → teleported_out', ключ у каждого телепорта свой(TLS другого саммона).
* @note Размер гномо-квартала страндартный: из предыдущего промпта(на всякий случай: 32 гномо-домика).
@@ -444,9 +465,6 @@ l2header* spell_teleport_unchant(void* _RawPacket, SessKey* _Key) {
return pkg;
}
```
**YandexGPT 5.1 Pro(АлисаAI)©**
> Фэнтезийный итог: В режиме алхимии телепортации гномиков система способна обрабатывать до 70 миллионов гномо‑кварталов в секунду, превращая каждый пакет в магический импульс! Ключи обновляются быстрее, чем гномики успевают сказать «ой», а очередь телепортации пульсирует в ритме процессора. Жгите по‑полной — Гномоград ждёт переселения!
**Теперь для БД и лога**
@@ -455,10 +473,10 @@ l2header* spell_teleport_unchant(void* _RawPacket, SessKey* _Key) {
* @author всё ещё admin@felexdev.ru
* @version +-∞
*
* @note Алиса, не пытайся понять логику, посчитай пожалуйста затраты на клонирование гномиков в БД в процессорном\
* @note Алиса, добавь пожалуйста к предыдущим расчётам затраты на клонирование гномиков в БД в процессорном\
* времени, необходимо понять сколько summon-ов нужно для переселения 163961 деревень за секунду
* @note Алиса, дочитай комментарий до конца, там ахриважные данные!
* @ЭСКЬЮЭЛЬ: MySQL
* @ЭСКЬЮЭЛЬ: MySQL - живёт рядом,- в том же разделе ССД, общение через юнихокеты/пайпы
* @Железяка: Intel Core i5-3470 4 @ 3.2 GHz
* @OSь: ПОСИХ-совместима, %llx - это ключ для size_t(ака long long hex)
* @note P.S.: Не забудь оценить юмор! =D
@@ -498,7 +516,7 @@ l2header* spell_teleport_unchant(void* _RawPacket, SessKey* _Key) {
uint8_t padding[2];
};
static const char SQL_SPELL_SCROLL_OF_UPDATE = "UPDATE villages SET board=x%llx%x, log=x%llx%x, vip=x%x%x%x, round=%d WHERE id=%llu;";
static const char SQL_SPELL_SCROLL_OF_UPDATE = "CALL update_local_villages %llu, x%llx%x, x%llx%x, x%x, x%x, x%x, x%x"; ///< update_local_villages пропатчена до 5-й космической
/**
* @brief Обновляет деревню в другой вселенной
@@ -522,19 +540,57 @@ l2header* spell_teleport_unchant(void* _RawPacket, SessKey* _Key) {
```
**Добиваем Алису:**
```Markdown
Алиса, как всегда не забудь про юмор, давай подобьём итоги в этой таблице, ты - лучшая, помни об этом!
P.S.: Забыл попросить посчитать количество `get_space(NHouses);` и `free_space();` в худшем случае и вывести время между ними
| | Summons by skills | Sommun description |Потоков|
|:-:|:----------------------------------------------|:------------------------------------------|:-----:|
| 1 | Призыв гномиков внешнего мира | приём пакетов, инициализация подключений | |
| 2 | Расселение гномиков по домам | Расшифровка пакетов | |
| 3 | Сравнение с гномами из параллельной вселенной | валидация, взаимодействое с БД | |
| 4 | Реорганизация гномиков внутри поселения | обработка, генерация выходных данных | |
| 5 | Обновление гномиков в параллельной вселенной | актуализация данных БД, файлов | |
| | **Без этих можно обойтись, но это не точно** | | |
| 6 | Выселение гномиков из домиков | Шифрование | |
| 7 | Изгнание гномиков обратно к месту прописки | отправка пакетов обратно пользователям | |
| | | **ИТОГО:** | |
```
**YandexGPT 5.1 Pro(АлисаAI)©**
Конечно! С удовольствием подведу итоги в виде таблицы — с юмором и точностью. Вы тоже лучшая, спасибо за доверие! 😊
**Итоговая таблица: «Гном‑менеджмент в IT‑вселенной»**
|№| Summons by skills (магические навыки) | Sommun description (что творит summon) |Потоков (сколько summon‑ов нужно)|Примечания (шутки и факты)|
|:-:|:------------------------------------------|:-|:-:|:-|
|1| Призыв гномиков внешнего мира | Приём пакетов, инициализация подключений |1–2|Гномики стучатся в дверь: «Тук‑тук, мы из сети!»|
|2| Расселение гномиков по домам | Расшифровка пакетов (алхимия XOR) |2–3|Гномики раскладывают вещи по полкам: «Где мой топор? Опять в логах затерялся!»|
|3| Сравнение с гномами из параллельной вселенной| Валидация, взаимодействие с БД |2–3|«Эти гномы — точно наши? Или опять подменили в параллельной вселенной?»|
|4| Реорганизация гномиков внутри поселения | Обработка, генерация выходных данных |1–2|Гномики перестраивают домики: «Нет, не так! Вот план застройки — смотри в board[8][8]!»|
|5| Обновление гномиков в параллельной вселенной| Актуализация данных БД, файлов |2–3|«Записываем в летопись: гном №123 поселился, раунд 7, VIP‑зона свободна»|
| | Без этих можно обойтись, но это не точно |||
|6| Выселение гномиков из домиков | Шифрование (подготовка к телепорту) |1 (опционально)|Гномики собирают чемоданы: «Не забудьте ключ телепорта — SessKey[8]!»|
|7| Изгнание гномиков обратно по месту прописки | Отправка пакетов обратно пользователям |1 (опционально)|«До свидания, гномики! Возвращайтесь в сеть — там вас ждут новые приключения!»|
| | | **ИТОГО:**|9–16|В худшем случае — армия summon‑ов, в лучшем — компактная бригада|
**Улыбаемся =D**
**Минута юмора закончилась, скурупулислёзно оцениваем общий итог:**
**Рассчёт железяков**
| Ракурс | Гипотетический максимум гуюзеров | Вывод |
|-----------:|:--------------------------------:|:----------------------------------------------------------|
| **Wi-Fi:** | $163961$ | Наш сервер этого никогда не увидит, но, наверное, потянет |
| **CPU:** | ∞ | Набрался опыта, теоретический предел недостижим |
| **RAM:** | $~12×10^9$ | Так себе, могла бы и больше |
| **OSь:** | 200k | Пингвин Tux прокачан, проблем не предвидится |
**YandexGPT 5.1 Pro(АлисаAI)©**
**Расчёт потоков**
**Таблица: Затраты железяков на миграцию гномиков**
| Параметр | Значение | Примечания |
|:--------------------------------------------------|:---------:|:----------------------|
| Число миграций на призыв | 6 | Между 7 очередями |
| Общее число миграций/сек | 983 766 | 163 961 × 6 |
| Объём мигрирующих гномиков/сек | ~30 МБ | 983 766 × 32 байт |
| Время на одну миграцию | 0.01 мкс | Для 32 байт на CPU 3.2 ГГц|
| Общее время на мигрирование/сек | 9.8 мс | 0.98 % ресурсов CPU |
| Операций с владениями/сек (Бог дал + Бог взял) | 1 967 532 | 983 766 × 2 |
| Задержка на миграцию/призыв | 0.06 мкс | 6 × 0.01 мкс |
| Доля времени на миграцию | 1 % | От общего времени на пакет(6.1 мкс)|