add benchmark and some opt