āĻšā§āĻ¯āĻžāĻ˛ā§, āĻšāĻžāĻŦāĻ°! āĻāĻŽāĻ°āĻž āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻžāĻ¨āĻžāĻ¤ā§ āĻāĻžāĻ āĻ¯ā§ āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻāĻžāĻļā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻŦāĻ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻāĻ°āĻāĻŋāĨ¤"
āĻ¯ā§āĻšā§āĻ¤ā§ BPF āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨āĻāĻŋ āĻā§āĻ°āĻŽāĻžāĻāĻ¤ āĻŦāĻŋāĻāĻļāĻŋāĻ¤ āĻšāĻā§āĻā§ āĻāĻŦāĻ āĻ¸āĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻ
āĻ¨ā§āĻļā§āĻ˛āĻ¨ā§ āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻšāĻā§āĻā§, āĻāĻŽāĻ°āĻž āĻāĻĒāĻ¨āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ° āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻā§āĻˇāĻŽāĻ¤āĻž āĻāĻŦāĻ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻ
āĻŦāĻ¸ā§āĻĨāĻž āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°ā§ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ āĻ
āĻ¨ā§āĻŦāĻžāĻĻ āĻāĻ°ā§āĻāĻŋāĨ¤
āĻ¸āĻžāĻŽā§āĻĒā§āĻ°āĻ¤āĻŋāĻ āĻŦāĻāĻ°āĻā§āĻ˛āĻŋāĻ¤ā§, āĻāĻā§āĻ-āĻĒāĻžāĻ°āĻĢāĻ°āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻ°āĻŖā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻ˛ā§ āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ā§āĻ° āĻ¸ā§āĻŽāĻžāĻŦāĻĻā§āĻ§āĻ¤āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻˇāĻ¤āĻŋāĻĒā§āĻ°āĻŖā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻŋāĻ āĻ¸āĻ°āĻā§āĻāĻžāĻŽ āĻāĻŦāĻ āĻā§āĻļāĻ˛āĻā§āĻ˛āĻŋ āĻā§āĻ°āĻŽāĻļ āĻāĻ¨āĻĒā§āĻ°āĻŋāĻ¯āĻŧ āĻšāĻ¯āĻŧā§ āĻāĻ ā§āĻā§āĨ¤ āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻāĻ¨āĻĒā§āĻ°āĻŋāĻ¯āĻŧ āĻā§āĻļāĻ˛ āĻāĻ āĻŦāĻ˛āĻž āĻšāĻ¯āĻŧ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻŦāĻžāĻāĻĒāĻžāĻ¸ (āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻŦāĻžāĻāĻĒāĻžāĻ¸) āĻāĻŦāĻ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻ¸ā§āĻ¤āĻ°āĻā§ āĻŦāĻžāĻāĻĒāĻžāĻ¸ āĻāĻ°ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻ¸ā§āĻĨāĻžāĻ¨ āĻĨā§āĻā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻ°āĻŖ āĻāĻ°āĻžāĻ° āĻ
āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻ¯āĻŧāĨ¤ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻŦāĻžāĻāĻĒāĻžāĻ¸ āĻāĻ°āĻž āĻĨā§āĻā§ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻāĻžāĻ°ā§āĻĄ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻāĻ°āĻžāĻ āĻāĻĄāĻŧāĻŋāĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻ¸ā§āĻĨāĻžāĻ¨. āĻ
āĻ¨ā§āĻ¯ āĻāĻĨāĻžāĻ¯āĻŧ, āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻāĻžāĻ°ā§āĻĄā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻāĻŽāĻ°āĻž āĻĄā§āĻ°āĻžāĻāĻāĻžāĻ°ā§āĻ° āĻāĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻāĻ° āĻāĻ°āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻ¸ā§āĻĨāĻžāĻ¨.
āĻāĻāĻāĻŋ āĻāĻāĻāĻžāĻ°-āĻ¸ā§āĻĒā§āĻ¸ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻāĻžāĻ°ā§āĻĄā§āĻ° āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻāĻ°āĻžāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§, āĻāĻŽāĻ°āĻž āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻāĻāĻžāĻ°āĻšā§āĻĄ (āĻĒā§āĻ°āĻ¸āĻā§āĻ āĻ¸ā§āĻ¯ā§āĻāĻāĻŋāĻ, āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻ˛ā§āĻ¯āĻŧāĻžāĻ° āĻĒā§āĻ°āĻ¸ā§āĻ¸āĻŋāĻ, āĻāĻ¨ā§āĻāĻžāĻ°āĻžāĻĒā§āĻ āĻāĻ¤ā§āĻ¯āĻžāĻĻāĻŋ) āĻāĻŽāĻŋāĻ¯āĻŧā§ āĻĻāĻŋāĻ, āĻ¯āĻž 10Gb/s āĻŦāĻž āĻ¤āĻžāĻ° āĻŦā§āĻļāĻŋ āĻāĻ¤āĻŋāĻ¤ā§ āĻāĻ˛āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻŦā§āĻļ āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖāĨ¤ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻŦāĻžāĻāĻĒāĻžāĻ¸ āĻĒā§āĻ˛āĻžāĻ¸ āĻ
āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯ā§āĻ° āĻ¸āĻāĻŽāĻŋāĻļā§āĻ°āĻŖ (āĻ§āĻŋāĻ° āĻāĻ¤āĻŋāĻ° āĻāĻžāĻ) āĻāĻŦāĻ āĻ¸āĻ¤āĻ°ā§āĻ āĻāĻ°ā§āĻŽāĻā§āĻˇāĻŽāĻ¤āĻž āĻāĻŋāĻāĻ¨āĻŋāĻ (NUMA āĻ
ā§āĻ¯āĻžāĻāĻžāĻāĻ¨ā§āĻāĻŋāĻ, CPU āĻŦāĻŋāĻā§āĻāĻŋāĻ¨ā§āĻ¨āĻ¤āĻž, āĻāĻ¤ā§āĻ¯āĻžāĻĻāĻŋ) āĻāĻāĻāĻžāĻ° āĻ¸ā§āĻĒā§āĻ¸ā§ āĻāĻā§āĻ-āĻĒāĻžāĻ°āĻĢāĻ°āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻ°āĻŖā§āĻ° āĻŽā§āĻ˛āĻŋāĻ āĻŦāĻŋāĻˇāĻ¯āĻŧāĻā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻŽāĻŋāĻ˛ā§ āĻ¯āĻžāĻ¯āĻŧā§ˇ āĻ¸āĻŽā§āĻāĻŦāĻ¤ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻ°āĻŖā§āĻ° āĻāĻ āĻ¨āĻ¤ā§āĻ¨ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻāĻāĻāĻŋ āĻ
āĻ¨ā§āĻāĻ°āĻŖā§āĻ¯āĻŧ āĻāĻĻāĻžāĻšāĻ°āĻŖ
āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻāĻžāĻ¯āĻŧāĻāĻžāĻ¯āĻŧ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻŽāĻŋāĻĨāĻ¸ā§āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ¸āĻāĻāĻ āĻŋāĻ¤ āĻāĻ°āĻžāĻ° āĻ āĻ¨ā§āĻāĻā§āĻ˛āĻŋ āĻ āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻ°āĻ¯āĻŧā§āĻā§:
- OS āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻšāĻ˛ āĻšāĻžāĻ°ā§āĻĄāĻāĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻ¸āĻāĻ¸ā§āĻĨāĻžāĻ¨āĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻŦāĻŋāĻŽā§āĻ°ā§āĻ¤ āĻ¸ā§āĻ¤āĻ°āĨ¤ āĻāĻžāĻ°āĻŖ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻ¸ā§āĻĒā§āĻ¸ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻā§āĻ˛āĻŋāĻā§ āĻ¤āĻžāĻĻā§āĻ° āĻ¸āĻāĻ¸ā§āĻĨāĻžāĻ¨āĻā§āĻ˛āĻŋ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻ¨āĻž āĻāĻ°āĻ¤ā§ āĻšāĻŦā§, āĻ¤āĻžāĻĻā§āĻ° āĻ¨āĻŋāĻāĻ¸ā§āĻŦ āĻšāĻžāĻ°ā§āĻĄāĻāĻ¯āĻŧā§āĻ¯āĻžāĻ°āĻ āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻ¨āĻž āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻāĻāĻŋ āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻ āĻāĻĒāĻ¨āĻžāĻ° āĻ¨āĻŋāĻāĻ¸ā§āĻŦ āĻĄā§āĻ°āĻžāĻāĻāĻžāĻ° āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻāĻ°āĻžāĻ° āĻŽāĻžāĻ¨ā§ āĻšāĻ¯āĻŧ.
- āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻŽāĻ°āĻž āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ā§āĻ° āĻ¸ā§āĻĨāĻžāĻ¨ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖāĻ°ā§āĻĒā§ āĻā§āĻĄāĻŧā§ āĻĻāĻŋāĻā§āĻāĻŋ, āĻ¤āĻžāĻ āĻāĻŽāĻ°āĻž āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ā§āĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸āĻ°āĻŦāĻ°āĻžāĻš āĻāĻ°āĻž āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻāĻŋāĻ āĻāĻžāĻ°ā§āĻ¯āĻāĻžāĻ°āĻŋāĻ¤āĻžāĻ āĻā§āĻĄāĻŧā§ āĻĻāĻŋāĻā§āĻāĻŋāĨ¤ āĻāĻāĻāĻžāĻ° āĻ¸ā§āĻĒā§āĻ¸ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻā§āĻ˛āĻŋāĻā§ āĻ āĻŦāĻļā§āĻ¯āĻ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻŦāĻž āĻ āĻĒāĻžāĻ°ā§āĻāĻŋāĻ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻĒāĻ˛āĻŦā§āĻ§ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯āĻā§āĻ˛āĻŋāĻā§ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤
- āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻā§āĻ˛āĻŋ āĻ¸ā§āĻ¯āĻžāĻ¨ā§āĻĄāĻŦāĻā§āĻ¸ āĻŽā§āĻĄā§ āĻāĻžāĻ āĻāĻ°ā§, āĻ¯āĻž āĻ¤āĻžāĻĻā§āĻ° āĻŽāĻŋāĻĨāĻ¸ā§āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻā§ āĻā§āĻ°ā§āĻ¤ā§āĻŦ āĻ¸āĻšāĻāĻžāĻ°ā§ āĻ¸ā§āĻŽāĻŋāĻ¤ āĻāĻ°ā§ āĻāĻŦāĻ āĻ āĻĒāĻžāĻ°ā§āĻāĻŋāĻ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§āĻ° āĻ āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ āĻāĻļā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻā§āĻā§āĻ¤ āĻšāĻ¤ā§ āĻŦāĻžāĻ§āĻž āĻĻā§āĻ¯āĻŧāĨ¤
āĻŽā§āĻāĻāĻĨāĻž, āĻ¯āĻāĻ¨ āĻāĻāĻāĻžāĻ° āĻ¸ā§āĻĒā§āĻ¸ā§ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻāĻŋāĻ āĻāĻā§, āĻ¤āĻāĻ¨ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻĨā§āĻā§ āĻāĻāĻāĻžāĻ° āĻ¸ā§āĻĒā§āĻ¸ā§ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĒā§āĻ°āĻ¸ā§āĻ¸āĻŋāĻ āĻ¸āĻ°āĻžāĻ¨ā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻĒāĻžāĻ°āĻĢāĻ°āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻ˛āĻžāĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ XDP āĻ āĻŋāĻ āĻŦāĻŋāĻĒāĻ°ā§āĻ¤ āĻāĻžāĻ āĻāĻ°ā§: āĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻ¸ā§āĻĨāĻžāĻ¨ (āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°, āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨āĻāĻžāĻ°ā§, āĻ°āĻžāĻāĻāĻŋāĻ, āĻāĻ¤ā§āĻ¯āĻžāĻĻāĻŋ) āĻĨā§āĻā§ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻ¸ā§āĻĒā§āĻ¸ā§ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻāĻŋāĻ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻā§āĻ˛āĻŋāĻā§ āĻ¸āĻ°āĻŋāĻ¯āĻŧā§ āĻĻā§āĻ¯āĻŧāĨ¤ āĻāĻāĻāĻŋ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻāĻāĻāĻŋ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ā§ āĻāĻāĻžāĻ¤ āĻāĻ°āĻžāĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻžāĻĨā§ āĻāĻŦāĻ āĻāĻāĻŋ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻ¸āĻžāĻŦāĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§ āĻāĻ˛ā§ āĻ¯āĻžāĻāĻ¯āĻŧāĻžāĻ° āĻāĻā§ XDP āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻāĻāĻŋ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻĢāĻžāĻāĻļāĻ¨ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧāĨ¤ āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻ°āĻŖ āĻāĻ¤āĻŋ āĻāĻ˛ā§āĻ˛ā§āĻāĻ¯ā§āĻā§āĻ¯āĻāĻžāĻŦā§ āĻŦā§āĻĻā§āĻ§āĻŋ āĻĒāĻžāĻ¯āĻŧāĨ¤ āĻ¯āĻžāĻāĻšā§āĻ, āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻā§āĻāĻžāĻŦā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻā§ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻ¸ā§āĻĒā§āĻ¸ā§ āĻ¤āĻžāĻĻā§āĻ° āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻā§āĻ˛āĻŋ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻ āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻ¯āĻŧ? āĻāĻ āĻĒā§āĻ°āĻļā§āĻ¨ā§āĻ° āĻāĻ¤ā§āĻ¤āĻ° āĻĻā§āĻāĻ¯āĻŧāĻžāĻ° āĻāĻā§, āĻāĻ¸ā§āĻ¨ BPF āĻā§ āĻ¤āĻž āĻĻā§āĻā§ āĻ¨ā§āĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻāĨ¤
BPF āĻāĻŦāĻ eBPF
āĻŦāĻŋāĻā§āĻ°āĻžāĻ¨ā§āĻ¤āĻŋāĻāĻ° āĻ¨āĻžāĻŽ āĻ¸āĻ¤ā§āĻ¤ā§āĻŦā§āĻ, BPF (āĻŦāĻžāĻ°ā§āĻāĻ˛ā§ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°āĻŋāĻ) āĻāĻ¸āĻ˛ā§, āĻāĻāĻāĻŋ āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨ āĻŽāĻĄā§āĻ˛āĨ¤ āĻāĻ āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨āĻāĻŋ āĻŽā§āĻ˛āĻ¤ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°āĻŋāĻ āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻ¨āĻž āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĄāĻŋāĻāĻžāĻāĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛, āĻ¤āĻžāĻ āĻ¨āĻžāĻŽāĨ¤
BPF āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻŦāĻŋāĻā§āĻ¯āĻžāĻ¤ āĻā§āĻ˛ āĻāĻ tcpdump
. āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻā§āĻ¯āĻžāĻĒāĻāĻžāĻ° āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ tcpdump
āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ
āĻāĻŋāĻŦā§āĻ¯āĻā§āĻ¤āĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ āĻ
āĻāĻŋāĻŦā§āĻ¯āĻā§āĻ¤āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻŽāĻŋāĻ˛ā§ āĻ¯āĻžāĻāĻ¯āĻŧāĻž āĻĒā§āĻ¯āĻžāĻā§āĻāĻā§āĻ˛āĻŋ āĻā§āĻ¯āĻžāĻĒāĻāĻžāĻ° āĻāĻ°āĻž āĻšāĻŦā§ā§ˇ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻ
āĻāĻŋāĻŦā§āĻ¯āĻā§āĻ¤āĻŋ "tcp dst port 80
â āĻĒā§āĻ°ā§āĻ 80 āĻ āĻāĻāĻ¤ āĻ¸āĻŽāĻ¸ā§āĻ¤ TCP āĻĒā§āĻ¯āĻžāĻā§āĻāĻā§ āĻŦā§āĻāĻžāĻ¯āĻŧāĨ¤ āĻāĻŽā§āĻĒāĻžāĻāĻ˛āĻžāĻ° āĻāĻ āĻ
āĻāĻŋāĻŦā§āĻ¯āĻā§āĻ¤āĻŋāĻāĻŋāĻā§ BPF āĻŦāĻžāĻāĻāĻā§āĻĄā§ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻāĻ°ā§ āĻā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
$ sudo tcpdump -d "tcp dst port 80"
(000) ldh [12]
(001) jeq #0x86dd jt 2 jf 6
(002) ldb [20]
(003) jeq #0x6 jt 4 jf 15
(004) ldh [56]
(005) jeq #0x50 jt 14 jf 15
(006) jeq #0x800 jt 7 jf 15
(007) ldb [23]
(008) jeq #0x6 jt 9 jf 15
(009) ldh [20]
(010) jset #0x1fff jt 15 jf 11
(011) ldxb 4*([14]&0xf)
(012) ldh [x + 16]
(013) jeq #0x50 jt 14 jf 15
(014) ret #262144
(015) ret #0
āĻāĻĒāĻ°ā§āĻ° āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻŋ āĻŽā§āĻ˛āĻ¤ āĻāĻāĻŋ āĻāĻ°ā§:
- āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ (000): āĻ āĻĢāĻ¸ā§āĻ 12-āĻ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻ˛ā§āĻĄ āĻāĻ°ā§āĻ¨, āĻāĻāĻāĻŋ 16-āĻŦāĻŋāĻ āĻļāĻŦā§āĻĻ āĻšāĻŋāĻ¸āĻžāĻŦā§, āĻ¸āĻā§āĻāĻ¯āĻŧāĻāĻžāĻ°ā§āĻ¤ā§āĨ¤ āĻ āĻĢāĻ¸ā§āĻ 12 āĻĒā§āĻ¯āĻžāĻā§āĻā§āĻ° āĻāĻĨāĻžāĻ°āĻāĻžāĻāĻĒā§āĻ° āĻ¸āĻžāĻĨā§ āĻŽāĻŋāĻ˛ā§ āĻ¯āĻžāĻ¯āĻŧāĨ¤
- āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ (001): 0x86dd āĻāĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻā§āĻāĻ¯āĻŧāĻāĻžāĻ°ā§āĻ° āĻŽāĻžāĻ¨ āĻ¤ā§āĻ˛āĻ¨āĻž āĻāĻ°ā§, āĻ āĻ°ā§āĻĨāĻžā§, IPv6 āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĨāĻžāĻ°āĻāĻžāĻāĻĒ āĻŽāĻžāĻ¨ā§āĻ° āĻ¸āĻžāĻĨā§āĨ¤ āĻ¯āĻĻāĻŋ āĻĢāĻ˛āĻžāĻĢāĻ˛āĻāĻŋ āĻ¸āĻ¤ā§āĻ¯ āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻāĻžāĻāĻ¨ā§āĻāĻžāĻ°āĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļā§ (002) āĻ¯āĻžāĻ¯āĻŧ āĻāĻŦāĻ āĻ¯āĻĻāĻŋ āĻ¨āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§ (006)āĨ¤
- āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ (006): 0x800 (IPv4 āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĨāĻžāĻ°āĻāĻžāĻāĻĒ āĻŽāĻžāĻ¨) āĻāĻ° āĻ¸āĻžāĻĨā§ āĻŽāĻžāĻ¨ āĻ¤ā§āĻ˛āĻ¨āĻž āĻāĻ°ā§āĨ¤ āĻ¯āĻĻāĻŋ āĻāĻ¤ā§āĻ¤āĻ°āĻāĻŋ āĻ¸āĻ¤ā§āĻ¯ āĻšāĻ¯āĻŧ, āĻ¤āĻŦā§ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻŋ (007) āĻ āĻ¯āĻžāĻ¯āĻŧ, āĻ¯āĻĻāĻŋ āĻ¨āĻž āĻšāĻ¯āĻŧ āĻ¤āĻŦā§ (015)āĨ¤
āĻāĻŦāĻ āĻ¤āĻžāĻ āĻ¯āĻ¤āĻā§āĻˇāĻŖ āĻ¨āĻž āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°āĻŋāĻ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻāĻāĻāĻŋ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§āĨ¤ āĻāĻāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻāĻāĻāĻŋ āĻŦā§āĻ˛āĻŋāĻ¯āĻŧāĻžāĻ¨āĨ¤ āĻāĻāĻāĻŋ āĻ -āĻļā§āĻ¨ā§āĻ¯ āĻŽāĻžāĻ¨ (āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ (014)) āĻĢā§āĻ°āĻ¤ āĻĻā§āĻāĻ¯āĻŧāĻžāĻ° āĻ āĻ°ā§āĻĨ āĻšāĻ˛ āĻĒā§āĻ¯āĻžāĻā§āĻāĻāĻŋ āĻā§āĻšā§āĻ¤ āĻšāĻ¯āĻŧā§āĻā§ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻļā§āĻ¨ā§āĻ¯ āĻŽāĻžāĻ¨ (āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ (015)) āĻĢā§āĻ°āĻ¤ āĻĻā§āĻāĻ¯āĻŧāĻžāĻ° āĻ āĻ°ā§āĻĨ āĻšāĻ˛ āĻĒā§āĻ¯āĻžāĻā§āĻāĻāĻŋ āĻā§āĻ°āĻšāĻŖ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĻ¨āĻŋā§ˇ
BPF āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨ āĻāĻŦāĻ āĻāĻ° āĻŦāĻžāĻāĻāĻā§āĻĄ 1992 āĻ¸āĻžāĻ˛ā§āĻ° āĻļā§āĻˇā§āĻ° āĻĻāĻŋāĻā§ āĻ¸ā§āĻāĻŋāĻ āĻŽā§āĻ¯āĻžāĻāĻā§āĻ¯āĻžāĻ¨ āĻāĻŦāĻ āĻā§āĻ¯āĻžāĻ¨ āĻā§āĻ¯āĻžāĻāĻŦāĻ¸āĻ¨ āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒā§āĻ°āĻ¸ā§āĻ¤āĻžāĻŦāĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ āĻ¯āĻāĻ¨ āĻ¤āĻžāĻĻā§āĻ° āĻāĻŦā§āĻˇāĻŖāĻžāĻĒāĻ¤ā§āĻ° āĻĒā§āĻ°āĻāĻžāĻļāĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛
āĻ¯ā§āĻšā§āĻ¤ā§ BPF āĻāĻāĻāĻŋ āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨, āĻāĻāĻŋ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻā§āĻ˛āĻŋ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻĒāĻ°āĻŋāĻŦā§āĻļāĻā§ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°ā§āĨ¤ āĻŦāĻžāĻāĻāĻā§āĻĄ āĻāĻžāĻĄāĻŧāĻžāĻ, āĻāĻāĻŋ āĻŦā§āĻ¯āĻžāĻ āĻŽā§āĻŽāĻ°āĻŋ āĻŽāĻĄā§āĻ˛ (āĻ˛ā§āĻĄ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻžāĻŦāĻ˛ā§ āĻŦā§āĻ¯āĻžāĻā§āĻ° āĻāĻĒāĻ° āĻĒā§āĻ°āĻ¯ā§āĻā§āĻ¯), āĻ°ā§āĻāĻŋāĻ¸ā§āĻāĻžāĻ° (āĻ āĻāĻŦāĻ āĻāĻā§āĻ¸; āĻ
ā§āĻ¯āĻžāĻāĻŋāĻāĻŽā§āĻ˛ā§āĻāĻ° āĻāĻŦāĻ āĻāĻ¨āĻĄā§āĻā§āĻ¸ āĻ°ā§āĻāĻŋāĻ¸ā§āĻāĻžāĻ°), āĻ¸ā§āĻā§āĻ°ā§āĻ¯āĻžāĻ āĻŽā§āĻŽāĻ°āĻŋ āĻ¸ā§āĻā§āĻ°ā§āĻ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻ
āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻšāĻŋāĻ¤ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻāĻžāĻāĻ¨ā§āĻāĻžāĻ°āĻā§āĻ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°ā§āĨ¤ āĻŽāĻāĻžāĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧ āĻšāĻ˛, BPF āĻŦāĻžāĻāĻāĻā§āĻĄāĻāĻŋ Motorola 6502 ISA āĻāĻ° āĻĒāĻ°ā§ āĻŽāĻĄā§āĻ˛ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤ āĻ¸ā§āĻāĻŋāĻ āĻŽā§āĻ¯āĻžāĻāĻā§āĻ¯āĻžāĻ¨ āĻ¤āĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻ¸ā§āĻŽāĻ°āĻŖ
āĻŦāĻŋāĻĒāĻŋāĻāĻĢ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ā§ v2.5 āĻāĻŦāĻ āĻāĻā§āĻāĻ¤āĻ° āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖā§ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§, āĻĒā§āĻ°āĻ§āĻžāĻ¨āĻ¤ āĻā§ āĻļā§āĻ˛āĻŋāĻ¸ā§āĻā§āĻ° āĻĒā§āĻ°āĻā§āĻˇā§āĻāĻžāĻ¯āĻŧ āĻ¯ā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§āĨ¤ BPF āĻā§āĻĄ 2011 āĻ¸āĻžāĻ˛ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ
āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻāĻŋāĻ˛, āĻ¯āĻāĻ¨ āĻāĻ°āĻŋāĻ āĻĄā§āĻŽāĻžāĻ¸ā§āĻ BPF āĻĻā§āĻāĻžāĻˇā§āĻā§ JIT āĻŽā§āĻĄā§ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻĄāĻŋāĻāĻžāĻāĻ¨ āĻāĻ°ā§āĻāĻŋāĻ˛ā§āĻ¨ (āĻ¸ā§āĻ¤ā§āĻ°:
āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§āĻ¤ā§, 2014 āĻ¸āĻžāĻ˛ā§, āĻāĻ˛ā§āĻā§āĻ¸āĻŋ āĻ¸ā§āĻāĻžāĻ°ā§āĻāĻ¯āĻŧā§āĻāĻ BPF-āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ JIT āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ° āĻĒā§āĻ°āĻ¸ā§āĻ¤āĻžāĻŦ āĻāĻ°ā§āĻāĻŋāĻ˛ā§āĻ¨āĨ¤ āĻĒā§āĻ°āĻā§āĻ¤āĻĒāĻā§āĻˇā§, āĻāĻ āĻ¨āĻ¤ā§āĻ¨ JIT āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ BPF-āĻāĻŋāĻ¤ā§āĻ¤āĻŋāĻ āĻāĻ°ā§āĻāĻŋāĻā§āĻāĻāĻžāĻ°ā§ āĻĒāĻ°āĻŋāĻŖāĻ¤ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ āĻāĻŦāĻ āĻāĻāĻŋāĻā§ eBPF āĻŦāĻ˛āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤ āĻāĻŽāĻŋ āĻŽāĻ¨ā§ āĻāĻ°āĻŋ āĻāĻāĻ¯āĻŧ VM āĻāĻŋāĻā§ āĻ¸āĻŽāĻ¯āĻŧā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻšāĻžāĻŦāĻ¸ā§āĻĨāĻžāĻ¨ āĻāĻ°ā§āĻāĻŋāĻ˛, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ā§ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°āĻŋāĻ āĻāĻŦāĻŋāĻĒāĻŋāĻāĻĢ-āĻāĻ° āĻāĻĒāĻ° āĻāĻŋāĻ¤ā§āĻ¤āĻŋ āĻāĻ°ā§ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§āĨ¤ āĻĒā§āĻ°āĻā§āĻ¤āĻĒāĻā§āĻˇā§, āĻāĻ§ā§āĻ¨āĻŋāĻ āĻĄāĻā§āĻŽā§āĻ¨ā§āĻā§āĻļāĻ¨ā§āĻ° āĻ āĻ¨ā§āĻ āĻāĻĻāĻžāĻšāĻ°āĻŖā§, BPF āĻā§ eBPF āĻŦā§āĻāĻžāĻ¨ā§ āĻšāĻ¯āĻŧ, āĻāĻŦāĻ āĻā§āĻ˛āĻžāĻ¸āĻŋāĻā§āĻ¯āĻžāĻ˛ BPF āĻāĻ cBPF āĻ¨āĻžāĻŽā§ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤āĨ¤
eBPF āĻā§āĻ˛āĻžāĻ¸āĻŋāĻ BPF āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨āĻā§ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻāĻĒāĻžāĻ¯āĻŧā§ āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŋāĻ¤ āĻāĻ°ā§:
- āĻāĻ§ā§āĻ¨āĻŋāĻ 64-āĻŦāĻŋāĻ āĻāĻ°ā§āĻāĻŋāĻā§āĻāĻāĻžāĻ°ā§āĻ° āĻāĻĒāĻ° āĻāĻŋāĻ¤ā§āĻ¤āĻŋ āĻāĻ°ā§āĨ¤ eBPF 64-āĻŦāĻŋāĻ āĻ°ā§āĻāĻŋāĻ¸ā§āĻāĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻŦāĻ āĻāĻĒāĻ˛āĻŦā§āĻ§ āĻ°ā§āĻāĻŋāĻ¸ā§āĻāĻžāĻ°ā§āĻ° āĻ¸āĻāĻā§āĻ¯āĻž 2 (āĻ¸āĻāĻā§āĻ°āĻšāĻāĻžāĻ°ā§ āĻāĻŦāĻ X) āĻĨā§āĻā§ āĻŦāĻžāĻĄāĻŧāĻŋāĻ¯āĻŧā§ 10 āĻāĻ°ā§āĨ¤ eBPF āĻ āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤ āĻ āĻĒāĻā§āĻĄāĻ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§ (BPF_MOV, BPF_JNE, BPF_CALL...)āĨ¤
- āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻ¸ā§āĻ¤āĻ° āĻ¸āĻžāĻŦāĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻĨā§āĻā§ āĻŦāĻŋāĻā§āĻāĻŋāĻ¨ā§āĻ¨āĨ¤ BPF āĻŦā§āĻ¯āĻžāĻ āĻĄā§āĻāĻž āĻŽāĻĄā§āĻ˛ā§āĻ° āĻ¸āĻžāĻĨā§ āĻŦāĻžāĻāĻ§āĻž āĻāĻŋāĻ˛āĨ¤ āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻāĻŋ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°āĻŋāĻāĻ¯āĻŧā§āĻ° āĻāĻ¨ā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛, āĻāĻāĻŋāĻ° āĻā§āĻĄāĻāĻŋ āĻ¸āĻžāĻŦāĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§ āĻ āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤ āĻāĻŋāĻ˛ āĻ¯āĻž āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻ¯ā§āĻāĻžāĻ¯ā§āĻ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§āĨ¤ āĻ¯āĻžāĻāĻšā§āĻ, eBPF āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨āĻāĻŋ āĻāĻ° āĻĄā§āĻāĻž āĻŽāĻĄā§āĻ˛ā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻŦāĻĻā§āĻ§ āĻ¨āĻ¯āĻŧ āĻāĻŦāĻ āĻ¯ā§āĻā§āĻ¨ā§ āĻāĻĻā§āĻĻā§āĻļā§āĻ¯ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻ¸ā§āĻ¤āĻ°āĻžāĻ, āĻāĻāĻ¨ eBPF āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻŋāĻā§ āĻā§āĻ°ā§āĻ¸āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻ āĻŦāĻž āĻā§āĻĒā§āĻ°ā§āĻŦā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻāĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻāĻāĻŋ āĻ āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻ¸āĻžāĻŦāĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§āĻ° āĻĒā§āĻ°āĻ¸āĻā§āĻā§ āĻāĻŦāĻŋāĻĒāĻŋāĻāĻĢ āĻāĻ¨ā§āĻ¸āĻā§āĻ°ā§āĻŽā§āĻ¨ā§āĻā§āĻļāĻ¨, āĻāĻ°ā§āĻŽāĻā§āĻˇāĻŽāĻ¤āĻž āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻŦāĻ āĻ āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻĒāĻĨ āĻā§āĻ˛ā§ āĻĻā§āĻ¯āĻŧāĨ¤ āĻāĻāĻ¨ āĻāĻŦāĻŋāĻĒāĻŋāĻāĻĢ āĻā§āĻĄāĻāĻŋ āĻ¤āĻžāĻ° āĻ¨āĻŋāĻāĻ¸ā§āĻŦ āĻĒāĻĨā§ āĻ āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤: āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛/āĻŦāĻŋāĻĒāĻŋāĻāĻĢāĨ¤
- āĻā§āĻ˛ā§āĻŦāĻžāĻ˛ āĻĄā§āĻāĻž āĻ¸ā§āĻā§āĻ° āĻ¯āĻž āĻŽā§āĻ¯āĻžāĻĒ āĻ¨āĻžāĻŽā§ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤āĨ¤ āĻŽāĻžāĻ¨āĻāĻŋāĻ¤ā§āĻ° āĻšāĻ˛ āĻŽā§āĻ˛-āĻŽā§āĻ˛ā§āĻ¯ā§āĻ° āĻĻā§āĻāĻžāĻ¨ āĻ¯āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻ¸ā§āĻĨāĻžāĻ¨ āĻāĻŦāĻ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻĄā§āĻāĻž āĻŦāĻŋāĻ¨āĻŋāĻŽāĻ¯āĻŧ āĻ¸āĻā§āĻˇāĻŽ āĻāĻ°ā§āĨ¤ eBPF āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻ§āĻ°āĻ¨ā§āĻ° āĻŽāĻžāĻ¨āĻāĻŋāĻ¤ā§āĻ° āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§āĨ¤
- āĻ¸ā§āĻā§āĻ¨ā§āĻĄāĻžāĻ°āĻŋ āĻĢāĻžāĻāĻļāĻ¨āĨ¤ āĻŦāĻŋāĻļā§āĻˇ āĻāĻ°ā§, āĻāĻāĻāĻŋ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻ˛āĻŋāĻāĻ¤ā§, āĻāĻāĻāĻŋ āĻā§āĻāĻ¸āĻžāĻŽ āĻāĻŖāĻ¨āĻž āĻāĻ°āĻ¤ā§, āĻŦāĻž āĻāĻāĻāĻŋ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻā§āĻ˛ā§āĻ¨ āĻāĻ°āĻ¤ā§āĨ¤ āĻāĻ āĻĢāĻžāĻāĻļāĻ¨āĻā§āĻ˛āĻŋ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ā§āĻ° āĻāĻŋāĻ¤āĻ°ā§ āĻāĻ˛ā§ āĻāĻŦāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§-āĻ¸ā§āĻĒā§āĻ¸ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻ¨āĻ¯āĻŧāĨ¤ āĻāĻĒāĻ¨āĻŋ eBPF āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻĨā§āĻā§ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻ˛ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
- āĻāĻ˛ āĻļā§āĻˇ āĻāĻ°ā§āĻ¨āĨ¤ āĻāĻŦāĻŋāĻĒāĻŋāĻāĻĢ-āĻ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§āĻ° āĻāĻāĻžāĻ° 4096 āĻŦāĻžāĻāĻā§ āĻ¸ā§āĻŽāĻžāĻŦāĻĻā§āĻ§āĨ¤ āĻā§āĻāĻ˛ āĻāĻ˛ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯āĻāĻŋ āĻāĻāĻāĻŋ eBPF āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻā§ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ eBPF āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧ āĻāĻŦāĻ āĻāĻāĻāĻžāĻŦā§ āĻāĻ āĻ¸ā§āĻŽāĻžāĻŦāĻĻā§āĻ§āĻ¤āĻžāĻā§ āĻŦāĻžāĻāĻĒāĻžāĻ¸ āĻāĻ°ā§ (32āĻāĻŋ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻāĻāĻāĻžāĻŦā§ āĻ˛āĻŋāĻā§āĻ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§)āĨ¤
eBPF: āĻāĻĻāĻžāĻšāĻ°āĻŖ
āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻāĻ¤ā§āĻ¸āĻā§āĻ˛āĻŋāĻ¤ā§ eBPF āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤ āĻ¸ā§āĻā§āĻ˛āĻŋ āĻ¸ā§āĻ¯āĻžāĻŽā§āĻĒāĻ˛/bpf/ āĻ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻ¯āĻŧāĨ¤ āĻāĻ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻā§āĻ˛āĻŋ āĻāĻŽā§āĻĒāĻžāĻāĻ˛ āĻāĻ°āĻ¤ā§, āĻā§āĻŦāĻ˛ āĻ˛āĻŋāĻā§āĻ¨:
$ sudo make samples/bpf/
āĻāĻŽāĻŋ āĻ¨āĻŋāĻā§ eBPF-āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻ˛āĻŋāĻāĻŦ āĻ¨āĻž, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¸ā§āĻ¯āĻžāĻŽā§āĻĒāĻ˛/bpf/-āĻ āĻāĻĒāĻ˛āĻŦā§āĻ§ āĻ¨āĻŽā§āĻ¨āĻžāĻ° āĻāĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦāĨ¤ āĻāĻŽāĻŋ āĻā§āĻĄā§āĻ° āĻāĻŋāĻā§ āĻ
āĻāĻļ āĻĻā§āĻāĻŦ āĻāĻŦāĻ āĻāĻāĻŋ āĻā§āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāĻ°ā§ āĻ¤āĻž āĻŦā§āĻ¯āĻžāĻā§āĻ¯āĻž āĻāĻ°āĻŦāĨ¤ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻŽāĻŋ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻŋ āĻŦā§āĻā§ āĻ¨āĻŋāĻ¯āĻŧā§āĻāĻŋ tracex4
.
āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻāĻžāĻŦā§, āĻ¨āĻŽā§āĻ¨āĻž/bpf/-āĻāĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻāĻĻāĻžāĻšāĻ°āĻŖā§ āĻĻā§āĻāĻŋ āĻĢāĻžāĻāĻ˛ āĻĨāĻžāĻā§āĨ¤ āĻāĻā§āĻˇā§āĻ¤ā§āĻ°ā§:
tracex4_kern.c
, eBPF āĻŦāĻžāĻāĻāĻā§āĻĄ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ā§ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°āĻž āĻā§āĻ¸ āĻā§āĻĄ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤tracex4_user.c
, āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻ¸ā§āĻĨāĻžāĻ¨ āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤
āĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻŽā§āĻĒāĻžāĻāĻ˛ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ tracex4_kern.c
eBPF āĻŦāĻžāĻāĻāĻā§āĻĄā§āĨ¤ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ā§ gcc
eBPF āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻ¨ āĻŦā§āĻ¯āĻžāĻāĻāĻ¨ā§āĻĄ āĻ¨ā§āĻāĨ¤ āĻāĻžāĻā§āĻ¯āĻā§āĻ°āĻŽā§, clang
āĻāĻŦāĻŋāĻĒāĻŋāĻāĻĢ āĻŦāĻžāĻāĻāĻā§āĻĄ āĻāĻāĻāĻĒā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ¸āĻŽā§āĻš clang
āĻ¸āĻāĻāĻ˛āĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ tracex4_kern.c
āĻ
āĻŦāĻā§āĻā§āĻ āĻĢāĻžāĻāĻ˛ā§āĨ¤
āĻāĻŽāĻŋ āĻāĻĒāĻ°ā§ āĻāĻ˛ā§āĻ˛ā§āĻ āĻāĻ°ā§āĻāĻŋ āĻ¯ā§ eBPF āĻāĻ° āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻāĻāĻ°ā§āĻˇāĻŖā§āĻ¯āĻŧ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯āĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻšāĻ˛ āĻŽāĻžāĻ¨āĻāĻŋāĻ¤ā§āĻ°āĨ¤ tracex4_kern āĻāĻāĻāĻŋ āĻŽāĻžāĻ¨āĻāĻŋāĻ¤ā§āĻ° āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°ā§:
struct pair {
u64 val;
u64 ip;
};
struct bpf_map_def SEC("maps") my_map = {
.type = BPF_MAP_TYPE_HASH,
.key_size = sizeof(long),
.value_size = sizeof(struct pair),
.max_entries = 1000000,
};
BPF_MAP_TYPE_HASH
eBPF āĻĻā§āĻŦāĻžāĻ°āĻž āĻ
āĻĢāĻžāĻ° āĻāĻ°āĻž āĻ
āĻ¨ā§āĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻāĻžāĻ°ā§āĻĄā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋāĨ¤ āĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, āĻāĻāĻž āĻļā§āĻ§ā§ āĻāĻāĻāĻŋ āĻšā§āĻ¯āĻžāĻļ. āĻāĻĒāĻ¨āĻŋ āĻšāĻ¯āĻŧāĻ¤ āĻāĻāĻāĻŋ āĻŦāĻŋāĻā§āĻāĻžāĻĒāĻ¨ āĻ˛āĻā§āĻˇā§āĻ¯ āĻāĻ°ā§āĻā§āĻ¨ SEC("maps")
. SEC āĻāĻāĻāĻŋ āĻŽā§āĻ¯āĻžāĻā§āĻ°ā§ āĻ¯āĻž āĻāĻāĻāĻŋ āĻŦāĻžāĻāĻ¨āĻžāĻ°āĻŋ āĻĢāĻžāĻāĻ˛ā§āĻ° āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻŦāĻŋāĻāĻžāĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻšāĻ¯āĻŧāĨ¤ āĻāĻ¸āĻ˛ā§, āĻāĻĻāĻžāĻšāĻ°āĻŖā§ tracex4_kern
āĻāĻ°āĻ āĻĻā§āĻāĻŋ āĻŦāĻŋāĻāĻžāĻ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§:
SEC("kprobe/kmem_cache_free")
int bpf_prog1(struct pt_regs *ctx)
{
long ptr = PT_REGS_PARM2(ctx);
bpf_map_delete_elem(&my_map, &ptr);
return 0;
}
SEC("kretprobe/kmem_cache_alloc_node")
int bpf_prog2(struct pt_regs *ctx)
{
long ptr = PT_REGS_RC(ctx);
long ip = 0;
// ĐŋĐžĐģŅŅĐ°ĐĩĐŧ ip-Đ°Đ´ŅĐĩŅ вŅСŅваŅŅĐĩĐš ŅŅĐžŅĐžĐŊŅ kmem_cache_alloc_node()
BPF_KRETPROBE_READ_RET_IP(ip, ctx);
struct pair v = {
.val = bpf_ktime_get_ns(),
.ip = ip,
};
bpf_map_update_elem(&my_map, &ptr, &v, BPF_ANY);
return 0;
}
āĻāĻ āĻĻā§āĻāĻŋ āĻĢāĻžāĻāĻļāĻ¨ āĻāĻĒāĻ¨āĻžāĻā§ āĻŽāĻžāĻ¨āĻāĻŋāĻ¤ā§āĻ° āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻāĻ¨ā§āĻā§āĻ°āĻŋ āĻŽā§āĻā§ āĻĢā§āĻ˛āĻžāĻ° āĻ
āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻ¯āĻŧ (kprobe/kmem_cache_free
) āĻāĻŦāĻ āĻŽāĻžāĻ¨āĻāĻŋāĻ¤ā§āĻ°ā§ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻāĻ¨ā§āĻā§āĻ°āĻŋ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨ (kretprobe/kmem_cache_alloc_node
) āĻŦāĻĄāĻŧ āĻ
āĻā§āĻˇāĻ°ā§ āĻ˛ā§āĻāĻž āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĢāĻžāĻāĻļāĻ¨ā§āĻ° āĻ¨āĻžāĻŽ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻŽā§āĻ¯āĻžāĻā§āĻ°ā§āĻ° āĻ¸āĻžāĻĨā§ āĻŽāĻŋāĻ˛ā§ āĻ¯āĻžāĻ¯āĻŧ
.
āĻ¯āĻĻāĻŋ āĻāĻŽāĻŋ āĻ āĻŦāĻā§āĻā§āĻ āĻĢāĻžāĻāĻ˛ā§āĻ° āĻŦāĻŋāĻāĻžāĻāĻā§āĻ˛āĻŋ āĻĄāĻžāĻŽā§āĻĒ āĻāĻ°āĻŋ āĻ¤āĻŦā§ āĻāĻŽāĻžāĻ° āĻĻā§āĻāĻ¤ā§ āĻšāĻŦā§ āĻ¯ā§ āĻāĻ āĻ¨āĻ¤ā§āĻ¨ āĻŦāĻŋāĻāĻžāĻāĻā§āĻ˛āĻŋ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§:
$ objdump -h tracex4_kern.o
tracex4_kern.o: file format elf64-little
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000000 0000000000000000 0000000000000000 00000040 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 kprobe/kmem_cache_free 00000048 0000000000000000 0000000000000000 00000040 2**3
CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
2 kretprobe/kmem_cache_alloc_node 000000c0 0000000000000000 0000000000000000 00000088 2**3
CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
3 maps 0000001c 0000000000000000 0000000000000000 00000148 2**2
CONTENTS, ALLOC, LOAD, DATA
4 license 00000004 0000000000000000 0000000000000000 00000164 2**0
CONTENTS, ALLOC, LOAD, DATA
5 version 00000004 0000000000000000 0000000000000000 00000168 2**2
CONTENTS, ALLOC, LOAD, DATA
6 .eh_frame 00000050 0000000000000000 0000000000000000 00000170 2**3
CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
āĻāĻāĻ¨āĻ āĻāĻā§
, āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĨ¤ āĻŽā§āĻ˛āĻ¤, āĻāĻ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻāĻāĻ¨āĻž āĻļā§āĻ¨ā§ kmem_cache_alloc_node
. āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻāĻāĻ¨āĻž āĻāĻāĻ˛ā§, āĻ¸āĻāĻļā§āĻ˛āĻŋāĻˇā§āĻ eBPF āĻā§āĻĄāĻāĻŋ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻā§āĻĄāĻāĻŋ āĻāĻāĻāĻŋ āĻŽā§āĻ¯āĻžāĻĒā§ āĻ
āĻŦāĻā§āĻā§āĻā§āĻ° āĻāĻāĻĒāĻŋ āĻ
ā§āĻ¯āĻžāĻā§āĻ°āĻŋāĻŦāĻŋāĻāĻ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°ā§ āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻĒāĻ°ā§ āĻŽā§āĻ˛ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§ āĻ
āĻŦāĻā§āĻā§āĻāĻāĻŋ āĻ˛ā§āĻĒ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻāĻĻāĻžāĻšāĻ°āĻŖ:
$ sudo ./tracex4
obj 0xffff8d6430f60a00 is 2sec old was allocated at ip ffffffff9891ad90
obj 0xffff8d6062ca5e00 is 23sec old was allocated at ip ffffffff98090e8f
obj 0xffff8d5f80161780 is 6sec old was allocated at ip ffffffff98090e8f
āĻāĻŋāĻāĻžāĻŦā§ āĻāĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻ¸ā§āĻĨāĻžāĻ¨ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻāĻŦāĻ āĻāĻāĻāĻŋ eBPF āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻāĻŋāĻ¤? āĻ¸ā§āĻāĻ¨āĻž āĻāĻĒāĻ° tracex4_user.c
āĻāĻāĻāĻŋ āĻ
āĻŦāĻā§āĻā§āĻ āĻĢāĻžāĻāĻ˛ āĻ˛ā§āĻĄ āĻāĻ°ā§ tracex4_kern.o
āĻĢāĻžāĻāĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ load_bpf_file
.
int main(int ac, char **argv)
{
struct rlimit r = {RLIM_INFINITY, RLIM_INFINITY};
char filename[256];
int i;
snprintf(filename, sizeof(filename), "%s_kern.o", argv[0]);
if (setrlimit(RLIMIT_MEMLOCK, &r)) {
perror("setrlimit(RLIMIT_MEMLOCK, RLIM_INFINITY)");
return 1;
}
if (load_bpf_file(filename)) {
printf("%s", bpf_log_buf);
return 1;
}
for (i = 0; ; i++) {
print_old_objects(map_fd[1]);
sleep(1);
}
return 0;
}
āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ
eBPF āĻĢāĻžāĻāĻ˛ā§ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻĒā§āĻ°ā§āĻŦ āĻ¯ā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧ /sys/kernel/debug/tracing/kprobe_events
. āĻāĻāĻ¨ āĻāĻŽāĻ°āĻž āĻāĻ āĻāĻā§āĻ¨ā§āĻāĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻļā§āĻ¨āĻŋ āĻāĻŦāĻ āĻ¸ā§āĻā§āĻ˛āĻŋ āĻāĻāĻ˛ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻāĻŋāĻā§ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
$ sudo cat /sys/kernel/debug/tracing/kprobe_events
p:kprobes/kmem_cache_free kmem_cache_free
r:kprobes/kmem_cache_alloc_node kmem_cache_alloc_node
āĻ¨āĻŽā§āĻ¨āĻž/āĻŦāĻŋāĻĒāĻŋāĻāĻĢ/-āĻ āĻ āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻāĻāĻāĻāĻžāĻŦā§ āĻāĻ āĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻ¤āĻžāĻ°āĻž āĻ¸āĻŦāĻ¸āĻŽāĻ¯āĻŧ āĻĻā§āĻāĻŋ āĻĢāĻžāĻāĻ˛ āĻ§āĻžāĻ°āĻŖ āĻāĻ°ā§:
XXX_kern.c
: eBPF āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĨ¤XXX_user.c
: āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĨ¤
eBPF āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻāĻāĻāĻŋ āĻŦāĻŋāĻāĻžāĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¯ā§āĻā§āĻ¤ āĻŽāĻžāĻ¨āĻāĻŋāĻ¤ā§āĻ° āĻāĻŦāĻ āĻĢāĻžāĻāĻļāĻ¨ āĻ¸āĻ¨āĻžāĻā§āĻ¤ āĻāĻ°ā§āĨ¤ āĻ¯āĻāĻ¨ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻāĻāĻāĻŋ āĻāĻā§āĻ¨ā§āĻ āĻāĻžāĻ°āĻŋ āĻāĻ°ā§ (āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, tracepoint
), āĻāĻŦāĻĻā§āĻ§ āĻĢāĻžāĻāĻļāĻ¨ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻš āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻāĻžāĻ°ā§āĻĄāĻā§āĻ˛āĻŋ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻāĻŦāĻ āĻāĻāĻāĻžāĻ° āĻ¸ā§āĻĒā§āĻ¸ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻ¯ā§āĻāĻžāĻ¯ā§āĻ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§āĨ¤
āĻāĻĒāĻ¸āĻāĻšāĻžāĻ°
āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻĒāĻ°āĻŋāĻāĻžāĻˇāĻžāĻ¯āĻŧ BPF āĻāĻŦāĻ eBPF āĻ¨āĻŋāĻ¯āĻŧā§ āĻāĻ˛ā§āĻāĻ¨āĻž āĻāĻ°ā§āĻā§āĨ¤ āĻāĻŽāĻŋ āĻāĻžāĻ¨āĻŋ āĻāĻ āĻāĻŦāĻŋāĻĒāĻŋāĻāĻĢ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻ āĻ¨ā§āĻ āĻ¤āĻĨā§āĻ¯ āĻāĻŦāĻ āĻ¸āĻāĻ¸ā§āĻĨāĻžāĻ¨ āĻ°āĻ¯āĻŧā§āĻā§, āĻ¤āĻžāĻ āĻāĻŽāĻŋ āĻāĻ°āĻ āĻ āĻ§ā§āĻ¯āĻ¯āĻŧāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ°āĻ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻ¸āĻāĻ¸ā§āĻĨāĻžāĻ¨ āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻāĻ°āĻŦ
āĻāĻŽāĻŋ āĻĒāĻĄāĻŧāĻžāĻ° āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāĻā§āĻāĻŋ:
BPF: āĻ¸āĻžāĻ°ā§āĻŦāĻāĻ¨ā§āĻ¨ āĻāĻ¨-āĻāĻžāĻ°āĻ¨ā§āĻ˛ āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨ āĻā§āĻ¨āĻžāĻĨāĻ¨ āĻāĻ°āĻŦā§āĻāĨ¤ BPF āĻāĻ° āĻāĻāĻāĻŋ āĻā§āĻŽāĻŋāĻāĻž āĻāĻŦāĻ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻāĻŋ eBPF āĻ āĻŦāĻŋāĻāĻļāĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻā§āĨ¤eBPF āĻāĻ° āĻāĻāĻāĻŋ āĻĒā§āĻā§āĻāĻžāĻ¨ā§āĻĒā§āĻā§āĻ āĻā§āĻŽāĻŋāĻāĻž āĻŦā§āĻ°ā§āĻ¨ā§āĻĄāĻ¨ āĻā§āĻ°ā§āĻāĨ¤ LWN.net āĻĨā§āĻā§ āĻĒā§āĻ°āĻŦāĻ¨ā§āĻ§āĨ¤ āĻŦā§āĻ°ā§āĻ¨ā§āĻĄāĻ¨ āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ āĻāĻŦāĻŋāĻĒāĻŋāĻāĻĢ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻā§āĻāĻ āĻāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻ¤āĻžāĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧā§āĻ° āĻāĻĒāĻ° āĻ¸āĻāĻ¸ā§āĻĨāĻžāĻ¨āĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻŦāĻāĻžāĻ¯āĻŧ āĻ°āĻžāĻā§āĻ¨āĻŦā§āĻ˛āĻ āĻĒā§āĻ¸ā§āĻ .BPF āĻāĻŦāĻ eBPF āĻāĻ° āĻāĻĒāĻ° āĻ¨ā§āĻ āĻā§āĻ˛āĻŋāĻ¯āĻŧāĻž āĻāĻāĻžāĻ¨ā§āĻ¸āĨ¤ āĻ¸ā§āĻāĻā§āĻ° āĻļāĻ°ā§āĻŽāĻž "āĻĻā§āĻ¯ āĻŦāĻŋāĻāĻ¸āĻĄāĻŋ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°: āĻāĻāĻāĻžāĻ°-āĻ˛ā§āĻā§āĻ˛ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻā§āĻ¯āĻžāĻĒāĻāĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻāĻ°ā§āĻāĻŋāĻā§āĻāĻāĻžāĻ°"-āĻāĻ° āĻāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ¯āĻŧ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯āĨ¤ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻāĻžāĻ˛ āĻāĻŦāĻ āĻ¸āĻ¤ā§āĻ¯āĻŋāĻ āĻāĻĒāĻ¨āĻŋ āĻ¸ā§āĻ˛āĻžāĻāĻĄ āĻŦā§āĻāĻ¤ā§ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯.eBPF, part1: āĻ āĻ¤ā§āĻ¤, āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻāĻŦāĻ āĻāĻŦāĻŋāĻˇā§āĻ¯āĻ¤ āĻĢā§āĻ°āĻŋāĻ¸ āĻāĻ˛āĻŋāĻ¸āĨ¤ āĻ¸āĻā§āĻā§ āĻ˛āĻāĻā§āĻ°ā§āĻĄāĻ§āĻžāĻ°āĻžāĻŦāĻžāĻšāĻŋāĻāĻ¤āĻž , āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻāĻž āĻĒāĻĄāĻŧāĻžāĻ° āĻŽā§āĻ˛ā§āĻ¯. āĻāĻŦāĻŋāĻĒāĻŋāĻāĻĢ-āĻ āĻāĻŽāĻžāĻ° āĻĻā§āĻāĻž āĻ¸ā§āĻ°āĻž āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋāĨ¤
āĻāĻ¤ā§āĻ¸: www.habr.com