Хороший… Плохой… Главное — у кого ружьё!
6,4
рейтинг
1 июля 2013 в 09:02

Администрирование → Вышло ядро Linux 3.10

image

В воскресенье вечером официально вышло новое ядро Linux 3.10. По словам Линуса Торвальдса, ядро получилось самым большим по объему нововведений за последние несколько лет. Первоначально Линус предполагал выпустить еще один релиз-кандидат, но склонился к тому, чтобы выпустить финальный релиз 3.10 — и в своем сообщении он замечает, что новое ядро, как и Linux 3.9, не склонно к проблемам с работоспособностью и готово к повседневному использованию.

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

Неполный список внесённых в ядро 3.10 изменений:

  • Можно запретить выполнять скрипты как программы — функционал запуска скриптов, содержащих путь к интерпретатору в заголовке "#!", теперь может быть собран в виде модуля ядра;
  • Интегрирована разработанная и используемая в Google система Bcache. Bcache позволяет организовать кэширование доступа к медленным жестким дискам на быстрых SSD-накопителях; кэширование при этом ведётся на уровне блочного устройства — и это позволяет ускорить доступ к накопителю, причем независимо от используемых файловых систем на устройстве;
  • Ядро можно собирать компилятором Clang благодаря подготовленным проектом LLVMLinux патчам;
  • Появилась динамическая система управления генерацией прерываний таймером. Теперь можно в зависимости от текущего состояния изменять прерывания в диапазоне от тысяч тиков в секунду до одного прерывания в секунду — это позволяет сводить к минимуму нагрузку на CPU при обработке прерываний в случае неактивности системы. Сейчас эта функция используется для систем реального времени и HPC (высокопроизводительных вычислений), но в следующих выпусках ядра будет задействована и для десктоп-систем тоже;
  • Появилась возможность генерации события с уведомлением приложения о приближении к исчерпанию доступной процессу/системе памяти (в cgroups);
  • Для команды perf стало доступно профилирование доступа к памяти;
  • Появился новый драйвер «sync» (экспериментальный). Он был разработан в рамках платформы Android и используется для синхронизации между другими драйверами;
  • Появился драйвер для виртуальных видеоадаптеров Microsoft Hyper-V (по работе Hyper-V в целом тоже есть улучшения);
  • Теперь поддерживаются новые средства управления питанием, которые появились в процессорах AMD семейства 16h («Jaguar»);
  • Поддержка ускорения декодирования видео с использованием аппаратного декодера UVD, встроенного в современные GPU AMD, была добавлена в DRM-модуль Radeon;
  • Добавлена поддержка протокола RDMA (iSER) в подсистему iSCSI;
  • Выполнение криптографических функций (sha256, sha512, blowfish, twofish, serpent и camellia) оптимизировано с использованием инструкций AVX/AVX2 и SSE.;
  • Был интегрирован драйвер виртуальной графической карты QXL (применяется в системах виртуализации для ускоренного вывода графики при помощи протокола SPICE).

Подробнее про изменения (eng)
Владимир Маслов @HotWaterMusic
карма
166,7
рейтинг 6,4
Хороший… Плохой… Главное — у кого ружьё!
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Администрирование

Комментарии (61)

  • +45
    ~60 000 000 строк кода, ~40 000 файлов, если читать 1 строчку за секунду 12 часов в день, можно прочитать все исходники за ~5 месяцев…
    • +46
      — Дети, что вы прочитали летом?
      — Войну и мир!
      — Петр Первый!
      — Тихий дон!
      — Исходники ядра Linux 3.10…
      • +22
        «Исходники ядра Linux. Краткое содержание»
      • –13
        … и нашел несколько багов, которые успешно продал. Мариванна, эта нефритовая указка — вам!
      • НЛО прилетело и опубликовало эту надпись здесь
        • –5
          Ну не все же время читать! «Чукча не читатель — чукча писатель!»
          • –3
            Вы о себе — «Чукча»? :)
            можно прочитать все исходники за ~5 месяцев…
        • 0
          Если читать по 2 строчки в секунду, то можно успеть.
          • +1
            Вы всерьёз думаете что можно читать с такой скоростью?)
            • +10
              можно, вот отрывок:

               }
              
               return 0;
              } 
              
              • 0
                Поэтому всё же нужно выборку по кол-ву символов, а не строк. Более значимый показатель выйдет имхо.
                • 0
                  По количеству операторов и прочих содержательных элементов кода.
      • 0
        В первоисточнике всё же не «Тихий дон», а «Тихий Дон».

        «Тихий дон» — это про итальянскую мафию что-то.
    • +8
      sysop@cdecl.ru0:58 (8 мин. назад)
      кому: мне
      Добрый вечер!

      Не имея возможности написать на хабр, укажу на одну досадную ошибку в содержимом и попрошу Вас любезно переадресовать этот багрепорт по адресу.

      habrahabr.ru/post/183560/ — Линус говорит о том, что ядро содержит 16 (шестнадцать) миллионов строк кода, а не шестьдесят, как указано в переводе. На видео в статье (06:03) отчётливо слышно "..is slightly bigger, we're about sixteen million lines of code", что подтверждается статистикой с ohloh (http://www.ohloh.net/p/linux).
      Из-за этой досадной неточности продолжат появляться априори некорректные, но заплюсованные комментарии (к примеру — habrahabr.ru/post/185178/#comment_6439388).

      www.youtube.com/watch?v=yVpbFMhOAwE — вот еще одно видео для подтверждения
  • 0
    «Поддержка ускорения декодирования видео с использованием аппаратного декодера UVD, встроенного в современные GPU AMD, была добавлена в [bold]DRM-модуль Radeon[/bold]»
    Просветите пожалуйста, значит ли это, что в ядре используются блобы?
    Или этот DRM-модуль от Radeon open source?
    • 0
      Я так понял, что второе — AMD вроде как частично открыла код. Еще вот и вот по теме.
      • +4
        Вторая ссылка неактуальна (пересборка не нужна). В данный момент чтобы задействовать UVD в Raring нужно:
        1. Собственно накатить ядро 3.10: kernel.ubuntu.com/~kernel-ppa/mainline/v3.10-saucy/
        2. В /lib/firmware/radeon/ закинуть обновлённые прошивки для используемой видеокарты и добавить прошивку для UVD.
        Обновлённые прошивки брать здесь: people.freedesktop.org/~agd5f/radeon_ucode/
        Какие прошивки брать: wiki.gentoo.org/wiki/Radeon#Firmware
        3. Обновиться из ppa:oibaf/graphics-drivers и установить libg3dvl-mesa (обновиться можно и из ppa:xorg-edgers/ppa но libg3dvl-mesa из Oibaf PPA всё равно понадобится).
        Перезагрузитесь и проверьте вывод «dmesg | grep UVD» а так же vdpauinfo.

        В Saucy должно будет работать из коробки.
        • +2
          В Gentoo проще:
          1. Размаскировать свежий radeon-ucode и gentoo-sources.(пара строчек в /etc/portage/package.keywords с именами пакетов).
          2. Обновить эти самые пакеты.
          3. Собрать ядро через make && make install && make modules_install или genkernel all.
          • 0
            Сравнили роллинг с убунтой — день прожит не зря.
            • +4
              Вот поэтому и ушёл с ubuntu, что надоело каждые пол года красноглазить и разбираться с системой. А тут всё по накатаной идёт.
              • 0
                Вы говорите так, как будто поддержку декодирования видео в свободные драйвера каждые полгода добавляют.
                • +1
                  Каждые пол года выходит новый релиз Ubuntu и есть два варианта: оставаться на старом софте, либо перетрясать репозитории на предмет возможности перехода на новую ветку, отключения ненужных и прочие радости апгрейда. Как показала практика, сторонних репозиториев накапливается достаточно много и не всегда их авторы быстро реагируют на новые версии Ubuntu.
                  В Gentoo у меня подключено всего три оверлея: для плеера Deadbeef, для java и для игр (в том числе Steam). И мне не нужно заботится подходят они или нет к моей системе. Они просто подходят.
                  • 0
                    Справедливости ради надо заметить, что при попытке собрать старый софт вылезают некоторые траблы с зависимостями. Бывает и наоборот, один из недавних моих примеров: при попытке собрать octave напоролся на то, что в зависимостях у него стоит любой cblas, но тот, что помечен стабильным слишком стар и тянет за собой еще eselect-blas, но это конфликтует с другим пакетом. В итоге пока не размаскировал новый cblas со сборкой были проблемы.
                  • 0
                    > либо перетрясать репозитории на предмет возможности перехода на новую ветку
                    Зачем это делать? Версия софтины в новой Ubuntu новее или такая же — всё нормально, она обновится вместе с дистрибутивом и будет работать. Версия софтины в новой Ubuntu старше, чем уже установленная из PPA — она не обновится и будет работать. Всё.
                    Не, конечно вы сейчас приведёте пример из разряда редких исключений, но вам такой же и для Генты привели.

                    > отключения ненужных
                    Она автоматом отключаются. Привет.
                  • 0
                    еще можно использовать Ubuntu LTS
    • +23
      Не путайте Direct Rendering Manager и Digital Rights Management.
  • +2
    «Добавлена поддержка протокола RDMA (iSER) в подсистему iSCSI;»
    За это отдельное спасибо.
    • +1
      А можно поподробнее что именно добавлено? Это поддержка RDMA на iscsi клиенте?

      Если я правильно понимаю RDMA то серверная часть iscsi не требует никаких специальных фишек — просто стандартный API для работы с RDMA. Это так?
  • +1
    > Можно запретить выполнять скрипты как программы — функционал запуска скриптов, содержащие путь к интерпретатору в заголовке "#!", теперь может быть собран в виде модуля ядра
    Можно поподробнее или ссылку на описание?
    • +2
      Раньше функция load_script() была просто функцией в ядре системы, а теперь ее вынесли в отдельный модуль, который можно отключить.
      Вот эта функция, если что:
      Скрытый текст
      static int load_script(struct linux_binprm *bprm)
      {
      const char *i_arg, *i_name;
      char *cp;
      struct file *file;
      char interp[BINPRM_BUF_SIZE];
      int retval;
      if ((bprm->buf[0] != '#') || (bprm->buf[1] != '!'))
      return -ENOEXEC;
      /*
      * This section does the #! interpretation.
      * Sorta complicated, but hopefully it will work. -TYT
      */

      allow_write_access(bprm->file);
      fput(bprm->file);
      bprm->file = NULL;

      bprm->buf[BINPRM_BUF_SIZE — 1] = '\0';
      if ((cp = strchr(bprm->buf, '\n')) == NULL)
      cp = bprm->buf+BINPRM_BUF_SIZE-1;
      *cp = '\0';
      while (cp > bprm->buf) {
      cp--;
      if ((*cp == ' ') || (*cp == '\t'))
      *cp = '\0';
      else
      break;
      }
      for (cp = bprm->buf+2; (*cp == ' ') || (*cp == '\t'); cp++);
      if (*cp == '\0')
      return -ENOEXEC; /* No interpreter name found */
      i_name = cp;
      i_arg = NULL;
      for (; *cp && (*cp != ' ') && (*cp != '\t'); cp++)
      /* nothing */;
      while ((*cp == ' ') || (*cp == '\t'))
      *cp++ = '\0';
      if (*cp)
      i_arg = cp;
      strcpy (interp, i_name);
      /*
      * OK, we've parsed out the interpreter name and
      * (optional) argument.
      * Splice in (1) the interpreter's name for argv[0]
      * (2) (optional) argument to interpreter
      * (3) filename of shell script (replace argv[0])
      *
      * This is done in reverse order, because of how the
      * user environment and arguments are stored.
      */
      retval = remove_arg_zero(bprm);
      if (retval)
      return retval;
      retval = copy_strings_kernel(1, &bprm->interp, bprm);
      if (retval < 0) return retval;
      bprm->argc++;
      if (i_arg) {
      retval = copy_strings_kernel(1, &i_arg, bprm);
      if (retval < 0) return retval;
      bprm->argc++;
      }
      retval = copy_strings_kernel(1, &i_name, bprm);
      if (retval) return retval;
      bprm->argc++;
      retval = bprm_change_interp(interp, bprm);
      if (retval < 0)
      return retval;

      /*
      * OK, now restart the process with the interpreter's dentry.
      */
      file = open_exec(interp);
      if (IS_ERR(file))
      return PTR_ERR(file);

      bprm->file = file;
      retval = prepare_binprm(bprm);
      if (retval < 0)
      return retval;
      return search_binary_handler(bprm);
      }
      • +1
        А в чём смысл запрещать выполнение скриптов, всегда же можно сделать /bin/sh script.sh и он выполняется даже без +x?
        • 0
          А с какими правами? Видимо, идея в том, чтобы закрыть дыру с правами на исполняемые скрипты.
          • 0
            В плане? Если есть права на чтение, то я что угодно смогу скормить sh. Конечно, есть варианты, когда есть на чтение, но нет на исполнение, но это экзотика какая-то. Ну и не понятно чем скрипты хуже чем ELF.
            • 0
              Ничего себе экзотика, это же классический флаг mount noexec! с ним многие дистрибутивы монтируют cdrom (если мы об одном и том же)
              • 0
                Я опечатался, имел ввиду разрешение на выполнение и запрет на чтение.
        • 0
          Что-то я тоже не могу найти даже обсуждение этой новой фичи в англоязычном интернете; наверное, у меня что-то с Гуглем…
      • +4
        Нравится комментарий «Sorta complicated, but hopefully it will work»
    • +1
      commit 2535e0d723e4d7723b030f39fb350e436bdb983f
      Author: Josh Triplett <josh@joshtriplett.org>
      Date: Tue Apr 30 15:27:44 2013 -0700

      fs: make binfmt support for #! scripts modular and removable

      Add a new configuration option CONFIG_BINFMT_SCRIPT to configure support
      for interpreted scripts starting with "#!"; allow compiling out that
      support, or building it as a module. Embedded systems running exclusively
      compiled binaries could leave this support out, and systems that don't
      need scripts before mounting the root filesystem can build this as a
      module.

      Signed-off-by: Josh Triplett <josh@joshtriplett.org>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
      Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
      • 0
        Спасибо. Ссылка на embedded в тему.
    • +1
  • 0
    >Интегрирована разработанная и используемая в Google система Bcache
    а вот это интересно
  • 0
    Отличные новости! Можно пересобирать ядро с новыми плюшками.
  • +1
    Ядро можно собирать компилятором Clang благодаря подготовленным проектом LLVMLinux патчам;

    Надо попробовать свой calculate linux перевести на clang, по идее это должно нехило сократить время обновление мира. Но может есть уже такие?
    • 0
      Вроде как производительность проигрывает gcc пока.
      • 0
        Если не затруднит, поделитесь последним бенчмаркингом, а то все что находил от 11 года или старше.
        • 0
          Вот, например, майские тесты GCC 4.8.0 vs. Clang последних версий [фороникс, да]. Clang уже почти везде хорошо выглядит, но все еще сливает на OpenMP-кейсах.
          • +2
            Clang не поддерживает openMP вообще, surprise!
            • 0
              М-да, surprise. Продолжаем ждать, а жаль.
            • 0
              Ну вот поэтому и сливает, никакого surprise. Ничего, думаю, это ненадолго. ;-)
              • 0
                openMP это расширение стандарта. У Apple есть свой Grand Central Dispatch, так что появление openMP в clang маловероятно.
        • 0
          Ну я свои программы тестировал, там линейная алгебра в основном, было медленнее. Но это было с год назад где-то.
  • +30
    Уже совсем скоро мечта о Linux 3.11 станет явью…
    • 0
      for Workstations.
      • +15
        for workgroups же
        • –2
          Так у нас и не Windows, а то была ирония.
  • 0
    А на чем сам Торвальдс сидит? Федора, Убунту?
    Хочется уже не только стабильное ядро, но и стабильный дистрибутив со стабильным DE…
    На убунте постоянно скайп крашится ни с того ни с сего… и tray iconки через раз в углу отображаются :(
    На виндовс все равно не променяю, но хочется все таки чтобы хотя бы такой примитив как notification area был нормально отлажен.
    • 0
      Debian 6, как вариант стабильного дистрибутива?
    • 0
      Была инфа что федора
    • 0
      1. на убунте надо ставить скайп из партнёрского репозитория
      2. надо ставить пакет skype
      3. для работы индикатора скайпа надо установить sni-qt:i386

      P.S. только недавно разбирался с братом почему у него скайп выбивает, он после арч линукса очень много делает вручную, хотя в убунте надо просто использовать нормальные репозитории.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.