where does this $post_id come from?

It comes from wp_insert_post(), where do_action() is called with two additional parameters:

do_action('save_post', $post_ID, $post);

So it is not you who adds the parameters, it is WordPress.

If you register your callback with the fourth parameter set to 2

add_action( 'save_post', 'mytestfunc', 10, 2 );

… you will even get the complete $post object:

function mytestfunc( $post_id, $post )