An7on
sudo voteban
Anonymous
Не работеат, похоже нужно сначала сделать sudo apt-get install voteban
Sergey
...форумы...а они разве живы где-то кроме даркнета? )
Anonymous
Дык этот форум косит под даркнет
aadz
форумы - нет, а спамеры со своими "лучшими форумами" - все еще да :(
aadz
Андрю туда даже зашел, видимо. И что там? Пипиську обещают, как обычно, увеличивать на 15 сантиметров в месяц? Интересно, как эта пиписька будет смотреться хотя бы через полгода...
Anonymous
нет.
серёжа
+
Anonymous
> go call admin
Anonymous
Я гофер, ничего не понял.
Anonymous
Похоже на то
Slach
https://www.facebook.com/permalink.php?story_fbid=722477891241449&id=100004377340065 Подскажите, пожалуйста, как в Go, прочитать читать UDP-пакет вместе с адресом отправителя без выделения памяти? (*UDPConn) Read() - читает без выделения памяти, но не возвращает адрес. (*UDPConn) ReadFrom() и (*UDPConn) ReadFromUDP() возвращают адрес, но при его создании в (c *UDPConn) readFrom() выделяется память для создания объекта адреса и в syscall.(*RawSockaddrAny).Sockaddr() выделяется память при создании сокета, из которого потом достаётся адрес. Т.е. два совершенно лишних копирования с аллокацией памяти. И это основные источники аллокаций в коде. Можно достать файловый дескриптор через (c *UDPConn) File() и что-то самому делать, не опускаясь до уровня сисколов. Но как достучаться до нужных методов?
aadz
Прочитать без выделения памяти? Прямо целый UDP-пакет?
Mike
Тогда возникает закономерный вопрос "прочитать КУДА?"
Mike
"читает без выделения памяти, но не возвращает адрес" — адрес чего?
aadz
Для начала возникает вопрос о том, что такое "прочитать"
aadz
Slash, что уже ты таки имел в виду сказать?
aadz
(если ты умеешь читать, конечно)
Mike
он читает наши сообщения без выделения памяти
Mike
и потому не может ответить
aadz
печалька кокая :(
Daniel
коллеги
Daniel
ну вы это
Daniel
ядро выделяет буфер, и читает данные в него
aadz
а... как написать UDP-пакет без выделения памяти?
Daniel
дальше можно этот буфер без копирования передавать туда-сюда, и даже ответ в него положить, и снова передать ядру для отправки
Mike
ну не кажется ли тебе, что общение с ядром с одной строны и желание не трогать сисколлы с другой несколько противоречат друг другу?
aadz
Да хрен с ними с сисколами и ядром. Главное, как память-то не выделять на каждое заходящее UDP, но читать его и долго потом думоть?
Daniel
Да в чем поблема-то?
Daniel
Memcpy очень долгий вызов
Daniel
Если его нет - уде хорошо
aadz
Memcpy бе выделения памяти не получится
aadz
и это - syscall
Daniel
О том и речь
aadz
и все это - безо всякого выделения памяти!
aadz
а главное - зачем? :)
aadz
если ядро операционной системы чем-то не устраивает, наверное, пора менять профессию, в конце концов :)
aadz
Или писать свой стек ТЦП/ИП прямо на Go, заворачивать весь траффик туда и там уже прямо без выдеения памяти можно делать что хочешь. Но проще профессию поменять :)
aadz
А скорей всего, и драйвера Ethernet придется самому писать...
aadz
Блин, что-то злые тут все сегодня, даже я :(
Nikolay
я вообще нить дискуссии потерял. у сокета TCP есть буфер на чтение/запись, что в винде, что в линуксе. там накапливаются данные, которые можно вычитать, если говорим о чтении. а как вычитывать и выделять ли память под большие куски это уже разработчику решать, при чем тут выделение памяти и написание своего стека прям мне не понятно
aadz
а прочитать как?
Nikolay
вариант на Go интересует как я понимаю?
Daniel
Коллеги, вы странные
Nikolay
Коллеги, вы странные
в чем странность?
aadz
к словам придираемся, как дети малые, а это не по-хипстерски
Dmitry
А скорей всего, и драйвера Ethernet придется самому писать...
DPDK уже упоминали? Я не тыкал, но вот это выглядит интересно http://dpdk.org/doc/guides/prog_guide/mempool_lib.html
aadz
хипстеры обычно добрей, и о чем бы они не говорили, они всегда говорят "как бы" и делают доброе умное лицо
aadz
то есть хипстерам все, как бы, глубоко монопенисуально на самом деле, так что нечего к слова цепляться!
Nikolay
а прочитать как?
buf := make([]byte, 4096) n, err := conn.Read(buf)
aadz
это выделение памяти!
Nikolay
да, разовое. ацептишь коннект и все чтения через один буфер гоняешь
aadz
ужос кокой! А если сразу два коннекта?
Nikolay
ужос кокой! А если сразу два коннекта?
на каждый коннект по буферу небольшому. bufio.NewReaderSize(conn, 4096)
Nikolay
можно так, можно через sync.pool еще буферы выделять и отдавать в пул как коннект закрывается
Nikolay
вариантов просто дофига
aadz
странные вы, коллеги. Человек же сказал - без выделения памяти. Зачем обсуждать тут всякие левые варианты?
Daniel
да, так вот
Daniel
я повторюсь
Daniel
вы странные
Daniel
что нам возвращает ядро?
Daniel
оно возвращает нам указатель на буфер
Daniel
с выделением памяти - это с копированием данных из буфера в наш собственный буфер
Daniel
без выделения - это с использованием того буфера, что вернуло ядро
aadz
ну вот :( А говорят, на Go только хипстеры пишут. А они добрые и не зануды...
Nikolay
без выделения - это с использованием того буфера, что вернуло ядро
не верно. использовать тот буфер, что использует ядро нельзя. чтобы считать из сокета нужно передать указатель на свой буфер и длину. другими словами не выделяя память считать из сокета что-либо нельзя в принципе (мои слова легко подтверждаются описанием сигнатуры функции recv в sys/socket.h)
aadz
Дайте мне ведерко с попкорном, пожалуйста!
Nikolay
коллега, вы путаете
что с чем? ядро буфер не возвращает никакой
Slach
можно я еще немножечко вброшу? 😉 https://github.com/golang/go/issues/3661
Daniel
что с чем? ядро буфер не возвращает никакой
это вы просто не в курсе, как работает AIO
Slava
это вы просто не в курсе, как работает AIO
Скиньте ссылку людям на какое-то описание, так будет проще
Daniel
да я вот гуглю что-то внятное, и пока не нагуглил
Nikolay
это вы просто не в курсе, как работает AIO
epoll/kqueue/iocp? не вкурсе только о kqueue. кроме обвязки (в сравнении с простой реализацией) все тоже самое чтение, что я описал выше - в recv отправляется указатель на буфер и длина и ядро в пользовательский буфер пишет данные из буфера сокета и возвращает кол-во записанных
Daniel
ну так вот это не так
Nikolay
https://www.codeproject.com/Articles/13382/A-simple-application-using-I-O-Completion-Ports-an