LINUX.ORG.RU

9
Всего сообщений: 128

★ #pragma pack VS #pragma не`pack ★

Расскажите про реальные минусы, плюсы. Подводные камни.

Ну упаковали мы структуру, ну стала она меньше памяти занимать. Как бы всё. Но допустим мы не экономим на памяти (допустим!) если ещё реальный смысл паковать? Где-то говорят что промахи кеша уменьшаются и от того код работает быстрее ведь как следствие конвеер не перезапускается, но я не верю.

UDP: На заметку (Всем спасибо за советы! (•◡•)/ )

Утилита pahole для выявления дыр в структурах и их реорганизации в Debian утилита доступна из пакета dwarves sudo apt install dwarves

gcc/clang c опцией -g3 -Wpadded + -Wextra -Wall -Werror не пропустят код с дырявыми структурами

Например для такой структуры

typedef struct {
  bool collided;
  float time;
  vec3 point;
  vec3 norm;
  int flags;
} collision;


Clang выдаёт чуть более информативно

./include/physics.h:13:9: error: padding struct 'collision' with 3 bytes to align 'time' [-Werror,-Wpadded]
  float time;

GCC же просто указывает на предмет «проблемы»

./include/physics.h:13:9: error: padding struct to align ‘time’ [-Werror=padded]
   float time;
         ^~~~

Прогон pahole же при компиляции с -g3 даёт чёткое указание на «проблему»

ничего :D

И это «ничего» меня поставило в ступор сначала, но дело в том что я использую typedef и по какой то причине pahole игнорирует не именованные структуры, если исправить так

typedef struct collision{
  bool collided;
  float time;
  vec3 point;
  vec3 norm;
  int flags;
} collision;

То pahole выдаёт чёткие подробности

struct collision {
	_Bool                      collided;             /*     0     1 */

	/* XXX 3 bytes hole, try to pack */

	float                      time;                 /*     4     4 */
	vec3                       point;                /*     8    12 */
	vec3                       norm;                 /*    20    12 */
	int                        flags;                /*    32     4 */

	/* size: 36, cachelines: 1, members: 5 */
	/* sum members: 33, holes: 1, sum holes: 3 */
	/* last cacheline: 36 bytes */
};

Исправление на

typedef struct collision {
  vec3  point;
  vec3  norm;
  float time;
  int   flags;
  bool  collided;
} collision;

Убирает предупреждения/ошибки из gcc/clang, а pahole репортует что в целом всё впорядке

struct collision {
	vec3                       point;                /*     0    12 */
	vec3                       norm;                 /*    12    12 */
	float                      time;                 /*    24     4 */
	int                        flags;                /*    28     4 */
	_Bool                      collided;             /*    32     1 */

	/* size: 36, cachelines: 1, members: 5 */
	/* padding: 3 */
	/* last cacheline: 36 bytes */
};

Но, для полного счастья было бы хорошо заполнить 3 байта для выравнивания структур (массивы структур или дву/одно связные списки к примеру) в данном случае можно заменить bool на int или добавить заполнение char pad[3] если изменение типа структуры выливается в геморой ползания по коду или нарушает читабельность.

При окончательном изменении на

typedef struct collision {
  vec3  point;
  vec3  norm;
  float time;
  int   flags;
  bool  collided;
  char  __unused_struct_padding__[3];
} collision;

получаем репорт от pahole что всё ok


struct collision {
	vec3                       point;                /*     0    12 */
	vec3                       norm;                 /*    12    12 */
	float                      time;                 /*    24     4 */
	int                        flags;                /*    28     4 */
	_Bool                      collided;             /*    32     1 */
	char                       __unused_struct_padding__[3]; /*    33     3 */

	/* size: 36, cachelines: 1, members: 6 */
	/* last cacheline: 36 bytes */
};

Заполнять пустотой это конечно такое себе, но зато на будущее есть понимание что практически бесплатно можно будет в эту структуру засунуть ещё три флага например, таким образом использовать для дела в пустую в данном случае гоняемую память.

Ну вот как то так.

 , , , ,

LINUX-ORG-RU ()

как отчистить систему от лишнего

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

Как вообще детектить и удалять лишний мусор, если он вдруг появляется не в домашней директории?

 , ,

yalef ()

Объясните пожалуйта как работать с occlusion query culling, я чёт не догоняю

Сижу такой и решил побенчить двигло своё, взял блендер и сделал модельку на 10 000 объектов вот она в таком виде у меня получается 10 000 поверхностей рендерящихся независимо друг от друга со своими VBO что хорошо для теста, а он плачевный. Ну во первых есть отсечение по пирамиде камеры оно спасает, но если 10000 объектов в прямой видимости то опять печать. Наткнулся на gl Query и пару статей о механизме работы для отсечения. Наладил в движке расширения написал простой рендер ну и делаю так (очень упрощённо)

  //прямо в рендере один раз создаю для всех свои  query
  static  GLuint query[10001], num_samples;
  static bool once = true;
  if(once){
     glGenQueries(10001, query); 
     once=false;
  }

for(int i = 0;i !=10000;i++)
{
    GLuint gg = 0;
    glGetQueryObjectuiv(query[i], GL_QUERY_RESULT, &gg);
    if(gg == 0){
        debug("[%i] drop",i);
    }else{
        debug("[%i] pass",i);
    }

    glBeginQuery(GL_SAMPLES_PASSED, query[i]);

    render_render_object(i);//вызов отрисовки одного из 10000 кубиков

    glEndQuery(GL_SAMPLES_PASSED);

 
   glGetQueryObjectuiv(query[i], GL_QUERY_RESULT, &num_samples);
   debug(">>>>>[%i] %d",i,num_samples);

}


Всё работает при уходе кубиков за край экрана пишет «drop» при перекрытии другими объектами пишет «drop» тоесть информация про то что объект рисовать нет смысла есть! Даже больше мы знаем сколько семплов есть в кадре от объекта и если их скажем меньше 1000 то мы можем сами просто выбрасывать его из отрисовки вообще, красота! Только вот беда, узнать то мы это можем только после того как уже отрисовали всё….

Единственная у меня сейчас мысль это перед тем как отрисовывать объект поставить в его место куб отмаштабировать его до размеров рисуемого меша, выполнить query тест отрисовки с этим кубом и если куб не прошол тест тоесть у нас ноль семплов куба в кадре то мы соотвецтвующей модели записываем флаг мол тебя не рисуем и когда объект будет передан рендеру он просто чекнет флаг и отрисует или выбросит объект. Вроде идея рабочея пока ещё не написал тест, но это работать будет инфа 120% пастеризованная, суть в другом правильно я мыслю как реализовывать occlusion query culling ? Ведь по моей логике я просто делаю шило на мыло, ну были бы у меня 10000 скажем чайников и я бы предварительно рисовал кубы узнавая надо ли мне рисовать чайник то выгода есть ибо 8 вершин против 800 к примеру. Мне кажется это не правильно проводить тест отрисовки на более лёгких мешах что бы узнавать надо ли рисовать основные меши со всеми текстурами и прочим. А если у меня исключительно аля маинкрафт и меньше куба только плоскость по сути и то вдруг у меня игра только на спрайтах в два треугольника. Может можно occlusion query culling делать без явной отрисовки чего либо?

OpenGL 2.1 GLSL #120

Только не надо про то что 10000 VBO и переключение текстур и всё это, да я знаю надо объединять меши и делать атласы текстур, тут про отсечение целиком, в сцене может быть 100 000 объектов независимых но рисоваться будут скажем только 100 при грамотной расстановке, а query culling по сути должен помочь отсечь то что закрывают собой другие объекты. Ток я не до конца догоняю как именно с этой хренью работать эффективно

 , , , ,

LINUX-ORG-RU ()

Ubuntu 19.04. Включен ли TRIM по-умолчанию?

Когда-то где-то читал, что на Ubuntu по-умолчанию включен TRIM для ssd. Как узнать, включен ли? В /etc/cron… ничего, связанного с TRIM не нашёл.

 , , ,

el-d ()

Вышел GameMode 1.3, оптимизатор производительности игр в Linux

GameMode может отключать режимы энергосбережения, менять параметры распределения ресурсов и планировки задач (CPU governor и SCHED_ISO), перестраивать приоритеты I/O, блокировать скринсейвер, включать performance-режимы для GPU NVIDIA и AMD, разгонять GPU NVIDIA (overclocking), запускать скрипты с пользовательскими оптимизациями.

Использование:

gamemoderun ./game

Конфигурация хранится в файле gamemode.ini

 , , ,

alexferman ()

Перенос нагрузки с ЦПУ

Всем привет.

В последнее время проц уж слишком начал грузится. Приложения начали фризить, анимации стали дерганными а курсор так и вовсе бывает на секунд 5-10 начинает тормозить. Искал виновников, большую часть нагрузки занимают компоненты рабочей среды и фаерфокс. Второй требуется по работе а первый хз как решить(пробовал mx linux, solus(все три) минт и deepin)

ОЗУ много(16 гб. Даже не знаю куда девать еще как минимум 6...), проц i3 2120 , ssd 120gb и 950m. Может как то получится перекинуть нагрузку с цпу на озу и/или видеокарту?

Не надо предложений оверклокинга и фраз «купи норм проц аля i5 2500k» пожалуйста.

Спасибо

 , ,

JavaUserOnly ()

Эффективная оптимизация. Что такое Cython.

За последнюю неделю почему-то часто всплывал этот вопрос, поэтому распишу всё сразу в одном месте. Описывать буду на примере питона, но общие принципы применимы ко многим языкам. Итак.

Часть первая. Правила эффективной оптимизация

  1. Не думайте об оптимизации пока код не дописан. Вообще! Думайте, как написать код проще и понятнее. А про оптимизацию даже не вспоминайте, пока не запустите код. Когда код запустится, проверьте насколько быстро он отрабатывает. Если он достаточно быстр — задача решена, ничего делать не нужно. Точка. И только если код отрабатывает медленнее, чем требуют условия задачи — начинайте думать об оптимизации.
  2. Попробуйте JIT, например PyPy, если условия это позволяют (apt-get install pypy && pypy yourprogram.py). Когда не хватает совсем немного производительности — JIT ускорит в несколько раз, и этого может быть достаточно. И тогда всё, задача решена. Только если это не сработало, переходите к фактической оптимизации кода.
  3. Пройдитесь профайлером. python -m cProfile yourprogram.py Никогда не оптимизируйте код без профилирования. По профилю определите самые медленные куски кода. Если код слишком большой — разбейте на функции. Не нужно бросаться переписывать всё подряд. Изолируйте наиболее прожорливые куски кода, и работайте только с ними.
  4. Выполните высокоуровневую оптимизацию найденных медленных кусков кода. Используйте более быстрые библиотеки: gmpy2 вместо встроенной длинной арифметики, python-regex вместо встроенного re, numpy для матричных вычислений, и т.д. Замените dict на list. Вынесите все возможные вычисления за циклы. Наконец, оптимизируйте алгоритм, или попробуйте найти ему более быстрый аналог. Если что-то получилось — goto 2.
  5. Cython. Расставьте типы, пройдитесь профайлером, посмотрите annotate cython-а, какой код сгенерирован, какие куски можно ускорить (он их расцвечивает)... Ещё раз подчёркиваю, низкоуровневая оптимизация — это последний этап, когда другие варианты исчерпаны.

Часть вторая. Cython

Если мы всё-таки дошли до cython-а, то... что же он такое?

Cython - это транслятор из питона в Си. Всё. Он просто генерирует код на си.

Если в файле mymodule.py написать:

def somefunc(x):
    y = x*42
    return y
и запустить cython mymodule.py то он том же каталоге сгенерирует mymodule.c, в котором будет что-то вроде:
static PyObject *__pyx_pf_8mymodule_somefunc(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x) {
  PyObject *__pyx_v_y = NULL, *__pyx_r = NULL, *__pyx_t_1 = NULL;

  __pyx_t_1 = PyNumber_Multiply(__pyx_v_x, __pyx_int_42);
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_y = __pyx_t_1;
  __pyx_t_1 = 0;

  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_y);
  __pyx_r = __pyx_v_y;

  __Pyx_XDECREF(__pyx_v_y);
  __Pyx_XGIVEREF(__pyx_r);
  return __pyx_r;
}
И, хотя это редко делают вручную, этот код можно собрать обычным компилятором: gcc -shared -O3 -o mymodule.so mymodule.c `python-config --cflags --ldflags`. Нигде в остальном коде ничего менять не надо. Обычный «import mymodule» загрузит бинарный module.so так же, как загрузил бы питоновый mymodule.py.

Да, cython позволяет скомпилировать питонокод. Но никаких глубоких интеллектуальных оптимизаций cython не делает. Он просто вызывает из libpython.so питоновые функции, такие как PyNumber_Multiply(). Без питона этот код работать не будет. (в принципе, его можно собрать статически, но обычно это не имеет смысла — реальная программа всё равно будет использовать кучу внешних либ, и ещё одна библиотека роли не сыграет)

Так как все вызовы питоновых функций остались, то просто сборка cython-ом большого ускорения не даст, может, раза в два. Но! Cython-у можно указать, где использовать сишные типы вместо питоновых! В примере выше, если расставить типы:

cdef double somefunc(double x):
    cdef double y = x*42
    return y
то cython mymodule.pyx сгенерирует в mymodule.c код:
static double __pyx_f_8mymodule_somefunc(double __pyx_v_x) {
  double __pyx_v_y, __pyx_r;

  __pyx_v_y = (__pyx_v_x * 42.0);

  __pyx_r = __pyx_v_y;

  return __pyx_r;
}
По сути, это чистый код на си. Быстрее некуда. А с параметром --annotate cython -a mymodule.pyx дополнительно сгенерирует «mymodule.html», в котором раскрасит код цветами. По нему легко смотреть, какие части кода ещё стоит оптимизировать. Но так как после расстановки типов обычным питоном такой код уже не запустится, его традиционно сохраняют в файле с расширением .pyx вместо .py.

Вот так, не написав ни одной строчки на си, а просто расставив типы, медленный питоновый код превращается в быстрый сишный.

В целом, это всё.

PS: Это не все возможности cython-а. В нём можно использовать плюсовые типы, например std::vector. Причём можно даже писать: cdef vector[double] sqrs = [x*x for x in somelist] и всё преобразование из питоновых типов в плюсовые и обратно cython возмёт на себя. Можно вызывать и внешний код на си (cdef extern from).

Есть и более тонкие оптимизации, например мелким функциям можно расставлять inline (хотя с этим и gcc обычно справляется). А ещё код, не использующий питоновые объекты, не блокирует GIL! А значит отлично подходит для многопоточных вычислений. В cython-е есть и модули для параллельных вычислений.

Да и сами .pyx файлы обычно компилируются не руками, а как часть скрипта distutils/setuptool. А в отладочных целях import pyximport; pyximport.install() и после этого обычный import mymodule сможет импортировать не только .py, но и .pyx файлы.

Полезные ссылки

Итого: Оптимизировать надо только когда иначе нельзя, и только то, что необходимо. Низкоуровневая оптимизация делается в последнюю очередь. Но если мы её таки делаем, то cython позволяет сделать её максимально легко — просто расставив типы.

PPS: Питон в этом не уникален. Почти во всех языки есть возможности низкоуровневой оптимизации, расширения на си через FFI/JNI/и т.д. Есть unsafe код в rust и c#. Даже в паскале и си есть ассемблерные вставки. Не удивительно, что кто-то придумал аналог и для питона. Так что эти же принципы оптимизации применимы и к другим языкам.

 , , , ,

pynonymous ()

Выбор дистрибутива

Здравствуйте.

Я новоприбывший пользователь линукс. До этого стояла (и стоит для не переносимых на линукс приложений) винда семёрка. Последней каплей стало когда для веб программирования запустил браузер (хромиум), фотошоп(сs6) и саблайм и приложения словно в эпилептическом припадке то «отвечали», то «не отвечали» каждые пол секунды. В течении почти месяца мучался с проблемой после установки дистрибутива(перепробовал все вплоть до Федоры кроме генту, арча). Вылетала ошибка: попытка чтения или записи вне диска hd0. Проблему решил установкой бута в самое начало(перед виндой) и восстановлением диска виндоус с загрузочного. Сейчас сижу на минте 19.1 32 бита, синнамон, однако после некоторых оптимизационных операций(оптимизации свапа, установки zen-kernel(кажется так) и чистки сервисов) желаемая отзывчивость не появилась =(

Вот вопрос: какой из дистрибутивов даст максимальную производительность/неплохие еффекты и анимации(плавный скролл/работа с горячими углами(уже привык к ним и не хочу отвыкать))

Убунту(и ее ДЕ) с слакой не предлагайте. Пробовал и не понравилось

Железо: Pentium g840, 2gb ram, жесткий терабайтник

Софт: Текстовый редактор для веба(саблайм или атом), браузер (хромиум, фф, может брейв), photoshop, либрофис, ifranz(или его аналоги) и читалка.

P.S. Было бы отлично если вы подскажете лучшую версию(дистра и/или программ)

 ,

Tanik ()

Процессору можно подсказать наивероятный переход?

Наткнулся в расте на likely/unlikely. Получается в рантайме можно вручную направить CPU в нужный бранч, чтобы он не подключал свои вероятностные нейронки и прочий кремниевый хлам?

А вот интересно, в тех же JIT-ах делается подобная оптимизация, в том же HotSpot джавы?

 , ,

foror ()

Оптимизация работы PostgreSQL 9.6

Такой вопрос.

Есть примерно 100 баз 1С. Камин 5.5.

В каждой работает по 2-3 пользователя. Нельзя сказать чтобы Камин была легковесной, но если сравнивать ее работу с LOR, то она тормозит.

Виртуалка сервера лежит на SSD, всего ОЗУ 16 гигов, 8 ядер проца, общий объем баз примерно 80 гигабайт.

Где то я читал что ЛОР использует такой объем ОЗУ, чтобы туда вся база помещалась.

Может нам так поступить? Добавить ОЗУ до уровня скажем 64 гигабайта?

https://pgtune.leopard.in.ua/ пользуюсь. В общем сейчас все настроено в соответствии с ним. Сам PostgreSQL из репа http://1c.postgrespro.ru/deb/, с оптимизацией под 1С.

Надо сказать, что время выхода пользователей на «работу» предсказуемо.

Известно, что последние числа месяца и середина месяца самые горячие.

Вот только что мне жаловались, что медленно формируются платежки.

Ну казалось бы, платежки 2 раза в месяц формируются, и занимает это по словам бухгалтера аж 5 минут! В общем то я посмотрел, меньше минуты формируется печатная форма на 200 листов.

Можно сказать, что все это закидоны и сидеть на попе ровно, но что то подвигало меня написать этот пост. Наверное, потому что PostgreSQL это тема, и вообще будущее для 1С.

Сервер Debian 9, VMWare ESX 6.0, SSD, 8 ядер AMD, 16 гигабайт ОЗУ.

 , , ,

Shulman ()

Влияет ли избыточное создание переменных на производительность?

Привет всем! Давно такой вопрос мучал меня. Влияет ли избыточное создание переменных на производительность? Допустим я в Python буду руководствоваться принципам красоты кода, и буду разбивать длинные выражения на несколько более мелких, создавая избыточные переменные, это на быстродействии не скажется? И вообще, этот случай на всех языках программирования на быстродействии не скажется? Например такой код:

def egg(a, b, c):
   some = some1.some2.some3(a)
   todo = some.fucking1.fucking2.fucking3(b)
   .... // и т.д. :)
   return fucking_finish

 , , , ,

dimcoin ()

Приложение с номером процесса 527 после загрузки. Что оптимизировано?

Здравствуйте!

На GNU GuixSD с ядром Linux 4.17.2-gnu #1 SMP 1 x86_64 GNU/Linux после загрузки и входа в систему в рабочий стол XFCE я запускаю терминал и запускаю процесс tor.

Этот процесс имеет номер 527

$ ps aux| grep tor
...
user         527 18.5  1.1  67136 39228 pts/0    S+   15:23   0:03 tor

На других ОС номер процесса значительно выше: 2000-3000.

Подскажите, как отключать лишнее?

 , ,

znavko ()

SSD: динамический или фиксированный виртуальный HDD

Здравствуйте! Хочу отдать SSD под виртуальную машину, но не могу сообразить какой вариант будет оптимальным для работы SSD: динамический жёсткий диск или фиксированный на весь SSD (15% оставить свободным контролеру для манёвра)?

 , ,

vrnd ()

Оптимизация в clang

Есть файл foo.c:

#include <stdio.h>

static inline void foo(){
	static _Bool firstTime = 1;
	if (firstTime){
		puts("First time!");
		firstTime = 0;
	} else {
		puts("Once again.");
	}
}

int main(){
	foo();
	foo();
	return 0;
}
после выполнения clang -O3 -S -emit-llvm foo.c -o foo.ll, создаётся файл foo.ll:
; ModuleID = 'foo.c'
source_filename = "foo.c"
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-linux-gnu"

@foo.firstTime = internal unnamed_addr global i1 false, align 1
@.str = private unnamed_addr constant [12 x i8] c"First time!\00", align 1
@.str.1 = private unnamed_addr constant [12 x i8] c"Once again.\00", align 1

; Function Attrs: nounwind sspstrong uwtable
define i32 @main() local_unnamed_addr #0 {
  %1 = load i1, i1* @foo.firstTime, align 1
  br i1 %1, label %4, label %2

; <label>:2:                                      ; preds = %0
  %3 = tail call i32 @puts(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str, i64 0, i64 0)) #2
  store i1 true, i1* @foo.firstTime, align 1
  br label %9

; <label>:4:                                      ; preds = %0
  %5 = tail call i32 @puts(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0)) #2
  %6 = load i1, i1* @foo.firstTime, align 1
  br i1 %6, label %9, label %7

; <label>:7:                                      ; preds = %4
  %8 = tail call i32 @puts(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str, i64 0, i64 0)) #2
  store i1 true, i1* @foo.firstTime, align 1
  br label %11

; <label>:9:                                      ; preds = %2, %4
  %10 = tail call i32 @puts(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0)) #2
  br label %11

; <label>:11:                                     ; preds = %7, %9
  ret i32 0
}

; Function Attrs: nounwind
declare i32 @puts(i8* nocapture readonly) local_unnamed_addr #1

attributes #0 = { nounwind sspstrong uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #2 = { nounwind }

!llvm.module.flags = !{!0, !1, !2}
!llvm.ident = !{!3}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 7, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{!"clang version 6.0.0 (tags/RELEASE_600/final)"}
Как сделать так чтобы, в файле foo.ll было что-то вроде следующего:
; ModuleID = 'foo.c'
source_filename = "foo.c"
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-linux-gnu"

@.str = private unnamed_addr constant [12 x i8] c"First time!\00", align 1
@.str.1 = private unnamed_addr constant [12 x i8] c"Once again.\00", align 1

; Function Attrs: nounwind sspstrong uwtable
define i32 @main() local_unnamed_addr #0 {
  %1 = tail call i32 @puts(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str, i64 0, i64 0))
  %2 = tail call i32 @puts(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0))
  ret i32 0
}

; Function Attrs: nounwind
declare i32 @puts(i8* nocapture readonly) local_unnamed_addr #1

attributes #0 = { nounwind sspstrong uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }

!llvm.module.flags = !{!0, !1, !2}
!llvm.ident = !{!3}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 7, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{!"clang version 6.0.0 (tags/RELEASE_600/final)"}

 , ,

Taetricus ()

Гуру! Помогите настроить сервер!

Здравствуйте, о глубокоуважаемые форумчане! Помогите нубу настроить сервер. Сам я ничего не знаю, по русски говоря - ни в зуб ногой. Сайт тормозит, тормозит серьезно, время отклика составляет до 3 с ((((

Напишите, что сделать, я сделаю и выложу результат... Я более чем уверен, что ваши советы помогут !

VPS Six cores 24 GB, debian 9, apache

---------------------- My.cnf ---------

  • !includedir /etc/mysql/conf.d/
  • !includedir /etc/mysql/mariadb.conf.d/
  • [mysqld]
  • slow_query_log = /var/log/mysql/mysql-slow.log
  • long_query_time = 1
  • key_buffer_size = 8192M
  • sort_buffer_size = 64M
  • query_cache_type = 1
  • query_cache_size = 256M
  • query_cache_limit = 4M
  • table_open_cache = 2048
  • query_cache_limit = 32M
  • thread_cache_size = 16
  • max_heap_table_size = 128M
  • tmp_table_size = 128M

---------------------- Mysqltuner ---------

  • [--] Skipped version check for MySQLTuner script
  • [OK] Logged in using credentials from debian maintenance account.
  • [OK] Currently running supported MySQL version 10.1.26-MariaDB-0+deb9u1
  • [OK] Operating on 64-bit architecture
  • -------- Log file Recommendations ------------------------------------------------------------------
  • [--] Log file: /var/log/mysql/error.log(0B)
  • [OK] Log file /var/log/mysql/error.log exists
  • [OK] Log file /var/log/mysql/error.log is readable.
  • [!!] Log file /var/log/mysql/error.log is empty
  • [OK] Log file /var/log/mysql/error.log is smaller than 32 Mb
  • [OK] /var/log/mysql/error.log doesn't contain any warning.
  • [OK] /var/log/mysql/error.log doesn't contain any error.
  • [--] 0 start(s) detected in /var/log/mysql/error.log
  • [--] 0 shutdown(s) detected in /var/log/mysql/error.log
  • -------- Storage Engine Statistics -----------------------------------------------------------------
  • [--] Status: +Aria +CSV +InnoDB +MEMORY +MRG_MyISAM +MyISAM +PERFORMANCE_SCHEMA +SEQUENCE
  • [--] Data in MyISAM tables: 530M (Tables: 32)
  • [--] Data in InnoDB tables: 416K (Tables: 20)
  • [OK] Total fragmented tables: 0
  • -------- Security Recommendations ------------------------------------------------------------------
  • [OK] There are no anonymous accounts for any database users
  • [OK] All database users have passwords assigned
  • [--] There are 612 basic passwords in the list.
  • -------- CVE Security Recommendations --------------------------------------------------------------
  • [OK] NO SECURITY CVE FOUND FOR YOUR VERSION
  • -------- Performance Metrics -----------------------------------------------------------------------
  • [--] Up for: 15h 33m 58s (722K q [12.888 qps], 27K conn, TX: 21G, RX: 1G)
  • [--] Reads / Writes: 97% / 3%
  • [--] Binary logging is disabled
  • [--] Physical Memory : 23.6G
  • [--] Max MySQL memory : 18.2G
  • [--] Other process memory: 171.9M
  • [--] Total buffers: 8.6G global + 64.8M per thread (151 max threads)
  • [--] P_S Max memory usage: 0B
  • [--] Galera GCache Max memory usage: 0B
  • [OK] Maximum reached memory usage: 10.4G (44.25% of installed RAM)
  • [OK] Maximum possible memory usage: 18.2G (77.31% of installed RAM)
  • [OK] Overall possible memory usage with other process is compatible with memory available
  • [OK] Slow queries: 0% (0/722K)
  • [OK] Highest usage of available connections: 18% (28/151)
  • [OK] Aborted connections: 0.96% (262/27159)
  • [!!] name resolution is active : a reverse name resolution is made for each new connection and can reduce performance
  • [!!] Query cache may be disabled by default due to mutex contention.
  • [OK] Query cache efficiency: 26.3% (223K cached / 850K selects)
  • [!!] Query cache prunes per day: 141704
  • [OK] Sorts requiring temporary tables: 0% (0 temp sorts / 335K sorts)
  • [OK] No joins without indexes
  • [!!] Temporary tables created on disk: 36% (72K on disk / 197K total)
  • [OK] Thread cache hit rate: 99% (45 created / 27K connections)
  • [OK] Table cache hit rate: 96% (149 open / 155 opened)
  • [OK] Open file limit used: 1% (183/16K)
  • [OK] Table locks acquired immediately: 99% (713K immediate / 715K locks)
  • -------- Performance schema ------------------------------------------------------------------------
  • [--] Performance schema is disabled.
  • [--] Memory used by P_S: 0B
  • [--] Sys schema isn't installed.
  • -------- ThreadPool Metrics ------------------------------------------------------------------------
  • [--] ThreadPool stat is enabled.
  • [--] Thread Pool Size: 6 thread(s).
  • [--] Using default value is good enough for your version (10.1.26-MariaDB-0+deb9u1)
  • -------- MyISAM Metrics ----------------------------------------------------------------------------
  • [!!] Key buffer used: 19.0% (1B used / 8B cache)
  • [OK] Key buffer size / total MyISAM indexes: 8.0G/137.2M
  • [OK] Read Key buffer hit rate: 100.0% (1B cached / 64K reads)
  • [OK] Write Key buffer hit rate: 98.2% (40K cached / 39K writes)
  • -------- InnoDB Metrics ----------------------------------------------------------------------------
  • [--] InnoDB is enabled.
  • [--] InnoDB Thread Concurrency: 0
  • [OK] InnoDB File per table is activated
  • [OK] InnoDB buffer pool / data size: 128.0M/416.0K
  • [!!] Ratio InnoDB log file size / InnoDB Buffer pool size (75 %): 48.0M * 2/128.0M should be equal 25%
  • [!!] InnoDB buffer pool <= 1G and Innodb_buffer_pool_instances(!=1).
  • [--] InnoDB Buffer Pool Chunk Size not used or defined in your version
  • [!!] InnoDB Read buffer efficiency: 85.41% (1896 hits/ 2220 total)
  • [!!] InnoDB Write Log efficiency: 81.54% (53 hits/ 65 total)
  • [OK] InnoDB log waits: 0.00% (0 waits / 12 writes)
  • -------- AriaDB Metrics ----------------------------------------------------------------------------
  • [--] AriaDB is enabled.
  • [OK] Aria pagecache size / total Aria indexes: 128.0M/1B
  • [OK] Aria pagecache hit rate: 97.0% (153M cached / 4M reads)
  • -------- TokuDB Metrics ----------------------------------------------------------------------------
  • [--] TokuDB is disabled.
  • -------- XtraDB Metrics ----------------------------------------------------------------------------
  • [--] XtraDB is disabled.
  • -------- RocksDB Metrics ---------------------------------------------------------------------------
  • [--] RocksDB is disabled.
  • -------- Spider Metrics ----------------------------------------------------------------------------
  • [--] Spider is disabled.
  • -------- Connect Metrics ---------------------------------------------------------------------------
  • [--] Connect is disabled.
  • -------- Galera Metrics ----------------------------------------------------------------------------
  • [--] Galera is disabled.
  • -------- Replication Metrics -----------------------------------------------------------------------
  • [--] Galera Synchronous replication: NO
  • [--] No replication slave(s) for this server.
  • [--] Binlog format: STATEMENT
  • [--] XA support enabled: ON
  • [--] Semi synchronous replication Master: Not Activated
  • [--] Semi synchronous replication Slave: Not Activated
  • [--] This is a standalone server
  • -------- Recommendations ---------------------------------------------------------------------------
  • General recommendations:
  • MySQL was started within the last 24 hours - recommendations may be inaccurate
  • Configure your accounts with ip or subnets only, then update your configuration with skip-name-resolve=1
  • Increasing the query_cache size over 128M may reduce performance
  • When making adjustments, make tmp_table_size/max_heap_table_size equal
  • Reduce your SELECT DISTINCT queries which have no LIMIT clause
  • Performance schema should be activated for better diagnostics
  • Consider installing Sys schema from https://github.com/mysql/mysql-sys
  • Before changing innodb_log_file_size and/or innodb_log_files_in_group read this: http://bit.ly/2wgkDvS
  • Variables to adjust:
  • query_cache_size (=0)
  • query_cache_type (=0)
  • query_cache_size (> 256M) [see warning above]
  • tmp_table_size (> 128M)
  • max_heap_table_size (> 128M)
  • performance_schema = ON enable PFS
  • innodb_log_file_size should be (=16M) if possible, so InnoDB total log files size equals to 25% of buffer pool size.
  • innodb_buffer_pool_instances (=1)

----------------

Кол-во записей в базе около 1 млн, таблиц 32.

----------------

Помогите, пожалуйста, советом, что нужно изменить и что проверить ?

 , , ,

Booble ()

Нужно настроить сервер VPS

Здравствуйте, нужна тонкая настройка сервера (Дебиан 9, Апач, php7.1, mariadb, MyISAM). 32 таблицы, кол-во записей около 1 млн Минимизировать скорость отклика (до 0,5c). Сейчас скорость отклика от 1,4 до 2,6 сек. Оптимизировать таблицы, индексы и тд. Внести рекомендации/исправления в медленные запросы (хотя, я их что-то не наблюдаю, в логе)... Хостинг contabo VPS L SSD Проект на php, на простейшей на Simpla cms ---

 , , ,

Booble ()

Очередь голосований

Господа лор-админы, добрый день! Вы заметили, что накапливаются голосования, которые висят неподтвержденными аж по нескольку месяцев?

Что можно предложить для сокращения очереди:

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

 , ,

Infra_HDC ()

Скорость TTFB по IP адресу быстрее, чем по имени домена.

День добрый сайт на VPS, подключен ssl сертификат. Так вот, проблема в том, что если тестировать скорость по чистому ip сервера, то время до получения первого байта (TTFB) = 1,2 секунды.

А если теперь протестировать сайт по домену с сертификатом SSL https://mydomen.ru, то TTFB = 3,5 секунды.

Если протестировать сайт без сертификата SLL, то есть без HTTPS, то скорость загрузи TTFB =2,2 секунды.

Итого. 1) время до получения первого байта (TTFB), тормозится по причине поиска IP сервера через домен. ТО есть, ввожу домен, идет поиск сервера. 2) Сертификат SSL

Вопрос, что можно сделать для оптимизации, где то читал что причина может быть в том, что плохо работает DNS-сервер, который содержит PTR записи для адресов его диапазона. Может быть не RTR записи.

 ,

maxik1986 ()

Уменьшить TTFB (Time to First Byte)

Сайт лежит на VDS, на сервере настроена виртуальная машина VITRIX VM. Нужно настроить так, что бы уменьшить время Time to First Byte Проблема именно в сервере, так как я загрузил просто пустой html документ на сервер, и протестировал загрузку, ответ более чем 2 секунды. prntscr.com/izmxz9 Оплата 3000 р.

 , , ,

maxik1986 ()

Explain до его реального запроса

Сталкиваюсь часто с проблемой , что сторонние разрабы подготовливают зачастую не очень хорошие sql запросы SELECT .
Некоторые для проверки и оптимизации их(отсылаю им графический EXPLAIN [спасибо mysql workbench ] ) требует для своего EXPLAIN очень много времени , а без него не знаю структуру таблицы мне сложно им советовать .

Существует ли способ, хотя бы приблизительно получать результаты по смыслу такие же как и EXPLAIN без исполнение запроса? Есть ли аналог линта для них ?

СУБД Percona или последние mariadb

 ,

pinachet ()