move marshal functions
add benchmark, unmarshal benchmark not working