The OpenNET Project / Index page

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



Индекс форумов
Составление сообщения

Исходное сообщение
"Релиз Linux-ядра 2.6.38"
Отправлено pavlinux, 16-Мрт-11 03:06 
> Можно подробнее и слегка для нуба? :)
> Так достаточно мне будет в конфиге заюзать TRANSPARENT_HUGEPAGE_MADVISE ?
> Я просто не совсем понял твою вторую строку "а где нужно использовать
> madvise..."

Вместо malloc() юзать posix_memalign () + madvise ();


/*
* Transparent Huge Pages Test
* (l) 2011 Copyleft by Pavlinux.
*/

#include <stdio.h>
#include <stdlib.h>             /* malloc/free  */
#include <string.h>             /* memset       */
#include <unistd.h>             /* sysconf      */
#include <sys/mman.h>           /* madvise      */
#include <sys/time.h>           /* time funcs   */

int
main (void)
{

  struct timeval before, after;

  void *mem;
  void *posixmem;
  void *hugemem;
  unsigned long long SIZE;
  size_t i;

  size_t page = (size_t) sysconf (_SC_PAGESIZE);

  for (i = 16; i < 21; i++) /* от 128Mb до 2Gb */
    {
      SIZE = (page * 1024 * (2 << i))/page; /* подровняем */
      printf ("\nSIZE: %Lu\n", SIZE);

      gettimeofday (&after, NULL); // старт.
      mem = malloc (SIZE);         // просто malloc
      memset (mem, 0x0a, SIZE);
      memset (mem, 0x05, SIZE);
      memset (mem, 0x0f, SIZE);
      memset (mem, 0xaa, SIZE);
      memset (mem, 0x55, SIZE);
      memset (mem, 0xff, SIZE);
      gettimeofday (&before, NULL); // стоп.

      printf ("malloc--------:  %u.%u\n", before.tv_sec - after.tv_sec,
              before.tv_usec - after.tv_usec); // старт минус стоп.
      free (mem);
/* ---------------------- */
      gettimeofday(&after, NULL);
      posix_memalign((void **)&posixmem, page, SIZE); // к границам страницы
      memset (posixmem, 0x0a, SIZE);
      memset (posixmem, 0x05, SIZE);
      memset (posixmem, 0x0f, SIZE);
      memset (posixmem, 0xaa, SIZE);
      memset (posixmem, 0x55, SIZE);
      memset (posixmem, 0xff, SIZE);
      gettimeofday (&before, NULL);

      printf ("posix---------:  %u.%u\n", before.tv_sec - after.tv_sec,
              before.tv_usec - after.tv_usec);
      free (posixmem);
/* ---------------------- */
      gettimeofday(&after, NULL);
      posix_memalign((void **)&hugemem, page, SIZE);
      madvise (hugemem, SIZE, MADV_HUGEPAGE);        /* нью-фенька */
      memset (hugemem, 0x0a, SIZE);
      memset (hugemem, 0x05, SIZE);
      memset (hugemem, 0x0f, SIZE);
      memset (hugemem, 0xaa, SIZE);
      memset (hugemem, 0x55, SIZE);
      memset (hugemem, 0xff, SIZE);
      gettimeofday (&before, NULL);

      printf ("hugemem       :  %u.%u\n", before.tv_sec - after.tv_sec,
              before.tv_usec - after.tv_usec);
      free (hugemem);
    }
  return 0;
}


 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



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

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