Почему cat и wc читают с диска быстрее, чем Java? [закрыто]Linux

Ответить Пред. темаСлед. тема
Гость
 Почему cat и wc читают с диска быстрее, чем Java? [закрыто]

Сообщение Гость »


При использовании cat a > /dev/null диск читается со скоростью 6 ГБ/с.

При использовании wc -l a диск читается со скоростью 800 МБ/с.

При использовании файла mmap Java nio и сканировании содержимого скорость чтения 450 МБ/с.

Вот код:
общественный класс а { частный статический окончательный Unsafe UNSAFE = initUnsafe(); public static void main(String[] args) выдает IOException { попробуйте (var fileChannel = FileChannel.open(Path.of("./d"), READ)) { длинный fileSize = fileChannel.size(); окончательный длинный fileStart = fileChannel.map(READ_ONLY, 0, fileSize, global()).address(); окончательный длинный fileEnd = fileStart + fileSize; последние длинные строки = циклByChars(fileStart, fileEnd); System.out.println(линии); } } частный статический небезопасный initUnsafe() { пытаться { java.lang.reflect.Field theUnsafe = sun.misc.Unsafe.class.getDeclaredField("theUnsafe"); theUnsafe.setAccessible(истина); return (sun.misc.Unsafe) theUnsafe.get(sun.misc.Unsafe.class); } catch (NoSuchFieldException | IllegalAccessException e) { выдать новое RuntimeException(e); } } частный статический длинный циклByChars(длинный fileStart, длинный fileEnd) { // от 380 до 457 МБ/с длинные строки = 0; for (long я = fileStart; я SparkSession искра = SparkSession .builder() .appName("JavaLinesCount") .config("искра.мастер", "локальный[10]") .getOrCreate(); пытаться { длинный счетчик = spark.read().textFile(file).count(); System.out.println(счет); } окончательно { искра.стоп(); } } }
Но учтите, что при использовании одного ядра

.config("spark.master", "local") скорость чтения — 200 МБ/с.

Возможно, это та же проблема, что и слишком большое потребление процессора (зависит от процессора).

Что мне трудно понять, так это то, что при использовании https://github.com/gunnarmorling/1brc/b ... aswue.java оба процессора и SSD кажутся недостаточно используется, возможно, проблема с размером блока и где-то между последовательным и случайным чтением из-за одновременного чтения в различных фрагментах файла. Здесь из 10 ядер 2 используются в совокупности, хотя запрошено 10, и от 1 до 1,5 ГБ/с. скорость чтения.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»