BPF�̃A�[�L�e�N�`���A���߃Z�b�g�AcBPF��eBPF�̈Ⴂ�FBerkeley Packet Filter�iBPF�j����i2�j�i1/2 �y�[�W�j

Linux�ɂ����闘�p���}���ɑ����Ă���uBerkeley Packet Filter�iBPF�j�v�ɂ‚��āA��b���牞�p�܂ŕ��L���Љ��A�ځB����́ALinux�ŗp������BPF�̃A�[�L�e�N�`���Ȃǂ��������B

» 2018�N12��10�� 05��00�� ���J
[���]���j�COSS�Z�L�����e�B�Z�p�̉�]

�@Linux�ɂ����闘�p���}���ɑ����Ă���uBerkeley Packet Filter�iBPF�j�v�ɂ‚��āA��b���牞�p�܂ŕ��L���Љ��A�ځuBerkeley Packet Filter�iBPF�j�����v�B�����́ABPF�̗��j��T�v�ɂ‚��ĉ�����܂����B�����BPF�̊�b�Ƃ��āALinux�ŗp������BPF�̃A�[�L�e�N�`���Ȃǂ�������܂��B

�@����Linux�Ŏ�Ƃ��ėp�����Ă���ueBPF�iextended BPF�j�v�̓I���W�i���́ucBPF�iclassic BPF�j�v�Ƃ͈قȂ�A�݊���������܂���B�������ALinux��eBPF���������ꂽ����ALinux����cBPF�����S�ɂȂ��Ȃ����킯�ł͂���܂���BcBPF�𗘗p�����p�P�b�g�t�B���^�����O���”\�ł����i�������eBPF�ł��ł��܂��j�A�V�X�e���R�[���t�B���^�[�iseccomp�j�͈ˑR�Ƃ���eBPF�ł͂Ȃ�cBPF����͂Ƃ��Ď󂯎��܂��B

�@�������A�����I�ɂ�cBPF�̃v���O������eBPF�̃v���O�����ɕϊ�����Ď��s����Ă��܂��B

�@�ȉ��ł́AcBPF��eBPF�o���̃A�[�L�e�N�`���ɂ‚��ĊȒP�ɂ܂Ƃ߂܂��B����͍���̘A�ڂ̃��t�@�����X���ӎ��������̂ł���ABPF�̗��p�ɓ������Ċo���Ă����K�v�͂���܂���B�K�v�ɉ����ēK�X�Q�Ƃ��Ă��������B�܂������ȃh�L�������e�[�V�����́uLinux Socket Filtering aka Berkeley Packet Filter�iBPF�j�v�ɂ���܂��B

cBPF�̃A�[�L�e�N�`��

�@cBPF�̖��߃Z�b�g��64bit�Œ蒷�ł��B�t�H�[�}�b�g��C����ŕ\������ƁA���L�̂悤�ɂȂ�܂��B

struct cbpf_insn {
    u16    code;  /* �I�y�R�[�h */
    u8     jt;    /* �������^�̂Ƃ��̕���� */
    u8     jf;    /* �������U�̂Ƃ��̕���� */
    u32    k;     /* �ėp�t�B�[���h */
};

�@�W�����v��̃I�t�Z�b�g�ijt�Ajf�j��unsigned�Ȃ̂ŁAcBPF�ł͕��̕����ւ̃W�����v���ł��܂���B�‚܂�A���[�v�����͂ł��܂���B���̎d�l�ƃv���O�����T�C�Y�𐧌����邱�ƂŁA��莞�ԓ��ł̃v���O�������s�I�����ۏ؂���܂��B

�@���z�}�V���͉��L�̃��W�X�^�ƃ������̈�������܂��B���W�X�^��32bit���ł��B

���W�X�^�� ����
A �A�L�������[�^���W�X�^
X �C���f�b�N�X���W�X�^
M[] �������̈�A32bit���A�T�C�Y16

�@cBPF�ɂ͉��L�̂悤�Ȗ��߂�����܂��B

  • ���[�h����
    • ld�Aldx
    • A���W�X�^�܂���X���W�X�^�Ƀp�P�b�g�̃f�[�^�������̓������̈�̃f�[�^�����[�h
  • �X�g�A����
    • st�Astx
    • �������̈��A���W�X�^�܂���X�W���X�^�̒l���X�g�A
  • �W�����v����
    • jmp�Aja�Ajeq�Ajneq�Ajne�Ajlt�Ajle�Ajgt�Ajge�Ajset
  • �Z�p����
    • add�Asub�Amul�Adiv�Amod�Aneg�Aand�Aor�Axor�Alsh�Arsh
  • ���^�[������
    • ret
    • A���W�X�^�̒l�������͑��l�����^�[��

�@�p�P�b�g�f�[�^�ɑ΂���X�g�A���߂͂���܂���B

eBPF�̃A�[�L�e�N�`��

�@eBPF�̖��߃Z�b�g��64bit�Œ蒷�ł��B�t�H�[�}�b�g��C����ŕ\������ƁA���L�̂悤�ɂȂ�܂��B

struct ebpf_insn {
    u8    code;       /* �I�y�R�[�h */
    u8    dst_reg:4;  /* �f�B�X�e�B�l�[�V�������W�X�^ */
    u8    src_reg:4;  /* �\�[�X���W�X�^ */
    s16   off;        /* �I�t�Z�b�g */
    s32   imm;        /* ���l */
};

�@�I�t�Z�b�g�⑦�l��signed�^�ɂȂ��Ă��܂��B�]���āAcBPF�Ƃ͈قȂ�A�������ւ̃W�����v���”\�ł��B�v���O�����̈�莞�Ԉȓ��̓���I���͌��؊킪���؂��܂��B�܂��A�udst_reg�v�usrc_reg�v�t�B�[���h�Ŏg�p���郌�W�X�^���w��ł���悤�ɂȂ��Ă��܂��B

�@����ŁAcBPF�ɂ������ujt�v�ujf�v�t�B�[���h��eBPF�ɂ͑��݂��܂���BeBPF�̃W�����v���߂́A�w�肵���Ԓn�ւ̃W�����v���邢�̓t�H�[���X���[�̂ǂ��炩�ɂȂ�܂��B

�@���z�}�V���͉��L�̃��W�X�^�������܂��B���W�X�^��64bit���ł��B

���W�X�^�� ����
R0 �ėp���W�X�^�i�߂�l���i�[�j
R1�`R5 �ėp���W�X�^�i�������W�X�^�j
R6�`R9 �ėp���W�X�^
R10 �t���[���|�C���^�i�ǂݏo����p�j

�@x86_64��AArch64�Ȃǂ̃A�[�L�e�N�`���ɂ����āAeBPF�̃��W�X�^�͎��ۂ�CPU�̃��W�X�^��1��1�őΉ��t������悤�ɂȂ��Ă��܂��BeBPF�̌Ăяo���K���64bit�J�[�l���ŗ��p�������̂ƒ��ڑΉ����܂��B

cBPF��eBPF�̈Ⴂ

�@cBPF��eBPF�ɂ́A���L�̂悤�ȈႢ������܂��B

cBPF eBPF
���W�X�^�� 2 10
���W�X�^���ibit�j 32 64
�X�^�b�N�T�C�Y�iByte�j 16 512
�X�^�b�N�A�N�Z�X�T�C�Y�iByte�j 4 1�A2�A4�A8
�p�P�b�g�A�N�Z�X�T�C�Y�iByte�j 1�A2�A4 1�A2�A4�A8
�O���֐��Ăяo�� �~ ��
�������ւ̕��� �~ ��
�A�g�~�b�N���Z���� �~ ��

�t���[���|�C���^

�@cBPF�ɑ��݂����������̈�̑���ɁAeBPF�ł�R10�̃t���[���|�C���^�𗘗p���ăv���O�����p�̃X�^�b�N�i512B�j�ɃA�N�Z�X�ł��܂��B

���ߐ��̑���

�@eBPF�͈ꕔ������cBPF�Ɠ����̖��߂��T�|�[�g���鑼�A�ȉ��̂悤�Ȗ��߂��lj�����Ă��܂��B

  • �O���֐��Ăяo������
    • ���O�ɓo�^�ς݂̃J�[�l�����֐����Ăяo���i��q�j
  • �A�g�~�b�N���Z����
    • ���bpf map�̃f�[�^�\�����̃f�[�^���X�V����ۂɗ��p����
  • �G���f�B�A���ϊ�����
  • 64bit������
    • 64bit���ł̃������̓ǂݏ����A�����64bit���l�̃��[�h

�@�܂�cBPF�ł͑����̖��߂�A���W�X�^�ɑ΂�����̂ł������̂ɑ΂��AeBPF�ł́usrc_reg�v�udst_reg�v�t�B�[���h�ɂ��g�p���郌�W�X�^���_��ɑI���ł���悤�ɂȂ��Ă��܂��B

�O���֐��Ăяo��

�@eBPF�ł͎��O�ɓo�^�ς݂̃J�[�l�����֐���BPF�v���O��������Ăяo�����Ƃ��”\�ł��B���̂Ƃ��A�Ăяo������R1�`R5�ɓK�؂Ɉ�����ݒ肵�Ċ֐����Ăяo���܂��B�߂�l��R0�Ɋi�[����܂��B

�@�K�v�ł����R0-R5�̒l�͌Ăяo���O�ɑޔ�����K�v������܂��BR6�`R9�̃��W�X�^�́A�֐������ޔ�����K��ɂȂ��Ă��邽�߁A�Ăяo�������ޔ�����K�v�͂���܂���B������6�ȏ�̊֐��Ăяo���̓T�|�[�g����Ă��܂���B

�v���O�����^�C�v

�@eBPF�͌��݃l�b�g���[�N�p�r�݂̂Ȃ炸�A���܂��܂ȗp�r�ŗ��p����Ă��܂��B���p��ʂɉ����āABPF�v���O�������”\�ȑ���i���؊킪���؂�����e�j��Ăяo���”\�ȊO���֐��͈قȂ�܂��B

�@�J�[�l���ł�BPF�̎�ނ��uBPF_PROG_TYPE�v�Ŏ��ʂ��Ă��܂��B�J�[�l��4.18���_�ňȉ��̃^�C�v�����݂��܂��B

enum bpf_prog_type {
    BPF_PROG_TYPE_UNSPEC,
    BPF_PROG_TYPE_SOCKET_FILTER,
    BPF_PROG_TYPE_KPROBE,
    BPF_PROG_TYPE_SCHED_CLS,
    BPF_PROG_TYPE_SCHED_ACT,
    BPF_PROG_TYPE_TRACEPOINT,
    BPF_PROG_TYPE_XDP,
    BPF_PROG_TYPE_PERF_EVENT,
    BPF_PROG_TYPE_CGROUP_SKB,
    BPF_PROG_TYPE_CGROUP_SOCK,
    BPF_PROG_TYPE_LWT_IN,
    BPF_PROG_TYPE_LWT_OUT,
    BPF_PROG_TYPE_LWT_XMIT,
    BPF_PROG_TYPE_SOCK_OPS,
    BPF_PROG_TYPE_SK_SKB,
    BPF_PROG_TYPE_CGROUP_DEVICE,
    BPF_PROG_TYPE_SK_MSG,
    BPF_PROG_TYPE_RAW_TRACEPOINT,
    BPF_PROG_TYPE_CGROUP_SOCK_ADDR,
    BPF_PROG_TYPE_LWT_SEG6LOCAL,
    BPF_PROG_TYPE_LIRC_MODE2,
}

eBPF map

�@eBPF�ł́ueBPF map�v�ƌĂ΂��f�[�^�\�������p�”\�ł��BeBPF map�́ABPF�v���O��������͊O���֐��Ăяo���@�\�𗘗p���āA���[�U�[�A�v���P�[�V��������̓V�X�e���R�[���𗘗p���āA���ꂼ��A�N�Z�X�”\�ł��B

�@eBPF map�𗘗p���邱�ƂŁAeBPF�v���O�����̏�Ԃ��Ǘ��ł��܂��BeBPF map�̋�̓I�Ȑ����́A��̘A�ڂŁA���ۂɗ��p�����ʂōs���܂��B

�R���e�L�X�g

�@cBPF�ł͈����͔񖾎��I�Ȍ`�ŗ^�����A���[�h���߂𗘗p���Ă��̒��g�����W�X�^�ɓǂݍ��ނ��Ƃ��”\�ł��B

�@���eBPF�ł́A�ŏ���eBPF�v���O���������s�����Ƃ�R1���W�X�^�Ɉ������n����܂��B�����eBPF�ł́u�R���e�L�X�g�v�ƌĂ�ł��܂��B�񖾎��I�Ȉ����͑��݂��܂���B�܂������̃R���e�L�X�g��BPF�v���O�����ɓn����邱�Ƃ͂���܂���B

�@�R���e�L�X�g��BPF_PROG_TYPE���ƂɈقȂ�܂��B�Ⴆ�΁A�l�b�g���[�L���O�֘A�̏ꍇ�R���e�L�X�g�ɂ̓J�[�l�����̃p�P�b�g�̃f�[�^�\���ł���ustruct sk_buff�v���n����܂��B

Tail Call

�@�uTail Call�v�͑���BPF�v���O�����ւ̑J�ڂ��s���@�\�ł��B�J�ڌ�ɑJ�ڌ��ɖ߂邱�Ƃ͂���܂���B�J�ڐ��BPF�v���O�����Ƃ̓X�^�b�N�t���[�������L���܂��B

�@��莞�Ԃł̏I����ۏ؂��邽�߂ɍő��Tail Call�̉񐔂�32�ɐ�������Ă��܂��B

����BPF�֐��̌Ăяo��

�@Linux 4.16�����LLVM 6.0����A����BPF�֐���BPF�v���O��������Ăяo����悤�ɂȂ�܂����B�Ăяo�����@�͊O���֐��Ăяo���ɏ������܂��B����ȑO�ł́ABPF�v���O�������瑼��BPF�֐����Ăяo�������ꍇ�́A�S�ăC�����C���œW�J����K�v������܂����B

�@BPF�֐����Ăяo���ꍇ�A�ő�̌Ăяo���l�X�g�񐔂�8�ɐ�������Ă��܂��B�����Ƃ��ČĂяo������frame pointer��n�����Ƃ͉”\�ł����A�t�͕s�”\�ł��B

�@���̋@�\��Tail Call�ƍ��킹�ė��p���邱�Ƃ͂ł��܂���B

�@�@�@�@�@�@ 1|2 ���̃y�[�W��

Copyright © ITmedia, Inc. All Rights Reserved.

'; this.insertTarget = document.querySelector('#cmsBody .subscription') || document.querySelector('#cmsBody .inner'); }; BodyAdIMSWithCCE.prototype = Object.create(BodyAdContent.prototype); BodyAdIMSWithCCE.prototype.activate = function () { refreshGam('InArtSpecialLink'); } // global reference window.itm = itm; //entry point BodyAdEventBase.polyfill(); const bodyAdManager = BodyAdManager.getInstance(); bodyAdManager.addEventListener(BodyAdManager.EVENTS.READY, function (ev) { bodyAdManager.loadAdvertise(); }); bodyAdManager.init(); })();
�X�|���T�[����̂��m�点PR

���ڂ̃e�[�}

Microsoft  WindowsőO2025
AI for GWjAO
[R[h^m[R[h Zg by IT - ITGWjArWlX̒SŊ􂷂gD
Cloud Native Central by IT - XP[uȔ\͂gD
�V�X�e���J���m�E�n�E �y�����i�r�zPR
���Ȃ��ɂ������߂̋L��PR

RSS�ɂ‚���

�A�C�e�B���f�B�AID�ɂ‚���

���[���}�K�W���o�^

��IT�̃��[���}�K�W���́A �������A���ׂĖ����ł��B���Ѓ��[���}�K�W�������w�ǂ��������B